分类: LINUX
2009-11-30 12:35:12
FTP相关内容
FTP作为互联网上使用最多的协议之一,常常会使用到。实现这个协议的软件也非常多,今天我们基于Red Hat Enterprise Linux 5上默认vsftpd这个软件来讨论一下,ftp服务器某些肤浅的功能。
一、基本配置
/etc/vsftpd/vsftpd.conf为vsftp程序的主配置文件,其中默认添加了如下的参数:
#打开这个选项可以支持用户匿名登录;
#这个选项等于YES,支持本地用户登录。如果没有这个选项,默认为NO。
#这个选项置为YES可以支持用户创建文件(注意:用户对要创建文件的目录必须有“w”和“x”权限。)
#本地用户创建文件或目录时的umask(掩码)
#允许匿名用户上传文件
#允许匿名用户创建目录
#打开这个选项,当用户进入某个目录时,会在目录下搜索.message文件,并显示到#屏幕上。这个选项可以配合message_file选项。
#如果这个选项为YES,则会记录上传和下载信息,默认记录到/var/log/vsftpd.log文
#件中,但这个文件的位置可以由vsftpd_log_file选项来控制。
#注意:当xferlog_std_format设置为NO的时候以上两个选项才能生效。
#以上两个参数是将传输的日志记录以xferlog的标准格式记录在xferlog_file选项指
#定的日志文件中。
#指定主动模式的数据端口
#若chown_uploads=YES,并且chown_username=whoever,则上传的文件的所有者#会变成whoever。
#在idle_session_timeout限定的时间内,如果客户端没有任何操作,服务器将断开#连接,单位为秒(s)。
#数据连接超时时间,即如果发出数据连接经过data_connection_timeout后没有响
#应,则断开连接,单位也为秒(s)。
#?????????
userlist_file = /etc/vsftpd/user_list
#以上两个参数的作用是控制用户登录
# vsftpd程序通过两种方式来限制用户登录:
1) 通过userlist_enable与userlist_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取数据,把取出的每行当做一个用户名,如果某个用户名,则拒绝这个用户登录。
ascii_download_enable=YES
#允许客户端以ASCII的模式上传和下载文件。即把数据转换为ASCII码形式传输。
#当客户端登录的时候,将后面的字符串显示在客户端。
banner_file = /somefile
#这个选项可以将somefile中的信息输出到客户端。
banned_email_file = /somefile
#开启deny_email_enable选项,可以阻止密码是出现在somefile中的Email地址的
#匿名用户。
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文件中的用户不受限制
#此选项为YES时,支持ls –R命令,即可以递归显示某个目录的内容。
#护进程xinetd管理。
#指定vsftpd使用的pam配置文件
#是否支持tcp wrapper进行访问控制。
二、两个实验
1. 虚拟用户——映射到一个本地用户
Step 1) 创建虚拟用户的数据库.
通过pam_userdb这个模块来认证虚拟用户,这需要一个通用格式的”用户名/密码”格式的数据库文件。通过db_load这个命令来创建(注:需要安装db4-4.3.29-10.el5及db4-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. 分用户配置
实验要求:有两个用户,tom和jerry,要求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