1.vsftpd服务软件包,基于RHEL5.4
vsftpd-2.0.5-16.el5.i386.rpm:vsftpd主程序包
2.vsftpd相关文件和目录
/etc/vsftpd/vsftpd.conf:vsftpd的核心配置文件
/etc/vsftpd/ftpusers:用于指定哪些用户不能访问FTP服务器
/etc/vsftpd/user_list:指定允许使用vsftpd的用户列表文件
/etc/vsftpd/vsftpd_conf_migrate.sh:是vsftpd操作的一些变量和设置脚本
/var/ftp/:默认情况下匿名用户的根目录
/etc/logrotate.d/vsftpd.log #日志相关
/etc/pam.d/vsftpd #pam认证模块
/etc/rc.d/init.d/vsftpd #启动脚本
/etc/vsftpd/ftpusers #用户黑名单
/etc/vsftpd/user_list
#用户列表(黑,白名单),结合userlist_enable=YES/NO、userlist_deny=YES/NO使用
/etc/vsftpd/vsftpd.conf #主配置文件
/etc/vsftpd/vsftpd_conf_migrate.sh #卸载时保存配置文件的脚本
/usr/sbin/vsftpd #可执行文件(主程序文件)
/usr/share/doc/vsftpd-2.0.5 #说明,样例文件的存放目录
/usr/share/man/man5/ #手册页目录
/var/ftp/pub #匿名用户的默认登录目录
3.配置FTP服务器
默认配置文件为:
anonymous_enable=YES //允许使用匿名账户
local_enable=YES //允许使用本地系统账户
write_enable=YES //允许本地账户写入
local_umask=022 //默认的创建目录的反掩码
dirmessage_enable=YES //是否允许进入ftp目录的欢迎信息
xferlog_enable=YES //启用上传和下载日志
connect_from_port_20=YES //从20端口传输数据
xferlog_std_format=YES //使用标准日志格式
listen=YES //以独立进程启动ftp服务
pam_service_name=vsftpd //用于指定 PAM 服务的名称
userlist_enable=YES //是否启用userlist用户列表
tcp_wrappers=YES //使用tcp_wrappers作为主机访问控制方式。
<1> 需求一,允许匿名用户上传文件和目录,但不允许删除和重命名
在vsftpd.conf中添加如下参数即可:
anon_mkdir_write_enable=YES
anon_upload_enable=YES
anon_other_write_enable=YES #此参数表示匿名具有删除、重命名权限,不推荐使用
注意:使其生效的前提是,必须对父目录也有读写的权限,所以必须使用
chown ftp <目录> #权限是755,这个不能改变!
<2> 需求二,禁锢根目录
当使用账户登录时,可以通过cd命令进入到我的/根目录,是不安全的,必须禁锢其宿主目录,在vsftpd.conf中添加此参数:
示例:

chroot_local_user=YES #锁定到宿主目录

<3> 创建虚拟用户
1.创建账户文本文件
vim /etc/vsftpd/vsftpd_virtualuser.txt
#添加虚拟帐号与密码,格式为:
虚拟帐号01 #test
密码 #123456
虚拟帐号02 #vip
密码 #123456
2.生成账户数据库
db_load -T -t hash -f /etc/vsftpd/vsftpd_virtualuser.txt /etc/vsftpd/vsftpd_virtualuser.db
注意:RHEL5.4默认只安装db4-devel-4.3.29-10.el5.rpm和db4-4.3.29-10.el5.rpm,要使用db_load命令,必须安装db4-utils-4.3.29-10.el5.rpm(光盘中)包,否则会出现找不到db_load命令错误。
3.修改账户数据库访问权限
chmod 600 /etc/vsftpd/vsftpd_virtualuser.db
#为了安全,推荐只有root用户可读可写权限
4.配置PAM文件
为了使服务器能够使用数据库文件,对客户端进行身份验证,需要调用系统的PAM模块.PAM(Plugable Authentication Module)为可插拔认证模块,不必重新安装应用系统,通过修改指定的配置文件,调整对该程序的认证方式。PAM模块配置文件路径为/etc/pam.d/目录,此目录下保存着大量与认证有关的配置文件,并以服务名称命名。修改vsftpd对应的PAM配置文件vim /etc/pam.d/vsftpd,将默认配置使用“#”全部注释,添加以下字段:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_virtualuser
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_virtualuser

5.创建虚拟帐号对应的系统帐户
useradd -d /var/ftp/share/ ftpuser
chmod -R 500 /home/ftp/share/
#只读帐号ftp只允许下载,修改share目录其他用户权限为rx可读可执行。
useradd -d /var/ftp/vip/ ftpvip
chmod -R 700 /home/ftp/vip/
#可读写帐号vip允许上传和下载,所以对vip目录权限设置为rwx,可读可写可执行。
6.建立配置文件
<1> 修改主配置文件vsftpd.conf
添加以下参数:
user_config_dir=/etc/vsftpd/vuserconfig #虚拟用户配置文件目录
<2>建立虚拟账户配置文件
2.1
cd /etc/vsftpd/vuserconfig
touch test #此vsftpd_virtualuser.txt文件中设置的帐户
vim test
添加以下参数:
guest_enable=yes #开启虚拟帐号登录
guest_username=ftpuser #设置ftp对应的系统帐号为ftpuser
2.2
cd /etc/vsftpd/vuserconfig
touch vip
vim vip #此vsftpd_virtualuser.txt文件中设置的虚拟帐户
添加以下参数:
guest_enable=yes #开启虚拟帐号登录
guest_username=ftpvip #设置ftp对应的系统帐号为ftpvip
anon_world_readable_only=no #允许匿名用户浏览器整个服务器的文件系统
write_enable=yes #允许在文件系统写入权限
anon_mkdir_write_enable=yes #允许创建文件夹
anon_upload_enable=yes #开启匿名帐号的上传功能
7.测试
用test登录成功,无法上传(无法创建目录)

用vip登录成功,可以上传(可以创建目录)
