(一) 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服务是按以上操作进行的,那出现这种问题的原因应该是对应的虚根目录的权限问题,应该把虚拟用户的家目录权限设置为宿主用户: