1.实验环境
需要两台主机,一台作为服务器主机,其ip地址为192.168.157.100,一台作为客户端主机,其ip地址为192.168.157.200
服务器
(1)安装vsftpd软件
dnf install vsftpd -y
结果如下图所示:
(2)关闭selinux
vim /etc/selinux/config
结果如下:
将上图红色框中修改为disabled即可
(3)关闭防火墙
systemctl enable --now vsftpd
firewall-cmd --permanent --add-service=ftp
firewall-cmd --reload
结果如下图所示:
(4)设置ip地址
nm-connection-editor
ifconfig
设置好的结果如下图所示:
客户端
(1)安装lftpd软件
dnf install lftp -y
结果如下:
(2)关闭selinux
操作步骤如服务器主机相同,此处略去
(3)设置ip地址
nm-connection-editor
ifconfig
设置好的结果如下图所示:
测试:
在客户端主机执行以下命令
lftp 192.168.157.100 -u root
ls
结果如下:
上图表明实验环境搭建成功
2.vsftpd基本信息
(1)服务名称: vsftpd.service
(2)配置目录: /etc/vsftpd
(3)主配置文件: /etc/vsftpd/vsftpd.conf
(4)默认发布目录: /var/ftp
(5)报错信息:
550 程序本身拒绝
553 文件系统权限限制
500 权限过大
530 认证失败
3.匿名用户访问控制
lftp 192.168.157.100 //当访问ftp服务时没有加入用户认证为匿名访问
lftp 192.168.157.100 -u westos //本地用户访问
(1)登录控制
先在服务器主机使用匿名用户登录
lftp 192.168.157.100
结果如下图所示:
发现匿名用户登录受限,在服务器主机执行以下命令
vim /etc/vsftpd/vsftpd.conf
编辑内容如下图所示:
systemctl restart vsftpd.service //重启vsftpd服务
然后在用户端主机重新使用匿名用户登录,结果如下:
(2)家目录控制
在服务器主机执行以下命令:
vim /etc/vsftpd/vsftpd.conf
编辑内容如下图所示:
systemctl restart vsftpd.service //重启vsftpd服务
然后在用户端主机重新使用匿名用户登录,结果如下:
(3)上传控制
在服务器主机执行以下命令:
vim /etc/vsftpd/vsftpd.conf
编辑内容如下图所示:
systemctl restart vsftpd.service //重启vsftpd服务
chmod 775 /var/ftp/pub
chgrp ftp /var/ftp/pub
结果如下:
然后在用户端主机执行以下命令
touch /mnt/file
使用匿名用户登录
执行以下命令
cd pub
put /mnt/file
结果如下:
(4)目录建立控制
在服务器主机执行以下命令:
vim /etc/vsftpd/vsftpd.conf
编辑内容如下图所示:
systemctl restart vsftpd.service //重启vsftpd服务
然后在用户端主机重新使用匿名用户登录,结果如下:
(5)下载控制
在服务器主机执行以下命令:
vim /etc/vsftpd/vsftpd.conf
编辑内容如下图所示:
systemctl restart vsftpd.service //重启vsftpd服务
touch /var/ftp/file
然后在用户端主机重新使用匿名用户登录,结果如下:
4.本地用户访问控制
首先建立一个新用户hs,如下图所示:
(1)登录控制
在服务器主机执行以下命令:
vim /etc/vsftpd/vsftpd.conf
编辑内容如下图所示:
systemctl restart vsftpd.service //重启vsftpd服务
然后在用户端主机重新使用本地用户登录,结果如下:
(2)家目录控制
在服务器主机执行以下命令:
vim /etc/vsftpd/vsftpd.conf
编辑内容如下图所示:
systemctl restart vsftpd.service //重启vsftpd服务
然后在用户端主机重新使用本地用户登录,结果如下:
(3)写权限控制
在服务器主机执行以下命令:
vim /etc/vsftpd/vsftpd.conf
编辑内容如下图所示:
systemctl restart vsftpd.service //重启vsftpd服务
然后在用户端主机重新使用本地用户登录,结果如下:
(4)用户登录黑白名单
黑名单:
/etc/vsftpd/ftpusers //永久黑
/etc/vsftpd/user_list //默认黑
vim /etc/vsftpd/user_list
编辑内容如下图所示:
然后在用户端主机重新使用本地用户westos登录,结果如下:
白名单:
userlist_deny=NO //设定/etc/vsftpd/user_list为白名单
不在名单中的用户不能登陆ftp
结果如下:
然后在用户端主机分别使用本地用户westos和hs登录,结果如下:
发现westos用户正常登录,hs用户被拒绝
(5)锁定用户到自己的家目录及黑白名单
家目录:
在服务器主机执行以下命令
chmod u-w /home/*
vim /etc/vsftpd/vsftpd.conf
编辑内容如下图所示:
systemctl restart vsftpd.service //重启vsftpd服务
然后在用户端主机重新使用本地用户westos登录,结果如下:
白名单:
vim /etc/vsftpd/vsftpd.conf
编辑内容如下图所示:
systemctl restart vsftpd.service //重启vsftpd服务
vim /etc/vsftpd/chroot_list
编辑内容如下图所示:
然后在用户端主机重新使用本地用户westos登录,结果如下:
发现westos用户可以访问除了其家目录外的其他目录
黑名单:
vim /etc/vsftpd/vsftpd.conf
编辑内容如下图所示:
systemctl restart vsftpd.service //重启vsftpd服务
然后在用户端主机重新使用本地用户westos登录,结果如下:
发现westos用户无法访问除了其家目录外的其他目录
5.虚拟用户访问
vim /etc/vsftpd/ftpauth //建立认证文件模板
编辑内容如下图所示:
表示虚拟用户1的用户名为user1,密码为123,虚拟用户2的用户名为user2,密码为123
db_load -T -t hash -f ftpauth ftpauth.db //加密认证文件 -T 转换 -t type -f 指定
执行以上命令,结果如下:
vim /etc/pam.d/westos
编辑内容如下图所示:
vim /etc/vsftpd/vsftpd.conf
编辑内容如下图所示:
其中,第一行是指定认证策略文件,第二行是指定虚拟用户功能开启,第三行是指定虚拟用户在ftp服务器上的用户身份
systemctl restart vsftpd.service //重启vsftpd服务
然后在用户端主机使用虚拟用户登录,结果如下:
由上图可以看出,虚拟用户可以成功登录并访问其家目录、