我们使用vsftpd服务程序里实现FTP协议,重点介绍三种认证模式的配置方法。也就是说,使用vsftpd配置服务器,用户可以通过以下三种方式访问到FTP服务器:

匿名开放模式:是一种最不安全的认证模式,任何人都可以无需密码验证而直接登录到FTP服务器。

本地用户模式:是通过Linux系统本地的账户密码信息进行认证的模式,相较于匿名开放模式更安全,而且配置起来也很简单。但是如果被黑客破解了账户的信息,就可以畅通无阻地登录FTP服务器,从而完全控制整台服务器。

虚拟用户模式:是这三种模式中最安全的一种认证模式,它需要为FTP服务单独建立用户数据库文件,虚拟出用来进行口令验证的账户信息,而这些账户信息在服务器系统中实际上是不存在的,仅供FTP服务程序进行认证使用。这样,即使黑客破解了账户信息也无法登录服务器,从而有效降低了破坏范围和影响。

 

准备:

1.服务器安装vsftpd软件包

[root@linuxprobe ~]# yum install -y ftp

2.清空iptables防火墙的默认策略

[root@linuxprobe ~]# iptables -F
[root@linuxprobe ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]

3.确保客户端可以ping通服务器,以便之后测试。

 

4.客户端安装ftp客户端工具,以便之后测试。

[root@linuxprobe ~]# yum install -y ftp

 

 

匿名开放模式

 

服务端配置

1.去掉vsftpd服务主配置文件中vsftpd.conf,不必要的注释

[root@linuxprobe ~]# mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak
[root@linuxprobe ~]# grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf

2.修改主配置

[root@linuxprobe ~]# vim /etc/vsftpd/vsftpd.conf
#省略若干...
########
anonymous_enalbe=YES
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enalbe=YES
anon_other_write_enable=YES
########
#省略若干...

3.查看并修改匿名模式下,访问目录 /var/ftp/ 的权限

[root@linuxprobe ~]# ls -ld /var/ftp/pub
drwxr-xr-x. 3 root root 16 Jul 13 14:38 /var/ftp/pub
[root@linuxprobe ~]# chown -Rf ftp /var/ftp/pub
[root@linuxprobe ~]# ls -ld /var/ftp/pub
drwxr-xr-x. 3 ftp root 16 Jul 13 14:38 /var/ftp/pub

 

4.查看并关闭SELinux域对ftp的限制

[root@linuxprobe ~]# getsebool -a | grep ftp

[root@linuxprobe ~]# setsebool -P ftpd_full_access=on

 

5.重启服务,并加入启动项

[root@linuxprobe ~]# systemctl restart vsftpd
[root@linuxprobe ~]# systemctl enable vsftpd
 ln -s '/usr/lib/systemd/system/vsftpd.service' '/etc/systemd/system/multi-user.target.wants/vsftpd.service

 

客户端验证

 

 

 

本地用户模式

 

服务端配置

1.去掉vsftpd服务主配置文件中vsftpd.conf,不必要的注释。并修改vsftpd.conf文件

[root@linuxprobe ~]# mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak
[root@linuxprobe ~]# grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf

[root@linuxprobe ~]# vim /etc/vsftpd/vsftpd.conf
#省略若干...
########
anonymous_enable=NO
local_enable=YES
local_umask=022
write_enable=YES

userlist_enable=YES    #开启userlist名单
userlist_deny=YES       #userlist名单中的用户登录限制
########
#省略若干...

 

关于userlist名单,有兴趣了解可以查看我的另一篇:vsftpd --用户名单文件ftpusers和user_list

 

2.查看并关闭SELinux域对ftp的限制

[root@linuxprobe ~]# getsebool -a | grep ftp

[root@linuxprobe ~]# setsebool -P ftpd_full_access=on

 

3.重启服务,并加入启动项

[root@linuxprobe ~]# systemctl restart vsftpd
[root@linuxprobe ~]# systemctl enable vsftpd
 ln -s '/usr/lib/systemd/system/vsftpd.service' '/etc/systemd/system/multi-user.target.wants/vsftpd.service

 

客户端验证

如果访问受限,那就查看一下 userlist 和  ftpusers文件,确认有没有对登录的用户限制,一般都是这个,修改一下就好。

 

 

 

虚拟用户模式

 

服务端配置

1 创建用户数据库文件 vuser.db

[root@linuxprobe ~]# cd /etc/vsftpd/
[root@linuxprobe vsftpd]# vim vuser.list
zhangsan
redhat
lisi
redhat

[root@linuxprobe vsftpd]# db_load -T -t hash -f vuser.list vuser.db
[root@linuxprobe vsftpd]# file vuser.db
vuser.db: Berkeley DB (Hash, version 9, native byte-order)
[root@linuxprobe vsftpd]# chmod 600 vuser.db
[root@linuxprobe vsftpd]# rm -f vuser.list

 

2 创建ftp根目录&虚拟用户映射到本地的用户

[root@linuxprobe ~]# useradd -d /var/ftproot -s /sbin/nologin virtual
[root@linuxprobe ~]# ls -ld /var/ftproot/
drwx------. 3 virtual virtual 74 Jul 14 17:50 /var/ftproot/
[root@linuxprobe ~]# chmod -Rf 755 /var/ftproot/

 

3 创建用于虚拟用户认证的 PAM配置文件vsftpd.vu

[root@linuxprobe ~]# vim /etc/pam.d/vsftpd.vu
auth       required     pam_userdb.so db=/etc/vsftpd/vuser
account    required     pam_userdb.so db=/etc/vsftpd/vuser


4 修改主配置文件

[root@linuxprobe ~]# vim /etc/vsftpd/vsftpd.conf

#省略若干...
########

anonymous_enalbe=NO
local_enabe=YES
guest_enable=YES
gusest_name=virtual
pam_service_name=vsftpd.vu
allow_writeable_chroot=YES

########
#省略若干...


5 为虚拟用户设置权限 创建目录&写配置文件

[root@linuxprobe ~]# mkdir /etc/vsftpd/vusers_dir/
[root@linuxprobe ~]# cd /etc/vsftpd/vusers_dir/
[root@linuxprobe vusers_dir]# touch lisi
[root@linuxprobe vusers_dir]# vim zhangsan
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

 

6.修改主配置文件 将权限目录添加到文件中

[root@linuxprobe ~]# vim /etc/vsftpd/vsftpd.conf
#省略......
user_config_dir=/etc/vsftpd/vusers_dir
#省略......

 

7.查看并关闭SELinux域对ftp的限制

[root@linuxprobe ~]# getsebool -a | grep ftp

[root@linuxprobe ~]# setsebool -P ftpd_full_access=on

 

8.重启服务,并加入启动项

[root@linuxprobe ~]# systemctl restart vsftpd
[root@linuxprobe ~]# systemctl enable vsftpd
 ln -s '/usr/lib/systemd/system/vsftpd.service' '/etc/systemd/system/multi-user.target.wants/vsftpd.service

 

客户端验证

此时,不但可以使用虚拟用户模式成功登录到FTP服务器,还可以分别使用账户zhangsan和lisi来检验他们的权限。当然,读者在生产环境中一定要根据真实需求来灵活配置参数,不要照搬这里的实验操作。

 

 

参考:https://www.linuxprobe.com/chapter-11.html

 

10-06 21:32