编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

基于CentOS7系统配置vsftpd服务(1)—虚拟用户模式

wxchong 2024-06-28 10:40:36 开源技术 13 ℃ 0 评论

概述

vsftpd英文全称:very secure ftp daemon,中文释义:非常安全的FTP守护进程,它是一款完全开源且免费、运行在Linux操作系统上的FTP服务程序。

vsftpd支持3种认证模式登录FTP服务器,它们分别是匿名开放模式、本地用户模式和虚拟用户模式。其中,匿名开放模式是最不安全的一种认证模式,任何人都可以无须密码验证而直接登录到FTP服务器,默认的用户名是:anonmous。本地用户模式是通过Linux系统本地的账户密码信息进行认证的模式,对比匿名开放模式更安全。但是如果黑客破解了账户的信息,就可以畅通无阻地登录FTP服务器,从而完全控制该服务器。虚拟用户模式是更安全地一种认证模式,它需要为FTP服务单独建立用户数据库文件,虚拟出用来进行密码验证的账户信息,而这些账户信息在服务器系统中实际上是不存在的,仅供FTP服务器认证使用。这样,即便黑客破解了账户信息也无法登录服务器,从而有效降低了破坏范围和影响。

本期文章结合具体的实践操作,总结分享基于CentOS7系统配置vsftpd服务的虚拟用户模式。

实践目标

  1. 基于CentOS7安装vsftpd服务软件;
  2. 创建虚拟用户admin,该用户具备上传、下载、创建目录、删除和移动文件的权限,该用户所属目录/var/ftpdate;
  3. 创建虚拟用户upadmin,该用户仅具有创建目录和上传文件的权限,该用户所属目录/var/ftpdate/upadmin;
  4. 创建虚拟用户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,该用户仅下载文件的操作成功,上传文件、删除文件、重命名文件和删除目录文件操作均失败,如下图所示;

总之,通过上述的测试,实现本次实践的目标。

总结

以上分享,希望各位小伙伴有所收获,欢迎各位点赞收藏和指正。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表