(一) Vsftp服务的安装
1) 安装vsftp,pam和db4
#yum install vsftpd pam* db4* -y
提示:安装pam是为了配置虚拟用户pam认证登录
安装db4是为了将虚拟用户信息文件生成对应的数据库文件
2) 设置vsftp为系统服务,开机自启动
#chkconfig --level 35 vsftpd on
3) 建立ftp虚拟宿主账户目录
#useradd ftpuser -s /sbin/nologin
提示:这个ftpuser只是虚拟账户的宿主,本身不需要登录,/sbin/nologin意思是用户不允许登录(通过ftp可以连接)
4) 配置vsftpd.conf文件
#vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO(设置不允许匿名用户登录)
local_enable=YES(用来控制是否容许本地用户登录,设置为YES将允许/etc/passwd里面的正常用户的账号登录)
write_enable=NO(不允许一些FTP命令去更改文件系统。这些命名是STOR, DELE, RNFR, RNTO, MKD, RMD, APPE 和 SITE)
local_umask=022(设置本地用户创建文件的权限)
dirmessage_enable=YES(设置为YES后,FTP服务器的用户在首次进入一个新目录的时候将显示一段信息)
xferlog_enable=YES(详细记录上传和下载信息。默认情况下,这个文件是/var/log/vsftpd.log,但可以通过更改vsftpd_log_file来指定其默认位置)
connect_from_port_20=NO(用来控制服务器是否使用20端口号来做数据传输。此处设置为关闭,是启用了被动模式)
xferlog_file=/var/log/xferlog(这个设置是设定生成wu-ftpd格式的log的文件名。只有启用了xferlog_enable和xferlog_std_format后才能生效,但不能和dual_log_enable同时启用)
xferlog_std_format=YES(启用后log文件将以标准的xferlog格式写入【wu-ftpd使用的格式】,以便于用统计工具进行分析)
chroot_local_user=NO(设置为YES,则本地用户登录后将被默认的锁定在虚根下,并被放在他的home目录下)
chroot_list_enable=YES(如果激活,你要提供一个用户列表,表内的用户将在登录后被放在其home目录,锁定在虚根下)
chroot_list_file=/etc/vsftpd/chroot_list(这个项提供了一个本地用户列表,表内的用户登录后将被放在虚根下,并锁定在home目录。这需要chroot_list_enable项被启用)
listen=YES(如果启用,VSFTPD将以独立模式(standalone)运行,也就是说可以不依赖于inetd或者类似的东东启动。直接运行VSFTPD
的可执行文件一次,然后VSFTPD就自己去监听和处理连接请求了)
pam_service_name=vsftpd(设定vsftpd将要用到的PAM服务的名字)
tcp_wrappers=YES(如果启用,vsftpd将被tcp_wrappers所支持。进入的(incoming)连接将被tcp_wrappers访问控制所反馈。如果tcp_wrappers设置了 VSFTPD_LOAD_CONF环境变量,那么vsftpd将尝试调用这个变量所指定的配置)
userlist_enable=YES(如果启用,vsftpd将在userlist_file里读取用户列表。如果用户试图以文件里的用户名登录,那么在被询问用户密码前,他们就将被系统拒绝)
userlist_deny=NO(这个设置在userlist_enable被激活后能被验证。如果你设置为NO,那么只有在userlist_file里明确列出的用户才能登录。 如果是被拒绝登录,那么在被询问密码前,用户就将被系统拒绝)
userlist_file=/etc/vsftpd/user_list(当userlist_enable被激活,系统将去这里调用文件,默认值:/etc/vsftpd/user_list)
guest_enable=YES(如果启用,所有的非匿名用户登录时将被视为”游客“,其名字将被映射为guest_username里所指定的名字)
guest_username=ftpuser(这个设置设定了游客进入后,其将会被映射的名字)
user_config_dir=/etc/vsftpd/vconf(设定虚拟用户个人vsftp的配置文件存放路径)
pasv_enable=YES(以被动模式获取数据连接)
pasv_min_port=10020(指定为被动模式数据连接分配的最小端口。可用来指定一个较小的范围以配合防火墙)
pasv_max_port=10025(指定为被动模式数据连接分配的最大端口。可用来指定一个较小的范围以配合防火墙)
5) 建立虚拟用户文件
#mkdir /etc/vsftpd/vconf/
#touch /etc/vsftpd/vconf/vir_user
注意:第一行和最后一行不能有字符丢失,也不能有空格,不然会报错
6) 建立虚拟用户
#vim /etc/vsftpd/vconf/vir_user
注意:vir_user在编辑时,用户占单独一行,下一行是该用户的密码,依次类推
加入需要锁定登录用户只能在家目录的位置,然后将账户输入一行一个就可以了
#vim /etc/vsftp/chroot_list
注意:每个用户都单独占一行
7) 在user_list白名单中添加可登录的用户
由于vsftpd.conf中的userlist_enable=YES和userlist_deny=NO,所以只有user_list中被列出的用户才能登录。
#vim user_list
7) 生成数据库
#db_load -T -t hash -f /etc/vsftpd/vconf/vir_user /etc/vsftpd/vconf/vir_user.db
8) 设置数据库的访问权限
#chmod 600 /etc/vsftpd/vconf/vir_user.db
#chmod 600 /etc/vsftpd/vconf/vir_user
9) 修改/etc/pam.d/vsftpd的内容
#echo "auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vconf/vir_user" >> /etc/pam.d/vsftpd
#echo "account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vconf/vir_user" >> /etc/pam.d/vsftpd
10) 创建用户的配置信息
#touch /etc/vsftpd/vconf/ht
#vim /etc/vsftpd/vconf/ht
注意:用户配置文件的名字要和创建的“虚拟用户”的名字对应,每个虚拟用户都需要单独的文件
(二) 常见问题
a) 端口配置问题:
配搭建vsftp服务过程中,出现如下错误信息:
使用telnet测试端口号也无法连通:
这种情况是对应的端口未打开。
检查防火墙状态,没有开启vsftp的20和21端口:
处理方法:
在防火墙中打开vsftp的相应端口:
注意:防火墙的出入规则的添加不可在随意位置添加,否则会出现端口虽然是开启的,但连接还是会报错。
重启防火墙后查看防火墙对应的状态是否已经打开:
b) vsftp 530 login incrrent虚拟用户无法登陆问题:
利用tail –n 20 /var/log/secure查看在最后测试时出现530 login incrrent的提示的日志信息。
Oct 21 14:19:40 www vsftpd: PAM unable to dlopen(/lib/security/pam_userdb.so)
Oct 21 14:19:40 www vsftpd: PAM [error: /lib/security/pam_userdb.so: wrong ELF class: ELFCLASS32]
Oct 21 14:19:40 www vsftpd: PAM adding faulty module: /lib/security/pam_userdb.so
Oct 21 14:19:40 www vsftpd: pam_unix(vsftpd:auth): check pass; user unknown
Oct 21 14:19:40 www vsftpd: pam_unix(vsftpd:auth): authentication failure; logname= uid=0 euid=0 tty=ftp ruser=kanecruise rhost=60.55.8.102
Oct 21 14:19:40 www vsftpd: pam_succeed_if(vsftpd:auth): error retrieving information about user kanecruise
这是载入/lib/security/pam_userdb.so失败,由于本机是64位机器,所以需载入lib64,32位机器需载入lib:
注意:对虚拟用户的验证使用了sufficient这个控制标志。这个标志的含义是如果这个模块验证通过,就不必使用后面的层叠模块进行验证了;但如果失败了,就继续后面的认证,也就是使用系统真实用户的验证。
以上步骤配置好后重启vsftpd服务即可。
c) ftp connect: No route to host 问题:
在/etc/sysconfig/ iptables-config中更改IPTABLES_MODULES=""为IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp"
然后重启iptables 服务,会直接加载ip_nat_ftp和ip_conntrack_ftp模块
d) vsftpd 530 Permission denied问题:
如果你搭建的vsftp服务是按以上操作进行的,那出现这种问题的原因应该是对应的虚根目录的权限问题,应该把虚拟用户的家目录权限设置为宿主用户: