vsftpd是一款运行在Linux操作系统上的FTP服务程序,不仅完全开源而且免费,此外,还具有很高的安全性、传输速度,以及支持虚拟用户验证等其他FTP服务程序不具备的特点。
vsftd作为更加安全的文件传输的服务程序,允许用户以三种认证模式登录到FTP服务器上。

  • 匿名开放模式: 是一种最不安全的认证模式,任何人都可以无需密码验证而直接登录到FTP服务器。
  • 本地用户模式
    是通过Linux系统的本地账户密码信息进行认证,相较于匿名开放模式更安全。但是如果被×××破解了账户的信息,就可以畅通无阻登录FTP服务器,从而完全控制整台服务器。
  • 虚拟用户模式
    是这三种模式中最安全的一种认证模式,它需要为FTP服务单独建立用户数据库文件,虚拟出用来进行口令验证的账户信息,而这些账户信息在服务器系统中实际上是不存在的,仅供FTP服务程序进行认证使用。

    实验环境

    FTP服务器配置完yum仓库后,安装vsftpd服务程序

    yum install vsftpd -y

匿名开放模式

vsftpd服务程序默认开启了匿名开放模式,需要开启匿名用户的上传、下载权限,以及让匿名用户创建、删除、更名文件的权限。真实环境不建议这样配置。FTP服务器匿名用户对应的系统用户是ftp。

vim /etc/vsftpd/vsftpd.conf

anonymous_enable=YES / /允许匿名访问
anon_upload_enable=YES //允许匿名用户上传文件
anon_mkdir_write_enable=YES //允许匿名用户创建目录
anon_other_write_enable=YES//允许匿名用户修改或删除目录
anon_umask=022 //设置匿名用户上传数据的权限掩码

service vsftpd start                  //启动vsftpd服务
service iptables stop               //关闭防火墙
setenforce 0                           //关闭安全性策略

在客户端执行ftp命令连接到ftp服务器,默认访问FTP根目录/var/ftp。基于安全性考虑,FTP根目录的权限不允许匿名用户或其他用户有写入权限(否则访问时会报500错误)

/var/ftp目录下默认创建了一个子文件夹pub,可以在匿名访问时供上传文件使用,那就要确保匿名用户ftp对该目录拥有写入权限。

[root@RedHat6-2 ~]# chown ftp /var/ftp/pub/
[root@RedHat6-2 ~]# ls -ld /var/ftp/pub
drwxr-xr-x. 2 ftp root 4096 2月  13 2013 /var/ftp/pub

客户端测试:

rpm -q ftp                                        //查看ftp是否安装
yum install ftp -y                           //如果没有安装,用yum形式安装
[root@RedHat6-1 ~]# ftp 192.168.10.50
Connected to 192.168.10.50 (192.168.10.50).
220 (vsFTPd 2.2.2)
Name (192.168.10.50:root): ftp                    //用户名为ftp
331 Please specify the password.
Password:                                                //直接回车即可
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls                                                       //查看FTP服务器的内容
227 Entering Passive Mode (192,168,10,50,114,54).
150 Here comes the directory listing.
-rw-r--r--    1 0        0               7 Mar 26 02:42 ftp.txt
drwxr-xr-x    2 14       0            4096 Feb 12  2013 pub
226 Directory send OK.
ftp> get ftp.txt                                       //下载服务器的内容到本地
local: ftp.txt remote: ftp.txt
227 Entering Passive Mode (192,168,10,50,225,227).
150 Opening BINARY mode data connection for ftp.txt (7 bytes).
226 Transfer complete.
7 bytes received in 6.3e-05 secs (111.11 Kbytes/sec)
ftp> cd pub                                         //将ftp根目录切换到pub目录下
250 Directory successfully changed.
ftp> put 123.txt                                   //上传文件到服务器pub目录下
local: 123.txt remote: 123.txt
227 Entering Passive Mode (192,168,10,50,230,232).
150 Ok to send data.
226 Transfer complete.
7 bytes sent in 0.000126 secs (55.56 Kbytes/sec)
ftp> ls                                           //查看服务器pub目录下内容
227 Entering Passive Mode (192,168,10,50,58,233).
150 Here comes the directory listing.
-rw-------    1 14       50              7 Mar 26 02:44 123.txt
226 Directory send OK.
ftp> mkdir data                                  //在服务器pub目录下创建data目录
257 "/pub/data" created
ftp> quit                                   //断开ftp连接并退出
221 Goodbye.

本地用户模式

之前用的是匿名开放模式,现在关了,然后开启本地用户模式。创建一个本地用户zhangsan进行测试。

vim /etc/vsftpd/vsftpd.conf

anonymous_enable=NO //禁止匿名访问
local_enable=YES //允许本地用户模式
write_enable=YES //设置可写权限
local_umask=022 //设置本地用户模式创建文件的umask值

service vsftpd restart

在客户端执行ftp命令连接到ftp服务器,默认访问的是该用户的家目录,而且该目录的默认所有者、所属组都是该用户自己。

客户端测试:

[root@RedHat6-1 ~]# ftp 192.168.10.50
Connected to 192.168.10.50 (192.168.10.50).
220 (vsFTPd 2.2.2)
Name (192.168.10.50:root): zhangsan                         //zhangsan用户登入
331 Please specify the password.
Password:                                                                    //输入用户的密码
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir files                                         //创建文件夹,存放在/home/zhangsan目录下
257 "/files" created
ftp> ls
227 Entering Passive Mode (192,168,10,50,117,63).
150 Here comes the directory listing.
drwxr-xr-x    2 500      500          4096 Mar 26 03:03 files
226 Directory send OK.
ftp> rename files database                                //更改文件夹名字
350 Ready for RNTO.
250 Rename successful.
ftp> ls
227 Entering Passive Mode (192,168,10,50,147,228).
150 Here comes the directory listing.
drwxr-xr-x    2 500      500          4096 Mar 26 03:03 database
226 Directory send OK.
ftp> rmdir database                                      //删掉文件夹
250 Remove directory operation successful.
ftp> ls
227 Entering Passive Mode (192,168,10,50,123,117).
150 Here comes the directory listing.
226 Directory send OK.
ftp> quit                                                       //断开ftp并退出
221 Goodbye.

需要注意的是7版本需要在配置文件添加“allow_writeable_chroot=YES”参数才允许本地用户登录。 //允许对禁锢的FTP根目录执行写入操作,而且不拒绝用户的登录请求

1.禁锢宿主目录

若还希望将所有的宿主目录禁锢在其宿主目录中,可以添加