共计 4456 个字符,预计需要花费 12 分钟才能阅读完成。
vsftpd 是一款运行在 Linux 操作系统上的 FTP 服务程序,不仅完全开源而且免费,此外,还具有很高的安全性、传输速度,以及支持虚拟用户验证等其他 FTP 服务程序不具备的特点。
vsftd 作为更加安全的文件传输的服务程序,允许用户以三种认证模式登录到 FTP 服务器上。
- 匿名开放模式:是一种最不安全的认证模式,任何人都可以无需密码验证而直接登录到 FTP 服务器。
- 本地用户模式 :
是通过 Linux 系统的本地账户密码信息进行认证,相较于匿名开放模式更安全。但是如果被×××破解了账户的信息,就可以畅通无阻登录 FTP 服务器,从而完全控制整台服务器。 - 虚拟用户模式 :
是这三种模式中最安全的一种认证模式,它需要为 FTP 服务单独建立用户数据库文件,虚拟出用来进行口令验证的账户信息,而这些账户信息在服务器系统中实际上是不存在的,仅供 FTP 服务程序进行认证使用。
实验环境
FTP 服务器配置完 yum 仓库后,安装 vsftpd 服务程序
匿名开放模式
vsftpd 服务程序默认开启了匿名开放模式,需要开启匿名用户的上传、下载权限,以及让匿名用户创建、删除、更名文件的权限。真实环境不建议这样配置。FTP 服务器匿名用户对应的系统用户是 ftp。
anonymous_enable=YES / / 允许匿名访问
anon_upload_enable=YES // 允许匿名用户上传文件
anon_mkdir_write_enable=YES // 允许匿名用户创建目录
anon_other_write_enable=YES// 允许匿名用户修改或删除目录
anon_umask=022 // 设置匿名用户上传数据的权限掩码
service iptables stop | |
setenforce |
在客户端执行 ftp 命令连接到 ftp 服务器,默认访问 FTP 根目录 /var/ftp。基于安全性考虑,FTP 根目录的权限不允许匿名用户或其他用户有写入权限(否则访问时会报 500 错误)
/var/ftp 目录下默认创建了一个子文件夹 pub,可以在匿名访问时供上传文件使用,那就要确保匿名用户 ftp 对该目录拥有写入权限。
[root | |
drwxr-xr-x. |
客户端测试:
yum install ftp -y |
Connected to ). | |
) | |
Name ( | |
Please specify the password. | |
Password: | |
Login successful. | |
Remote system type UNIX. | |
Using binary mode to transfer files. | |
ls | |
). | |
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. | |
local: ftp.txt remote: ftp.txt | |
227 Entering Passive ). | |
150 Opening BINARY mode data connection ). | |
226 Transfer complete. | |
7 bytes received ) | |
cd pub | |
250 Directory successfully changed. | |
put 123.txt | |
local: 123.txt remote: 123.txt | |
227 Entering Passive ). | |
150 Ok to send data. | |
226 Transfer complete. | |
7 bytes sent ) | |
ls | |
227 Entering Passive ). | |
150 Here comes the directory listing. | |
-rw------- 1 14 50 7 Mar 26 02:44 123.txt | |
226 Directory send OK. | |
mkdir data | |
257 "/pub/data" created | |
quit | |
221 Goodbye. |
本地用户模式
之前用的是匿名开放模式,现在关了,然后开启本地用户模式。创建一个本地用户 zhangsan 进行测试。
anonymous_enable=NO // 禁止匿名访问
local_enable=YES // 允许本地用户模式
write_enable=YES // 设置可写权限
local_umask=022 // 设置本地用户模式创建文件的 umask 值
在客户端执行 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. | |
257 "/files" created | |
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. | |
350 Ready for RNTO. | |
250 Rename successful. | |
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. | |
250 Remove directory operation successful. | |
227 Entering Passive Mode (192,168,10,50,123,117). | |
150 Here comes the directory listing. | |
226 Directory send OK. | |
221 Goodbye. |
需要注意的是 7 版本需要在配置文件添加“allow_writeable_chroot=YES”参数才允许本地用户登录。// 允许对禁锢的 FTP 根目录执行写入操作,而且不拒绝用户的登录请求
1. 禁锢宿主目录
若还希望将所有的宿主目录禁锢在其宿主目录中,可以添加 chroot_local_user 配置项,否则用户将能够任意切换到服务器的 /var/、/etc/、/boot/ 等宿主目录以外的文件夹,这样一来便存在安全隐患。
chroot_local_user=YES // 禁锢宿主目录
客户端测试:
550 Failed to change directory. | |
550 Failed to change directory. | |
221 Goodbye. |
2. 黑白名单
然而当使用 root 管理员登录后,系统提示如下错误信息:
Connected to ). | |
) | |
Name (以 root 用户登录 | |
Permission denied. | |
Login failed. |
这是因为 vsftpd 服务程序所在的目录中默认存放着一个名为“用户名单”的文件 user_list, 默认 userlist_deny=YES, 所以这个名单上出现的名字将不允许登陆到 ftp 服务器,也就是黑名单。
[ | ]|
[ | ]|
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh | |
[ | ]|
root | |
bin | |
daemon | |
adm | |
lp | |
sync // 这些用户默认不允许登录 ftp 服务器 | |
shutdown | |
halt | |
news | |
uucp | |
operator | |
games | |
nobody |
虚拟用户模式
第 1 步:
创建用于进行 FTP 认证的用户数据库文件,其中奇数行为账户名,偶数行为密码。
[root | |
rose | |
abc123 | |
jack | |
abc123 |
[root | |
vuser.db: Berkeley DB (Hash, version , native byte-order) | |
[root | |
[root |
第 2 步:
创建 vsftpd 服务程序用于存储文件的根目录以及虚拟用户映射的系统本地用户。FTP 服务用语存储文件的根目录指的是,当虚拟用户登录后访问的默认位置。
第 3 步:
建立用于支持虚拟用户的 PAM 文件 vfstpd.vu, 其中“db=”参数是使用 db_load 命令生成的账户密码数据库文件的路径。
auth required pam_userdb.so db=/etc/vsftpd/vuser | |
account required pam_userdb.so db=/etc/vsftpd/vuser |
第 4 步:
在 vsftpd 服务程序的主配置文件中通过 pam_service_name 参数将 pam 认证文件的名称修改为 vsftpd.vu, 再添加 guest_enable、guest_username 参数。
anonymous_enable=NO // 禁止匿名访问
guest_enable=YES // 开启虚拟用户模式
guest_username=virtual // 指定虚拟用户账户
pam_service_name=vsftpd.vu // 指定 PAM 文件
第 5 步:
为虚拟用户设置不同的权限。先创建虚拟用户不同权限的配置文件的存放路径,在这个路径下再分别创建 rose 和 jack 命名的文件。
第 6 步:
再次修改 vsftpd 主配置文件,通过添加 user_config_dir 参数定义这两个虚拟用户不同权限的配置文件所存放的路径,重启 vsftpd 服务。
user_config_dir=/etc/vsftpd/vu_dir // 单独用户配置文件
客户端测试:
Connected to ). | |
) | |
Name ( | |
Please specify the password. | |
Password: | |
Login successful. | |
Remote system type UNIX. | |
Using binary mode to transfer files. | |
ftp> put anaconda-ks.cfg | |
local: anaconda-ks.cfg remote: anaconda-ks.cfg | |
). | |
150 Ok to send data. | |
226 Transfer complete. | |
1498 bytes sent ) | |
ftp> quit | |
221 Goodbye. |
[root@RedHat6 | |
总用量 | |
-rw-r--r--. |
如何在 Ubuntu 18.04 LTS 上安装带有 TLS 的 VsFTPD 服务器 https://www.linuxidc.com/Linux/2018-10/154930.htm
:
