2021-10-04 linux学习-部署(六)之使用Vsftpd服务程序

一 Vsftpd服务程序

人们为了满足以密文方式传输文件的需求,发明了vsftpd服务程序。vsftpd(very secure ftp daemon,非常安全的FTP守护进程)是一款运行在Linux操作系统上的FTP服务程序,不仅完全开源而且免费。

vsftpd服务程序登陆后所在目录

登录方式	    默认目录
匿名公开	    /var/ftp
本地用户	    该用户的家目录
虚拟用户	    对应映射用户的家目录

vsftpd作为更加安全的文件传输协议服务程序,允许用户以3种认证模式登录FTP服务器。

匿名开放模式:是最不安全的一种认证模式,任何人都可以无须密码验证而直接登录到FTP服务器。

本地用户模式:是通过Linux系统本地的账户密码信息进行认证的模式,相较于匿名开放模式更安全,而且配置起来也很简单。但是如果黑客破解了账户的信息,就可以畅通无阻地登录FTP服务器,从而完全控制整台服务器。

虚拟用户模式:更安全的一种认证模式,它需要为FTP服务单独建立用户数据库文件,虚拟出用来进行密码验证的账户信息,而这些账户信息在服务器系统中实际上是不存在的,仅供FTP服务程序进行认证使用。这样,即使黑客破解了账户信息也无法登录服务器,从而有效降低了破坏范围和影响。

vsftpd服务程序常用的参数以及作用

参数	                                作用
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为不限制

1 在服务端安装Vsftpd服务

dnf install -y vsftpd

2 把FTP协议添加到firewalld服务的允许列表中

firewall-cmd --permanent --zone=public --add-service=ftp
firewall-cmd --reload

3 在客户端安装FTP服务

dnf install -y ftp

二 实验:匿名开放模式

匿名用户开放的权限参数以及作用

参数	                    作用
anonymous_enable=YES	    允许匿名访问模式
anon_umask=022    	        匿名用户上传文件的umask值
anon_upload_enable=YES	    允许匿名用户上传文件
anon_mkdir_write_enable=YES	允许匿名用户创建目录
anon_other_write_enable=YES	允许匿名用户修改目录名称或删除目录

1 修改配置文件

vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

2 重启服务

systemctl restart vsftpd
systemctl enable vsftpd

3 设置SElinux域

getsebool -a | grep ftp

setsebool -P ftpd_full_access=on

4 测试新建、重命名、删除目录

ftp 192.168.0.10

Connected to 192.168.10.10 (192.168.0.10).
220 (vsFTPd 3.0.3)
Name (192.168.0.10:root): anonymous
331 Please specify the password.
Password:此处敲击回车即可
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd pub
250 Directory successfully changed.
ftp> mkdir files
257 "/pub/files" created
ftp> rename files database
350 Ready for RNTO.
250 Rename successful.
ftp> rmdir database
250 Remove directory operation successful.
ftp> exit
221 Goodbye.

四 实验:本地用户模式

本地用户模式使用的权限参数以及作用

参数	            作用
anonymous_enable=NO	禁止匿名访问模式
local_enable=YES	允许本地用户模式
write_enable=YES	设置可写权限
local_umask=022	    本地用户模式创建文件的umask值
userlist_deny=YES	启用“禁止用户名单”,名单文件为ftpusers和user_list
userlist_enable=YES	开启用户作用名单文件功能

1 修改配置文件

vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022

2 重启服务

systemctl restart vsftpd
systemctl enable vsftpd

3 修改用户名单

vim /etc/vsftpd/user_list
vim /etc/vsftpd/ftpusers

删除其中的root

PS:如果把上面主配置文件中userlist_deny的参数值改成NO,那么user_list列表就变成了强制白名单

4 设置SElinux域

getsebool -a | grep ftp

setsebool -P ftpd_full_access=on

5 测试新建、重命名、删除目录

ftp 192.168.0.10

Connected to 192.168.10.10 (192.168.0.10).
220 (vsFTPd 3.0.3)
Name (192.168.0.10:root): root
331 Please specify the password.
Password:此处输入该用户的密码
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir files
257 "/root/files" created
ftp> rename files database
350 Ready for RNTO.
250 Rename successful.
ftp> rmdir database
250 Remove directory operation successful.
ftp> exit
221 Goodbye.

五 实验:虚拟用户模式

利用PAM文件进行认证时使用的参数以及作用

参数	                        作用
anonymous_enable=NO        	禁止匿名开放模式
local_enable=YES	        允许本地用户模式
guest_enable=YES	        开启虚拟用户模式
guest_username=virtual	    指定虚拟用户账户
pam_service_name=vsftpd.vu	指定PAM文件
allow_writeable_chroot=YES	允许对禁锢的FTP根目录执行写入操作,而且不拒绝用户的登录请求

1 创建用于进行FTP认证的用户数据库文件,其中奇数行为账户名,偶数行为密码。例如,分别创建zhangsan和lisi两个用户,密码均为redhat

cd /etc/vsftpd/
vim vuser.list

zhangsan
redhat
lisi
redhat

使用db_load命令用哈希(hash)算法将原始的明文信息文件转换成数据库文件,并且降低数据库文件的权限(避免其他人看到数据库文件的内容),然后再把原始的明文信息文件删除

db_load -T -t hash -f vuser.list vuser.db
chmod 600 vuser.db
rm -f vuser.list

2 创建vsftpd服务程序用于存储文件的根目录以及用于虚拟用户映射的系统本地用户

useradd -d /var/ftproot -s /sbin/nologin virtual
chmod -Rf 755 /var/ftproot/

3 建立用于支持虚拟用户的PAM(可插拔认证模块)文件

vim /etc/pam.d/vsftpd.vu

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

vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
guest_enable=YES
guest_username=virtual
allow_writeable_chroot=YES

14 pam_service_name=vsftpd.vu

5 为虚拟用户设置不同的权限

mkdir /etc/vsftpd/vusers_dir/
cd /etc/vsftpd/vusers_dir/
touch lisi

vim zhangsan

anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

再次修改vsftpd主配置文件,通过添加user_config_dir参数来定义这两个虚拟用户不同权限的配置文件所存放的路径

vim /etc/vsftpd/vsftpd.conf

16 user_config_dir=/etc/vsftpd/vusers_dir

重启vsftpd服务

systemctl restart vsftpd
systemctl enable vsftpd

6 设置SElinux域

getsebool -a | grep ftp

setsebool -P ftpd_full_access=on

7 分别使用zhangsan和lisi登录FTP测试

ftp 192.168.0.10

Connected to 192.168.0.10 (192.168.0.10).
220 (vsFTPd 3.0.3)
Name (192.168.10.0:root): lisi
331 Please specify the password.
Password:此处输入虚拟用户的密码
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir files
550 Permission denied.
ftp> exit
221 Goodbye.
ftp 192.168.0.10

Connected to 192.168.0.10 (192.168.0.10).
220 (vsFTPd 3.0.3)
Name (192.168.0.10:root): zhangsan
331 Please specify the password.
Password:此处输入虚拟用户的密码
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir files
257 "/files" created
ftp> rename files database
350 Ready for RNTO.
250 Rename successful.
ftp> rmdir database
250 Remove directory operation successful.


版权声明:本文为x629242原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。