前言
在之前的博客中,简单地介绍了VSFTP,对于VSFTP服务不是很了解的可以转到===>传送门。
此篇主要写了VSFTP服务的各种搭建方式,根据安全性可做具体选择。
配置文件备份及说明
环境要求:一台服务器,测试客户机
服务器IP地址:192.1681.124
客户机:能通信即可
vsftpd服务程序的主配置文件位于/etc/vsftpd/目录下,共享目录默认为/var/ftp目录。
[root@linus ~]# ls /etc/vsftpd/
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh
[root@linus ~]# ll /var/ | grep ftp
drwxr-xr-x. 3 root root 17 4月 2 18:19 ftp
源文件注释项很多,都用于说明,没有实际功能。通常的做法是将源文件做备份,然后将去除注释行和空行的输出重定向主配置文件。
[root@linus ~]# cat /etc/vsftpd/vsftpd.conf.bak |grep -v ^# | grep -v ^$ >/etc/vsftpd/vsftpd.conf
[root@linus ~]# cat /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
参数说明
参数 | 作用 |
---|---|
listen=[YES|NO] | 是否以独立运行的方式监听服务 |
listen_address=IP地址 | 设置要监听的IP地址 |
listen_port=21 | 设置FTP服务的监听端口 |
download_enable=[YES|NO] | 是否允许下载文件 |
userlist_enable=[YES|NO] | 设置用户列表为“允许” |
userlist_deny=[YES|NO] | 设置用户列表为“拒绝” |
max_clients=0 | 最大客户端连接数,0为不限制 |
max_per_ip=0 | 同一IP地址的最大连接数,0为不限制 |
anonymous_enable=[YES|NO] | 是否允许匿名用户访问 |
anon_upload_enable=[YES|NO] | 是否允许匿名用户上传文件 |
anon_umask=022 | 匿名用户上传文件的umask值 |
anon_root=/var/ftp | 匿名用户的FTP根目录 |
anon_mkdir_write_enable=[YES|NO] | 是否允许匿名用户创建目录 |
anon_other_write_enable=[YES|NO] | 是否开放匿名用户的其他写入权限(包括重命名、删除等操作权限) |
anon_max_rate=0 | 匿名用户的最大传输速率(字节/秒),0为不限制 |
local_enable=[YES|NO] | 是否允许本地用户登录FTP |
local_umask=022 | 本地用户上传文件的umask值 |
local_root=/var/ftp | 本地用户的FTP根目录 |
chroot_local_user=[YES|NO] | 是否将用户权限禁锢在FTP目录,以确保安全 |
local_max_rate=0 | 本地用户最大传输速率(字节/秒),0为不限制 |
认证方式
也就是访问FTP服务的方式,共三种:
匿名访问模式:不安全认证方式,任何人都可以无需账户与密码登录FTP服务器,访问共享资源。
本地用户模式:看名字就可以猜到,是通过系统本地的用户账户登录FTP服务器,相对于匿名访问,具有一定的安全性。
虚拟用户模式:为FTP服务创建用户数据库文件,是在系统中不实际存在的用户,只用于FTP的口令验证。这样,即使被破解了账户信息也无法登录服务器,是三种中最安全的认证模式。
匿名访问模式
anon开头的配置项是匿名模式的配置项
与匿名访问的配置项:
anonymous_enable=[YES|NO]:是否允许匿名用户访问
anon_upload_enable=[YES|NO]:是否允许匿名用户上传文件|
anon_umask=022:匿名用户上传文件的umask值
anon_root=/var/ftp:匿名用户的FTP根目录
anon_mkdir_write_enable=[YES|NO]:是否允许匿名用户创建目录
anon_other_write_enable=[YES|NO]:是否开放匿名用户的其他写入权限(包括重命名、删除等操作权限)
anon_max_rate=0:匿名用户的最大传输速率(字节/秒),0为不限制
local_enable=[YES|NO]:是否允许本地用户登录FTP
把注释项去掉的主配置文件,则匿名访问的配置项只留下了一个
[root@linus ~]# cat /etc/vsftpd/vsftpd.conf | grep ^anon
anonymous_enable=YES
想增加什么功能,只需要添加到配置文件中即可。对于匿名模式,既然没有限制用户访问,那么对于权限的控制就比较重要了,以免文件被误删除。
以下为我常用的配置项
[root@linus ~]# cat /etc/vsftpd/vsftpd.conf | grep ^anon
anonymous_enable=YES
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
anon_root=/var/ftp
创建测试文件,并给予其权限
[root@linus ~]# touch /var/ftp/pub/test.txt
[root@linus ~]# chmod +777 /var/ftp/pub/test.txt
重启服务生效
[root@linus ~]# systemctl restart vsftpd
测试效果
本地用户模式
本地用户模式主要配置项
anonymous_enable=NO:禁止匿名访问模式
local_enable=YES:允许本地用户模式
write_enable=YES:设置可写权限
local_umask=022:本地用户模式创建文件的umask值
userlist_enable=YES:启用“禁止用户名单”,名单文件为ftpusers和user_list
userlist_deny=YES :开启用户作用名单文件功能
local_root=/var/ftp:本地用户的FTP根目录
chroot_local_user=YES:是否将用户权限禁锢在FTP目录,以确保安全
将配置文件进行更改
[root@linus ~]# cat /etc/vsftpd/vsftpd.conf | grep -E "^local|^anonymous|^userlist|^chroot"
anonymous_enable=NO
local_enable=YES
local_umask=022
userlist_deny=YES
userlist_enable=YES
local_root=/var/ftp
chroot_local_user=YES
创建本地用户,用于测试
[root@linus ~]# useradd test
[root@linus ~]# passwd test
更改用户 test 的密码 。
新的 密码:
无效的密码: 密码未通过字典检查 - 过于简单化/系统化
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
重新加载配置文件
[root@linus ~]# systemctl restart vsftpd
访问测试,先试一下匿名访问
直接点击登录后会发现,没有访问进去,不允许匿名访问,我们换成本地用户访问。
访问成功。
对于其中userlist_enable和userlist_deny这两个配置项,在说明之前,先来看看两个文件
[root@linus ~]# ls /etc/vsftpd/
ftpusers user_list vsftpd.conf vsftpd.conf.bak vsftpd_conf_migrate.sh
其中ftpusers和user_list文件,就是那两项配置的相关文件,查看user_list文件
[root@linus ~]# cat /etc/vsftpd/user_list | grep ^#
# vsftpd userlist
# If userlist_deny=NO, only allow users in this file #如果userlist_deny=NO,则只允许该文件中的用户
# If userlist_deny=YES (default), never allow users in this file, and #如果userlist_deny=YES(默认值),则永远不允许此文件中的用户
# do not even prompt for a password. #并且
甚至不要提示输入密码。
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers #注意,默认的vsftpd pam配置也会检查/etc/ vsftpdf /ftpusers
# for users that are denied. #用于被拒绝的用户。
然后查看ftpusers
[root@linus ~]# cat /etc/vsftpd/ftpusers | grep ^#
# Users that are not allowed to login via ftp #不允许通过ftp登录的sers
可以看到,root用户默认不允许登录ftp,在不修改配置的情况下,将其在文件中去除即可。
虚拟用户模式
虚拟用户模式主要配置文件
anonymous_enable=NO:禁止匿名开放模式
local_enable=YES:允许本地用户模式
guest_enable=YES:开启虚拟用户模式
guest_username=ftpuser:指定虚拟用户账户
pam_service_name=vsftpd.vu:指定PAM文件
allow_writeable_chroot=YES:允许对禁锢的FTP根目录执行写入操作,而且不拒绝用户的登录请求
user_config_dir=/etc/vsftpd/vsftpd_user_conf:虚拟用户配置文件的存放目录
创建虚拟用户文件
[root@linus ~]# vim /etc/vsftpd/login_user.list
u1
hahaha.com
u2
hehehe.com
单为账号,双为密码,接着通过db_load命令将/etc/vsftpd/login_user.list文件生成虚拟用户认证数据库文件/etc/vsftpd/login_user.db,并且降低数据库文件的权限。
[root@linus ~]# db_load -T -t hash -f /etc/vsftpd/login_user.list /etc/vsftpd/login_user.db
将保存虚拟用户认证数据库文件的权限更改为只对 root 用户可读写(600权限)
[root@linus ~]# chmod 600 /etc/vsftpd/login_user.*
[root@linus ~]# file /etc/vsftpd/login_user.db
/etc/vsftpd/login_user.db: Berkeley DB (Hash, version 9, native byte-order)
添加系统用户ftpuser,来对应所有虚拟用户。禁止ftpuser登录系统,宿主目录 /home/ftpuser(宿主目录用来充当ftp的根目录,增强安全性)
useradd -d /home/ftpuser -s /sbin/nologin ftpuser
调整 /home/ftpuser 权限为755,以允许浏览目录
chmod 755 /home/ftpuser
在/etc/pam.d/新建一个用于虚拟用户认证的PAM文件vsftpd.vu,其中PAM文件内的“db=”参数为使用db_load命令生成的账户密码数据库文件的路径
[root@linus ~]# vim /etc/pam.d/vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/login_user
account required pam_userdb.so db=/etc/vsftpd/login_user
创建/etc/vsftpd/vsftpd_user_conf/目录,用于存放虚拟用户的配置文件
[root@linus ~]# mkdir /etc/vsftpd/vsftpd_user_conf
创建虚拟用户配置文件,例如:/etc/vsftpd/vsftpd_user_conf/u1,虚拟账户同名,其中的配置以匿名参数作为配置
[root@linus ~]# vim /etc/vsftpd/vsftpd_user_conf/u1
anon_world_readable_only=NO #【浏览FTP目录和下载】
anon_upload_enable=YES #【允许用户上传】
anon_mkdir_write_enable=YES #【允许建立和删除目录】
anon_other_write_enable=YES #【允许改名、覆盖、删除文件】
对u2进行配置
[root@linus ~]# vim /etc/vsftpd/vsftpd_user_conf/u2
anon_world_readable_only=NO #【浏览FTP目录和下载】
anon_upload_enable=NO #【允许用户上传】
anon_mkdir_write_enable=NO #【允许建立和删除目录】
anon_other_write_enable=NO #【允许改名、覆盖、删除文件】
对主配置文件进行修改
[root@linus ~]# cat /etc/vsftpd/vsftpd.conf | grep -E "^g|^pam|^allow|^local_root"
pam_service_name=vsftpd
local_root=/home/ftpuser
guest_enable=YES
guest_username=ftpuser
pam_service_name=vsftpd.vu
allow_writeable_chroot=YES
创建测试文件,这里我们将源共享目录/var/ftp改为了/home/ftpuser,所以要在其目录创建测试文件
[root@linus ~]# touch /home/ftpuser/test.txt
[root@linus ~]# chmod +777 /home/ftpuser/test.txt
重启服务,然后进行测试操作
[root@linus ~]# systemctl restart vsftpd
使用虚拟用户进行访问
访问完成。