一、vsftpd介绍

       vsftpd是very secure ftp daemon的缩写,它是一个完全免费、开源代码的ftp服务器软件。它有着其他ftp服务器软件不具有的特性,如它满足较高的安全性需求、支持虚拟用户、支持ipv6、传输速率限制等。

二、 vsftpd安装

       实验环境准备:

主机列表 系统版本 ip地址 安装软件
ftp客户端 centos7.6 192.168.36.10 ftp或lftp
ftp服务器 centos6.10 192.168.36.20 vsftpd

1、实验开始前,关闭两台设备的selinux和防火墙设置,防止其影响结果。

客户端关闭防火墙和selinux  
[root@centos7 ~]# setenforce 0            
[root@centos7 ~]# systemctl stop firewalld

服务器端关闭防火墙和selinux
[root@centos6 ~]#setenforce 0
[root@centos6 ~]#service iptables stop
[root@centos6 ~]#iptables -F
[root@centos6 ~]#iptables -vnL          #确保iptables下没有任何规则。

2、ftp软件安装

客户端192.168.36.10安装:
[root@centos7 ~]#yum install ftp lftp -y         #ftp、lftp这两个都是ftp客户端工具  

服务器192.168.36.20安装:
[root@centos6 ~]#yum install vsftpd -y           
[root@centos6 ~]#service vsftpd restart

三、 vsftpd用户认证(三种登录方式)

匿名用户: ftp,anonymous,映射为Linux用户ftp。  

系统用户: Linux系统用户,登录后默认在家目录。

虚拟用户:特定服务的专用用户,可设定登录的家目录。

1) 匿名用户的配置

[root@centos6 ~]#vi /etc/vsftpd/vsftpd.conf
anonymous_enable=YES            #默认允许匿名用户登录FTP。

anon_upload_enable=YES          #启用匿名用户的上传权限。

anon_mkdir_write_enable=YES     #启用匿名用户创建目录的权限。

anon_other_write_enable=YES     #启用匿名用户删除权限。

anon_umask=022          #匿名用户新建文件时的umask值。

匿名账号启用以上权限后,从vsftpd的角度来说,就可以实现上传和下载功能了,但实际上还需要考虑文件系统的权限问题。

例1:

[root@centos7 ~]# ftp 192.168.36.20[root@centos7 ~]# ftp 192.168.36.20
Connected to 192.168.36.20 (192.168.36.20).
220 (vsFTPd 2.2.2)
Name (192.168.36.20:root): ftp          #匿名账号ftp
331 Please specify the password.
Password:           #此处直接回车,密码为空。
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd upload          #upload为新建的目录,权限为777
250 Directory successfully changed.
ftp> 
ftp> put f1         #实现上传功能。
local: f1 remote: f1
227 Entering Passive Mode (192,168,36,20,193,56).
150 Ok to send data.
226 Transfer complete.
19 bytes sent in 0.0362 secs (0.53 Kbytes/sec)

ftp> ls
227 Entering Passive Mode (192,168,36,20,151,172).
150 Here comes the directory listing.
-rw--w--w-    1 0        0               0 May 19 09:06 a1          #注意该文件的权限。
226 Directory send OK.
ftp> get a1         #下载a1文件失败,这是由于从ftp服务器下载文件,文件的属主、属组、其他此三者的权限都要具有读权限,才能下载。
local: a1 remote: a1
227 Entering Passive Mode (192,168,36,20,42,205).
550 Failed to open file.
ftp> get a1         #服务器端修改a1的权限为644,下载成功。
local: a1 remote: a1
227 Entering Passive Mode (192,168,36,20,52,167).
150 Opening BINARY mode data connection for a1 (0 bytes).
226 Transfer complete.
ftp> 

2) 本地用户的配置

anonymous_enable=no         #不允许匿名用户登入。

local_enable=YES/NO(YES)          #控制是否允许本地用户登入,默认值为YES。

local_root=/home/username           #当本地用户登入时,默认值为各用户的家目录。

write_enable=YES                    #是否允许登陆用户有写权限。

local_umask=022         #指定系统用户上传文件的默认权限。

chroot_local_user=YES           #禁锢系统用户在家目录里面。

关闭匿名账号的登录,使用系统账号登录,且禁锢系统账号登录后在家目录里面。

例2:

[root@centos7 ~]# ftp 192.168.36.20
Connected to 192.168.36.20 (192.168.36.20).
220 (vsFTPd 2.2.2)
Name (192.168.36.20:root): wang         #使用系统账号wang进行登录
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd 
257 "/"
ftp> cd /var/ftp            #系统账号被禁锢在自己的家目录里面,不能随意切换到其他目录。
550 Failed to change directory.         

3) 虚拟用户的配置

所有虚拟用户会统一映射为一个指定的系统帐号:访问共享位置,即为此系统帐号
的家目录。
pam_service_name=vsftpd         #虚拟用户使用PAM认证方式。
例3:

1. 生成文本格式的用户名和密码文件,文件内容奇数行是用户名称,双行是密码。
[root@centos6 /etc/vsftpd]#cat vuser 
alice
123asd

2. 生成用户数据库,修改文件权限。
[root@centos6 /etc/vsftpd]#db_load -T -t hash -f vuser vuser.db
[root@centos6 /etc/vsftpd]#file vuser.db
vuser.db: Berkeley DB (Hash, version 9, native byte-order) 
[root@centos6 /etc/vsftpd]#chmod 600 vuser.db 

3. 创建pam配置文件。
[root@centos6 /etc/pam.d]#vi vsftpd.db          #该文件需要创建
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser

4. 创建虚拟账号对应的系统用户。
[root@centos6 /]#useradd -d /var/ftproot -s /sbin/nologin vuser
[root@centos6 /]#chmod a=rx /var/ftproot/
[root@centos6 /]#ll -d /var/ftproot/
dr-xr-xr-x. 4 vuser vuser 4096 May 19 18:23 /var/ftproot/

5. 指定pam配置文件。
[root@centos6 /]#vim /etc/vsftpd/vsftpd.conf
guest_enable=YES
guest_username=vuser
pam_service_name=vsftpd.db

6.重启vsftpd服务,在客户端上进行验证。
[root@centos7 ~]# ftp 192.168.36.20
Connected to 192.168.36.20 (192.168.36.20).
220 (vsFTPd 2.2.2)
Name (192.168.36.20:root): alice            #使用虚拟用户进行验证  
331 Please specify the password.
Password:
230 Login successful.           #使用虚拟账号成功登录。
Remote system type is UNIX.
Using binary mode to transfer files.