Chinaunix首页 | 论坛 | 博客
  • 博客访问: 487791
  • 博文数量: 82
  • 博客积分: 3003
  • 博客等级: 中校
  • 技术积分: 1285
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-11 15:27
文章分类

全部博文(82)

文章存档

2011年(1)

2010年(5)

2009年(63)

2008年(13)

我的朋友

分类: LINUX

2009-11-30 12:35:12

FTP相关内容

FTP作为互联网上使用最多的协议之一,常常会使用到。实现这个协议的软件也非常多,今天我们基于Red Hat Enterprise Linux 5上默认vsftpd这个软件来讨论一下,ftp服务器某些肤浅的功能。

一、基本配置

/etc/vsftpd/vsftpd.confvsftp程序的主配置文件,其中默认添加了如下的参数:

 

  1. anonymous_enable=YES

#打开这个选项可以支持用户匿名登录;

  1. local_enable=YES

#这个选项等于YES,支持本地用户登录。如果没有这个选项,默认为NO

  1. write_enable=YES

#这个选项置为YES可以支持用户创建文件(注意:用户对要创建文件的目录必须有“w”和“x”权限。)

  1. local_umask=022

#本地用户创建文件或目录时的umask(掩码)

  1. anon_upload_enable=YES

#允许匿名用户上传文件

  1. anon_mkdir_write_enable=YES

#允许匿名用户创建目录

  1. dirmessage_enable=YES

#打开这个选项,当用户进入某个目录时,会在目录下搜索.message文件,并显示到#屏幕上。这个选项可以配合message_file选项。

  1. xferlog_enable=YES

#如果这个选项为YES,则会记录上传和下载信息,默认记录到/var/log/vsftpd.log

#件中,但这个文件的位置可以由vsftpd_log_file选项来控制。

#注意:当xferlog_std_format设置为NO的时候以上两个选项才能生效。

  1. xferlog_std_format=YES
  2. xferlog_file=/var/log/xferlog

#以上两个参数是将传输的日志记录以xferlog的标准格式记录在xferlog_file选项指

#定的日志文件中。

  1. connect_from_port_20=YES

#指定主动模式的数据端口

  1. chown_uploads=YES
  2. chown_username=whoever

#chown_uploads=YES,并且chown_username=whoever,则上传的文件的所有者#会变成whoever

  1. idle_session_timeout=600

#idle_session_timeout限定的时间内,如果客户端没有任何操作,服务器将断开#连接,单位为秒(s)。

  1. data_connection_timeout=120

#数据连接超时时间,即如果发出数据连接经过data_connection_timeout后没有响

#应,则断开连接,单位也为秒(s)。

  1. nopriv_user=ftpsecure

#?????????

  1. userlist_enable=YES

userlist_file = /etc/vsftpd/user_list

#以上两个参数的作用是控制用户登录

# vsftpd程序通过两种方式来限制用户登录:

1)       通过userlist_enableuserlist_file共同确定某些用户是否可以通过验证,即在userlist_file指定的文件中出现的用户,不被允许登录。

当一个用户只在userlist_file文件中出现时(即不再ftpusers文件中出现),登录提示信息如下:

>Name (localhost:root): root

>530 Permission denied.

>Login failed.

2)       通过/etc/vsftpd/ftpusers文件限制,当一个用户出现在ftpusers这个文件中,则这个用户不能通过密码验证。提示信息如下,好像是密码错误一样:

>Name (localhost:root): root

>331 Please specify the password.

>Password:

>530 Login incorrect.

>Login failed.                                                      

注:ftpusers文件名的制定在/etc/pam.d/vsftpd中,

auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed

意思是从/etc/vsftpd/ftpusers取数据,把取出的每行当做一个用户名,如果某个用户名,则拒绝这个用户登录。

  1. ascii_upload_enable=YES

ascii_download_enable=YES

#允许客户端以ASCII的模式上传和下载文件。即把数据转换为ASCII码形式传输。

  1. ftpd_banner=Welcome to blah FTP service.

#当客户端登录的时候,将后面的字符串显示在客户端。

banner_file = /somefile

#这个选项可以将somefile中的信息输出到客户端。

  1. deny_email_enable=YES

banned_email_file = /somefile

#开启deny_email_enable选项,可以阻止密码是出现在somefile中的Email地址的

#匿名用户。

  1. chroot_local_user=YES

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

#限定某些用户在登录时是否执行chroot,这三个选项需要配合使用,其关系如下

1)       chroot_local_user       no

chroot_list_enable      no     任何系统账号不受chroot限制

 

