让Vsftp支持虚拟用户
环境:CentOS 5.5 操作系统
一.安装:
1.安装Vsftpd服务相关部件:
yum –y install vsftpd
 
二.系统帐户
1.建立Vsftpd服务的宿主用户:
 useradd vsftpd -s /sbin/nologin
 
三.调整Vsftpd的配置文件:
1.编辑配置文件前先备份
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
2.编辑主配置文件Vsftpd.conf
(这里我将原配置文件的修改完全记录,凡是修改的地方我都会保留注释原来的配置。其中加入我对每条配置项的认识,对于一
些比较关键的配置项这里我做了我的观点,并且原本英语的说明我也不删除,供参考对比用。)
------------------------------------------------------------------------------

anonymous_enable=NO
设定不允许匿名访问
local_enable=YES
设定本地用户可以访问。注意:主要是为虚拟宿主用户,www.linuxidc.com如果该项目设定为NO那么所有虚拟用户将无法访问。
write_enable=YES
设定可以进行写操作。
local_umask=022
设定上传后文件的权限掩码。
anon_upload_enable=NO
禁止匿名用户上传。
anon_mkdir_write_enable=NO
禁止匿名用户建立目录。
dirmessage_enable=YES
设定开启目录标语功能。
xferlog_enable=YES
设定开启日志记录功能。
connect_from_port_20=YES
设定端口20进行数据连接。
chown_uploads=NO
设定禁止上传文件更改宿主。
#chown_username=whoever
chroot_local_user=YES
设定登陆后.只可以访问自己的属主目录.不可访问上一层目录文件
xferlog_file=/var/log/vsftpd.log
设定Vsftpd的服务日志保存路径。注意,该文件默认不存在。必须要手动touch出来,并且由于这里更改了Vsftpd的服务宿主
用户为手动建立的Vsftpd。必须注意给与该用户对日志的写入权限,否则服务将启动失败。
xferlog_std_format=YES

ascii_upload_enable=YES
ascii_download_enable=YES
设定支持ASCII模式的上传和下载功能。
ftpd_banner=Welcome to blah FTP service ^_^
设定Vsftpd的登陆标语。
chroot_list_enable=NO
禁止用户登出自己的FTP主目录。
ls_recurse_enable=NO
禁止用户登陆FTP后使用"ls -R"的命令。该命令会对服务器性能造成巨大开销。如果该项被允许,那么挡多用户同时使用该命令时将会对该服务器造成威胁。
listen=YES
pam_service_name=vsftpd
设定PAM服务下Vsftpd的验证配置文件名。因此,PAM验证将参考/etc/pam.d/下的vsftpd文件配置。
userlist_enable=YES
设定userlist_file中的用户将不得使用FTP。
tcp_wrappers=YES
设定支持TCP Wrappers。#KC: The following entries are added for supporting virtual ftp users.
以下这些是关于Vsftpd虚拟用户支持的重要配置项目。默认Vsftpd.conf中不包含这些设定项目,需要自己手动添加配置。
guest_enable=YES
设定启用虚拟用户功能。
guest_username=virtusers
指定虚拟用户的宿主用户。
virtual_use_local_privs=YES
设定虚拟用户的权限符合他们的宿主用户。
user_config_dir=/etc/vsftpd/vconf
设定虚拟用户个人Vsftp的配置文件存放路径。也就是说,这个被指定的目录里,将存放每个Vsftp虚拟用户个性的配置文件,
一个需要注意的地方就是这些配置文件名必须和虚拟用户名相同。保存退出。
三.制作虚拟用户数据库文件
1.先建立虚拟用户名单文件:
[root@localhost etc]# touch ftpuser.txt
格式:
[用户名]xiao
[密码] xiao
 
2.安装DB4软件包
yum install db4*
3. 生成的虚拟用户数据文件
[root@localhost etc]# db_load -T -t hash -f /etc/ftpuser.txt /etc/vsftpd_login.db
4.设置权限
chmod 600 /etc/vsftpd_login.db
四.设定PAM验证文件,并指定虚拟用户数据库文件进行读取
1在编辑前做好备份:
[root@linuxidc.com ~]# cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.backup
2编辑Vsftpd的PAM验证配置文件
[root@linuxidc.com ~]# vi /etc/pam.d/vsftpd
----------------------------------------------------------------
#%PAM-1.0
auth    required      /lib/security/pam_userdb.so     db=/etc/vsftpd/virtusers
account required      /lib/security/pam_userdb.so     db=/etc/vsftpd/virtusers
以上两条是手动添加的,上面的全部加#注释了.内容是对虚拟用户的安全和帐户权限进行验证。这里有个要注意说明的:如果系统是64位系统在这里的所有lib后面要加入64
auth    required      /lib64/security/pam_userdb.so     db=/etc/vsftpd/virtusers
account required      /lib64/security/pam_userdb.so     db=/etc/vsftpd/virtusers
 
五.建立用户的宿主目录  如:
Mkdir -p /var/ww/xiao
给予权限
Chown –R vsftpd:vsftpd /var/www
 
六.建立虚拟用户配置文件存放路径
Mkdir /etc/vsftpd_user_conf
Cd /etc/vsftpd_user_conf
Touch xiao (配置文件名一定要和虚拟用户名一样)
七.编辑用户配置文件
Vim xiao
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
chown_uploads=YES
chown_username=vsftpd
local_root=/var/www/********/
 
 
注:
如果开启iptables防火墙,需要配置:
iptables -A INPUT -p tcp -s 0/0 --dport 端口j ACCEPT
iptables -A INPUT -p tcp -s 0/0 --dport 端口j ACCEPT
如果开始SELinux,需要解除selinux阻止:
setsebool -P ftpd_disable_trans 1
service vsftpd restart