概述
vsftpd英文全称:very secure ftp daemon,中文释义:非常安全的FTP守护进程,它是一款完全开源且免费、运行在Linux操作系统上的FTP服务程序。
vsftpd支持3种认证模式登录FTP服务器,它们分别是匿名开放模式、本地用户模式和虚拟用户模式。其中,匿名开放模式是最不安全的一种认证模式,任何人都可以无须密码验证而直接登录到FTP服务器,默认的用户名是:anonmous。本地用户模式是通过Linux系统本地的账户密码信息进行认证的模式,对比匿名开放模式更安全。但是如果黑客破解了账户的信息,就可以畅通无阻地登录FTP服务器,从而完全控制该服务器。虚拟用户模式是更安全地一种认证模式,它需要为FTP服务单独建立用户数据库文件,虚拟出用来进行密码验证的账户信息,而这些账户信息在服务器系统中实际上是不存在的,仅供FTP服务器认证使用。这样,即便黑客破解了账户信息也无法登录服务器,从而有效降低了破坏范围和影响。
本期文章结合具体的实践操作,总结分享基于CentOS7系统配置vsftpd服务的虚拟用户模式。
实践目标
- 基于CentOS7安装vsftpd服务软件;
- 创建虚拟用户admin,该用户具备上传、下载、创建目录、删除和移动文件的权限,该用户所属目录/var/ftpdate;
- 创建虚拟用户upadmin,该用户仅具有创建目录和上传文件的权限,该用户所属目录/var/ftpdate/upadmin;
- 创建虚拟用户downadmin,该用户仅具有下载文件的权限,该用户所属目录/var/ftpdate。
实践配置
vsftpd服务软件安装
[root@localhost ~]# yum install vsftpd
vsftpd服务配置
第1步:首先,创建用于进行ftp认证的用户数据库文件vu.txt,其中奇数行是用户名,偶数行是登录密码。其次,利用db_load命令用哈希算法将原始明文信息文件转换成vsftpd服务程序可加载的数据库文件vu.db。最后,为了避免其它用户访问该数据库文件的内容,修改降低数据库文件的权限,把原始的明文文件删除。
#创建vu.txt明文文件
cat >>/etc/vsftpd/vu.txt<<EOF
admin
admin123
upadmin
up123
downadmin
down123
EOF
#把vu.txt明文文件转换成vu.db数据库文件
db_load -T -t hash -f vu.txt vu.db
#修改降低vu.db数据库文件的权限并删除原始明文文件
chmod 600 vu.db
rm -f vu.txt
第2步:创建vsftpd服务程序用于存储文件的根目录/var/ftpdate以及用于虚拟用户映射的系统本地用户ftpadmin。此外,为了安全起见,将ftpadmin系统本地用户设置为不允许登录该服务器。
创建虚拟用户upadmin目录/var/ftpdate/upadmin并更换其所属组和所属用户。
#创建系统本地用户ftpadmin及所属目录并禁用该用户登录服务器
useradd -d /var/ftpdate -s /sbin/nologin ftpadmin
#创建虚拟用户upadmin的目录
mkdir /var/ftpdate/upadmin
#修改虚拟用户upadmin的所属组和所属用户
chown -R ftpadmin:ftpadmin /var/ftpdate/upadmin
#修改/var/ftpdate/的权限
chmod -Rf 755 /var/ftpdate/
第3步:创建用于支持虚拟用户的PAM文件
Tips:不用写数据库文件vu.db的后缀
cat >>/etc/pam.d/vs.vu<<EOF
auth required pam_userdb.so db=/etc/vsftpd/vu
account required pam_userdb.so db=/etc/vsftpd/vu
EOF
第4步:创建目录/etc/vsftpd/vu_perm用于存放为不同虚拟用户设置不同的权限的文件。例如,admin,upadmin和downadmin。
Tips:虚拟用户权限的文件名与虚拟用户名称保持一致。
#创建目录/etc/vsftpd/vu_perm
mkdir /etc/vsftpd/vu_perm
#创建虚拟用户admin的权限文件admin,使其具备上传、下载、创建目录、删除和移动文件的权限
cat >>/etc/vsftpd/vu_perm/admin<<EOF
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/var/ftpdate
EOF
#创建虚拟用户upadmin的权限文件upadmin,使其仅具备上传文件、创建目录的权限
cat >>/etc/vsftpd/vu_perm/upadmin<<EOF
anon_upload_enable=YES
anon_mkdir_write_enable=YES
local_root=/var/ftpdate/upadmin
EOF
#创建虚拟用户downadmin的权限文件downadmin,使其仅具备下载文件的权限
cat >>/etc/vsftpd/vu_perm/downadmin<<EOF
anon_world_readable_only=NO
local_root=/var/ftpdate
EOF
#为了安全起见,递归修改/etc/vsftpd/vu_perm的权限
chmod -R 600 /etc/vsftpd/vu_perm/
第5步:配置vsftpd服务程序的主配置文件
#备份sftpd服务程序的主配置文件
cp /etc/vsftpd/vsftpd.conf{,backup}
#把默认未注释的配置文件重定写入vsftpd.conf配置文件中
grep -v "#" /etc/vsftpd/vsftpd.confbackup >/etc/vsftpd/vsftpd.conf
#查看默认未注释的配置文件
cat /etc/vsftpd/vsftpd.conf
[root@localhost ~]# 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
[root@localhost ~]#
#修改配置文件
vi /etc/vsftpd/vsftpd.conf
#查看修改、添加的内容已标注,如下所示;
[root@localhost ~]# cat /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
guest_enable=YES
guest_username=ftpadmin
allow_writeable_chroot=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vs.vu
userlist_enable=YES
user_config_dir=/etc/vsftpd/vu_perm
[root@localhost ~]#
第6步:安全配置,涉及到Firewall和SeLinux的配置
#放通ftp服务,允许客户端连接服务器ftp服务(TCP 21)并使配置生效
firewall-cmd --permanent --zone=public --add-service=ftp
firewall-cmd --reload
#获取关于ftp相关的SeLinux布尔值设置,修改标注的内容
[root@localhost log]# getsebool -a | grep ftp
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
tftp_home_dir --> off
[root@localhost log]#
#修改SeLinux关于ftp服务的布尔值
Tips:-p表示永久生效,不受服务器重启的影响。
setsebool -P ftpd_connect_all_unreserved=on
setsebool -P ftpd_full_access=on
第7步:重启vsftpd服务并设置跟随系统自启动
systemctl restart vsftpd
systemctl enable vsftpd
测试验证实践目标
客户端PC使用用户admin登录ftp,该用户上传文件、重命名文件、下载文件、创建文件目录、删除文件和删除目录文件操作均成功,如下图所示;
客户端PC连接FTP服务器过程中抓取的报文,如下图所示;
客户端首先向服务器的TCP 21端口发起TCP连接请求;
完成三次TCP握手后,客户端继而向服务器的TCP 21端口发起用户登录验证,登录用户名和密码是明文传输的。
关于FTP数据信息的传输,采用FTP的主动模式,服务器的服务端口使用了TCP 20,如下图所示;
客户端PC使用用户upadmin登录ftp,该用户仅上传文件和创建文件目录的操作成功,删除文件、重命名文件、下载文件和删除目录文件操作均失败,如下图所示;
客户端PC使用用户downadmin登录ftp,该用户仅下载文件的操作成功,上传文件、删除文件、重命名文件和删除目录文件操作均失败,如下图所示;
总之,通过上述的测试,实现本次实践的目标。
总结
以上分享,希望各位小伙伴有所收获,欢迎各位点赞收藏和指正。
本文暂时没有评论,来添加一个吧(●'◡'●)