2)       yes

no         所有系统帐号受chroot限制

3)       no        

yes       只有chroot list文件中的用户受限制

4)       yes

yes       只有chroot文件中的用户不受限制

 

  1. ls_recurse_enable=YES

#此选项为YES时,支持ls –R命令,即可以递归显示某个目录的内容。

  1. listen=YES
    #
    listen=YES,则vsftpd服务以standalone模式启动,若listen=NO,则受到超级守

#护进程xinetd管理。

  1. pam_service_name=vsftpd

#指定vsftpd使用的pam配置文件

  1. tcp_wrappers=YES

#是否支持tcp wrapper进行访问控制。

 

二、两个实验

1.       虚拟用户——映射到一个本地用户

Step 1) 创建虚拟用户的数据库.

通过pam_userdb这个模块来认证虚拟用户,这需要一个通用格式的用户名/密码格式的数据库文件。通过db_load这个命令来创建(注:需要安装db4-4.3.29-10.el5db4-utils-4.3.29-10.el5.i386这两个包),步骤如下:

1)       创建一个包含用户名和密码的文本文件,

#vi logins.txt

tom

redhat

jerry

123456

注意名字与密码之前不能有空格,这个文件表示用户tom密码是redhat,而用户jerry的密码是123456.

2)       将文本转换为数据库文件,

#db_load -T -t hash -f logins.txt /etc/vsftpd/login.db

#chmod 600 /etc/vsftpd/login.db

Step 2) 创建一个pam配置文件

1)       #vi /etc/pam.d/ftp

auth required /lib/security/pam_userdb.so db=/etc/vsftpd/login

account required /lib/security/pam_userdb.so db=/etc/vsftpd/login

(一定要在主配置文件中修改相应的选项,pam_service_name=ftp)

Step 3) 创建虚拟用户要映射到的用户,

1)       添加用户

[root@server1 Server]# useradd -d /home/ftpsite virtual

[root@server1 Server]# ll -d /home/ftpsite/

drwx------ 3 virtual virtual 4096 Nov 27 19:56 /home/ftpsite/

2)       拷入一些文件,以便测试登录效果,

cp /etc/hosts /home/ftpsite

chown virtual.virtual /home/ftpsite/hosts

Step 4) 修改主配置文件,

1)       开启虚拟用户映射的功能,并制定映射到的用户。(其余具体配置请参考“一、基本配置”,)

guest_enable=YES

guest_username=virtual

 

Step 5) 重启vsftpd服务

[root@server1 ~]# service vsftpd restart

Shutting down vsftpd:                                      [  OK  ]

Starting vsftpd for vsftpd:                                [  OK  ]

 

Step 6) 测试

 

Launch another shell session (or background vsftpd with CTRL-Z and then "bg").

Here is an example of an FTP session:

 

ftp localhost 10021

Connected to localhost (127.0.0.1).

220 (vsFTPd 2.0.5)

Name (localhost:root): tom

331 Please specify the password.

Password:(redhat)

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> pwd

257 "/"

ftp> ls

227 Entering Passive Mode (127,0,0,1,117,135)

150 Here comes the directory listing.

226 Transfer done (but failed to open directory).

ftp> size hosts

213 147

ftp>

注意: 执行ls命令时,出现"failed to open directory". 这是因为目录/home/ftpsite 不是一个world_readable的目录。可以通过anon_world_readable_only=NO使用户可以看到目录中的内容。

 

 

2.       分用户配置

实验要求:有两个用户,tomjerry,要求tom只能读取和下载,jerry可以读取、下载和上传。

Step 1) 激活分用户配置支持

修改/etc/vsftpd/vsftpd.conf文件,

user_config_dir=/etc/vsftpd/vsftpd_user_conf

这个选项是指定用户配置文件的位置。

mkdir /etc/vsftpd/vsftpd_user_conf

 

Step 2)授予tom“读”权限

vsftpd_user_conf目录下建立一个与tom同名的文件,加入对tom生效的参数,

#echo "anon_world_readable_only=NO" > /etc/vsftpd/vsftpd_user_conf/tom

#echo "write_enable=NO" >>/etc/vsftpd/vsftpd_user_conf/tom

 

Step 3) 授予jerry“读写”权限

echo "anon_world_readable_only=NO">/etc/vsftpd/vsftpd_user_conf/jerry

echo "write_enable=YES" >> /etc/vsftpd/vsftpd_user_conf/jerry

echo "anon_upload_enable=YES" >> /etc/vsftpd/vsftpd_user_conf/jerry

 

阅读(1963) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~