0. 实验环境
- 关闭selinux
1. vim /etc/selinux/config
SELINUX=disabled#重启后生效
2. setenforce 0
:关闭
3. getenforce
:查看
- 配置软件仓库并安装lftp
dnf install lftp -y
lftp:ftp的协议文本浏览器(在测试的主机安装)
- 若在其他主机登陆本机需执行:
1. firewall-cmd --permanent --add-service=ftp
2. firewall-cmd --reload
3. firewall-cmd --list-all
1. ftp介绍
FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。
2. vsftpd安装及启用
dnf install vsftpd -y
:安装vdftpddnf install lftp -y
:安装lftpsetenforce 0
:关闭selinuxsystemctl enable --now vsftpd
:开启vsftpdrpm -qc vsftpd
:查找vsftpd的主配置文件
3. vsftpd基本信息
- 服务名称:vsftpd.service
- 配置目录:/etc/vsftpd
- 主配置文件:/etc/vsftpd/vsftpd.conf
- 默认发布目录:/var/ftp
- 报错信息:
550 程序本身拒绝
553 文件系统权限限制
500 权限过大
530 认证失败
4. 匿名用户访问控制
4.1. 登陆控制
vim /etc/vsftpd/vsftpd.conf
:修改配置文件
anonymous_enable=YES | NO
# YES 允许匿名用户登陆
# NO 不允许
systemctl restart vsftpd
:重启服务lftp 192.168.43.101
:匿名登陆
quit
:退出
- 示例:
当禁止登陆时
修改为允许登陆并重启服务
4.2.家目录控制
vim /etc/vsftpd/vsftpd.conf
:修改配置文件
anon_root=/var/ftp #添加
# 使用匿名登入时,所登入的目录(默认为/var/ftp)
systemctl restart vsftpd
:重启服务lftp 192.168.43.101
:匿名登陆
- 示例
新建一个目录,将其设置为匿名登陆目录
4.3.上传控制
vim /etc/vsftpd/vsftpd.conf
:修改配置文件
anon_upload_enable=YES | NO
# YES 允许匿名登入者有上传文件的权限(前提要有写权限)
systemctl restart vsftpd
:重启服务chmod 775 /westos_ftp/westosdir/
:修改登陆目录权限(上传是写权限)chgrp ftp /westos_ftp/westosdir/
:修改所属组lftp 192.168.43.101
:匿名登陆
put 文件路径
:上传文件(不能上传到家目录下)
- 示例
4.4.目录建立控制
vim /etc/vsftpd/vsftpd.conf
:修改配置文件
anon_mkdir_write_enable=NO | YES
# YES 允许匿名用户新建目录
# NO 不允许(默认为NO)
systemctl restart vsftpd
:重启服务lftp 192.168.43.101
:匿名登陆
- 示例
4.5.下载控制
vim /etc/vsftpd/vsftpd.conf
:修改配置文件
anon_world_readable_only=YES | NO
# YES 允许匿名用户下载可读的文件(默认为YES)
# NO 允许匿名用户下载不可读的文件
systemctl restart vsftpd
:重启服务lftp 192.168.43.101
:匿名登陆
get 文件
:下载文件(从哪个目录下登陆就下载到哪里)
mirror 目录
:下载目录
- 示例
4.6.删除与重命名控制
vim /etc/vsftpd/vsftpd.conf
:修改配置文件
anon_other_write_enable=YES
systemctl restart vsftpd
:重启服务lftp 192.168.43.101
:匿名登陆
mv 文件名 新文件名
:重命名
rm 文件
:删除
- 示例
4.7.匿名用户上传文件权限设定
vim /etc/vsftpd/vsftpd.conf
:修改配置文件
anon_umask=022
#当设置chown_username= 后anon_umask不生效
systemctl restart vsftpd
:重启服务lftp 192.168.43.101
:匿名登陆
- 示例
4.8.匿名用户上传文件的用户身份设定
vim /etc/vsftpd/vsftpd.conf
:修改配置文件
chown_uploads=YES
chown_username=westos #默认为ftp
chown_upload_mode=0644
systemctl restart vsftpd
:重启服务lftp 192.168.43.101
:匿名登陆
- 示例
4.9.登陆数量控制
vim /etc/vsftpd/vsftpd.conf
:修改配置文件
max_clients=2 #最大登陆数量
systemctl restart vsftpd
:重启服务lftp 192.168.43.101
:匿名登陆
- 示例
4.10.上传速率控制
vim /etc/vsftpd/vsftpd.conf
:修改配置文件
anon_max_rate=102400
systemctl restart vsftpd
:重启服务lftp 192.168.43.101
:匿名登陆
- 示例
5.本地用户访问
本地用户访问命令:
lftp 172.25.254.127 -u 用户
5.1.登陆控制
vim /etc/vsftpd/vsftpd.conf
:修改配置文件
local_enable=YES | NO
systemctl restart vsftpd
:重启服务lftp 192.168.43.101 -u 用户
:本地用户登陆
- 示例
准备工作:新建本地用户
实验:
5.2.家目录控制
vim /etc/vsftpd/vsftpd.conf
:修改配置文件
local_root=路径
systemctl restart vsftpd
:重启服务lftp 192.168.43.101 -u 用户
:本地用户登陆
- 示例
5.3.写权限控制
vim /etc/vsftpd/vsftpd.conf
:修改配置文件
write_enable=YES
# YES 有写权限(属于全局设置,默认为YES)
systemctl restart vsftpd
:重启服务lftp 192.168.43.101 -u 用户
:本地用户登陆
- 示例
当 write_enable=NO 时,无写权限
5.4.上传文件权限控制
vim /etc/vsftpd/vsftpd.conf
:修改配置文件
local_umask=022
systemctl restart vsftpd
:重启服务lftp 192.168.43.101 -u 用户
:本地用户登陆
- 示例
当 local_umask=022 时
当 local_umask=077 时
5.5.本地用户登陆黑名单
/etc/vsftpd/ftpusers:永久黑名单
/etc/vsftpd/user_list:默认黑名单
vim /etc/vsftpd/user_list
:修改默认黑名单systemctl restart vsftpd
:重启服务lftp 192.168.43.101 -u 用户
:本地用户登陆
- 在默认黑名单/etc/vsftpd/user_list中加入用户sdsnzy1,重启服务后发现sdsnzy1不能登陆,sdsnzy2可以登陆
5.6.本地用户登陆白名单
vim /etc/vsftpd/vsftpd.conf
:修改配置文件
userlist_deny=NO
- 此时 /etc/vsftpd/user_list 由黑名单变为白名单
systemctl restart vsftpd
:重启服务lftp 192.168.43.101 -u 用户
:本地用户登陆
- 修改配置文件/etc/vsftpd/vsftpd.conf,发现sdsnzy1可以登陆,不在名单中的sdsnzy2禁止登陆
5.7.锁定用户到自己的家目录中
chmod u-w /home/*
vim /etc/vsftpd/vsftpd.conf
:修改配置文件
chroot_local_user=NO | YES
NO:不锁定(默认) YES:锁定
systemctl restart vsftpd
:重启服务lftp 192.168.43.101 -u 用户
:本地用户登陆
- 当未锁定家目录时,可以自由进入目录
- 在配置文件修改为 chroot_local_user=YES 后重启服务 锁定家目录
5.8.锁定用户到自己的家目录中的黑名单
即其他用户不锁定家目录,只有名单中的用户锁定家目录
chroot_local_user=NO 时,/etc/vsftpd/chroot_list 为黑名单(原本没有此文件)
vim /etc/vsftpd/chroot_list
:修改黑名单中的用户vim /etc/vsftpd/vsftpd.conf
:修改配置文件
chroot_local_user=NO
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list#黑名单
systemctl restart vsftpd
:重启服务lftp 192.168.43.101 -u 用户
:本地用户登陆
- 示例
- 在名单 /etc/vsftpd/chroot_list 中添加kiosk用户
- 修改配置文件并重启服务
5.9.锁定用户到自己的家目录中的白名单
即其他用户锁定家目录,只有名单中的用户不锁定家目录
chroot_local_user=YES 时,/etc/vsftpd/chroot_list 为白名单
vim /etc/vsftpd/chroot_list
:修改白名单中的用户vim /etc/vsftpd/vsftpd.conf
:修改配置文件
chroot_local_user=YES
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list#白名单
systemctl restart vsftpd
:重启服务lftp 192.168.43.101 -u 用户
:本地用户登陆
- 示例
6.虚拟用户访问
除匿名用户之外,还可设置虚拟用户来访问FTP。所谓虚拟用户,指存放于独立数据库文件中的FTP用户账户,可以将它们映射到某个不能登录的系统用户账号上,以进一步增强FTP服务器的安全性。
6.1.建立虚拟用户
vim /etc/vsftpd/ftp_auth_file
:建立认证文件模板
user1 #虚拟用户名
123 #密码
user2
123
user3
123
db_load -T -t hash -f /etc/vsftpd/ftp_auth_file /etc/vsftpd/ftp_auth_file.db
:加密认证文件(-f指定转换文件为建立的文件模板)
(-T:转换; -t:type; -f:指定转换文件)vim /etc/pam.d/ftp-auth
:编写认证策略文件
account required pam_userdb.so db=/etc/vsftpd/ftp_auth_file
auth required pam_userdb.so db=/etc/vsftpd/ftp_auth_file
#注意在这里系统会默认加上.db后缀,因此我们不需要添加后缀名
vim /etc/vsftpd/vsftpd.conf
:编辑主配置文件
pam_service_name=ftp-auth #指定认证策略文件(编写的认证策略文件是什么就写什么)
guest_enable=YES #指定虚拟用户功能开启
guest_username=ftp #指定虚拟用户在ftp服务器上的用户身份
systemctl restart vsftpd
:重启服务
- 示例
6.2.虚拟用户家目录独立设定
mkdir -p /var/ftphome/user{1…3}
:建立虚拟用户家目录
touch /var/ftphome/user1/user1file1
touch /var/ftphome/user2/user2file1
touch /var/ftphome/user3/user3file1
vim /etc/vsftpd/vsftpd.conf
:修改主配置文件
local_root=/var/ftphome/$USER
user_sub_token=$USER
systemctl restart vsftpd
:重启服务·
- 示例
6.3.虚拟用户独立配置
mkdir /var/ftphome/user{1…3}/westos
chmod 775 /var/ftphome/user{1…3}/westos
chgrp ftp /var/ftphome/user{1…3}/westos
vim /etc/vsftpd/vsftpd.conf
#注释 避免对后续试验产生影响
#anon_upload_enable=YES
#anon_other_write_enable=YES
#anon_world_readable_only=NO
#anon_umask=022
user_config_dir=/etc/vsftpd/confdir
#在此目录中与用户名称相同的文件为用户配置文件
mkdir /etc/vsftpd/confdir
vim /etc/vsftpd/confdir/user1
:建立并修改用户user1的配置
anon_upload_enable=YES #可上传文件
systemctl restart vsftpd
重启服务
- 示例