vsftpd服务
ftp服务简介
ftp只支持tcp连接,不支持udp连接.
ftp使用两个端口: 21(控制端口, 命令端口) , 20(数据端口)
21端口: 用来控制用户验证, 连接的建立和关闭:open/close/bye
20端口: 用来传输数据.
两个连接: 命令连接(控制连接) , 数据连接
ftp协议使用的端口是21(也称为控制端 口),其实还有一个数据端口20,根据FTP工作方式的不同,数据端口也不都是20,主动模式的被动模式使用的数据端口是不一样的.
安装vsftpd
# 安装
yum install vsftpd -y
# 启动
systemctl start vsfptd
# 开机自启
systemctl enable vsftpd
主动模式和被动模式
主动模式:FTP服务器主动向客户端发起连接请求。
被动模式:FTP服务器等待客户端发起连接请求(默认工作模式)。
防火墙添加FTP服务
firewall-cmd --permanent --zone=public --add-service=ftp
firewall-cmd --reload
配置SELinux
①、查看ftp的Selinux状态:sestatus -b | grep ftp
②、在结果中可以看到: ftp_home_dir off
③、将状态改为on:setsebool -P ftp_home_dir on
④、重启vsftp服务:systemctl restart vsftpd.service
setsebool -P ftpd_full_access on
配置vsftpd
ftp配置文件里的参数一定要大写
备份并过滤主配置文件vsftpd.conf
# 备份vsftpd配置文件
mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak
# 过滤vsftpd配置文件
grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf
# 查看过滤后的配置文件
[root@linuxprobe ~]# cat /etc/vsftpd/vsftpd.conf
#是否允许匿名登陆
anonymous_enable=yes
#是否允许本地账户访问
local_enable=YES
#是否允许本地账户进行写入操作
write_enable=YES
#设置新建文件和目录的权限
local_umask=022
#是否显示欢迎语
dirmessage_enable=YES
#是否启用上传/下载日志记录。
xferlog_enable=YES
#指定FTP使用20端口进行数据传输,默认值为YES。
connect_from_port_20=YES
#如果启用,则日志文件将会写成xferlog的标准格式,如同wu-ftpd 一般。默认值为关闭。
xferlog_std_format=YES
#设置vsftpd服务器是否以standalone(独立)模式运行(建议yes,很多服务都依赖这个选项)
listen=YES
#是否支持IPV6
listen_ipv6=YES
#设置PAM使用的名称,默认值为/etc/pam.d/vsftpd。--可插拔认证模块
pam_service_name=vsftpd
#是否使用黑名单文件
userlist_enable=YES
#是否受到tcp_wrappers防火墙限制
tcp_wrappers=YES
配置参数
vsftpd服务主配置文件和子配置文件
vsftpd.conf是主配置文件
配置匿名用户登陆
匿名用户登陆后默认访问的是/var/ftp目录
#编辑主配置文件
vim /etc/vsftpd/vsftpd.conf
#是否允许匿名登陆
anonymous_enable=yes
anon_umask=022 #匿名用户上传文件的umask值
anon_upload_enable=YES #允许匿名用户上传文件
anon_mkdir_write_enable=YES #允许匿名用户创建目录
anon_other_write_enable=YES #允许匿名用户修改目录名称或删除目录
# 给匿名目录/var/ftp/pub设置777权限
chmod -Rf 777 /var/ftp/pub
# 修改完配置文件需要重启vsftpd服务
systemctl restart vsftpd
# 将布尔值 ftpd_anon_write 的状态开启,加上 -P 参数永久生效
setsebool -P ftpd_anon_write on
## 或者开启ftpd的所有SELinux权限
setsebool -P ftpd_full_access=on
# 可以看到再次查看时,ftpd_anon_write 已开启
getsebool -a |egrep 'ftpd_anon'
ftpd_anon_write --> on
查看SeLinux的布尔值
修改Selinux的布尔值
配置本地用户登陆
本地用户登陆ftp后,默认访问的是对应账户的home/user目录
#编辑主配置文件
vim /etc/vsftpd/vsftpd.conf
#配置本地用户登陆
anonymous_enable=NO #禁止匿名访问模式
local_enable=YES #允许本地用户登陆
write_enable=YES #设置可写权限
local_umask=022 #本地用户模式创建文件的umask值
userlist_deny=YES #启用“禁止用户名单”,名单文件为ftpusers和user_list
userlist_enable=YES #开启用户作用名单文件功能
# 修改完配置文件需要重启vsftpd服务
systemctl restart vsftpd
配置完本地用户登陆模式后,root用户却无法登陆。是因为ftpusers
和user_list
文件中存在root用户。想要root登陆ftp,必须将root从这两个文件中删除。
ftpusers
ftpusers 文件里面的用户是不允许登录ftp的,这些用户拥有高权限,可以遍历Linux目录,包括password文件都可以下载。
将用户名写入这个文件中,该用户就不能登陆ftp了
[root@linuxprobe ~]# cat /etc/vsftpd/ftpusers
# Users that are not allowed to login via ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
news
uucp
operator
games
nobody
user_list
user_list 是黑白名单,即可以配置黑名单,也可以配置白名单.
[root@linuxprobe ~]# cat /etc/vsftpd/user_list
# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
root
bin
daemon
adm
lp
sync
shutdown
halt
news
uucp
operator
games
nobody
配置白名单登陆
将/etc/vsftpd/user_list中的userlist_deny参数值改成NO,user_list列表就变成了强制白名单,功能完全是反过来的,只允许列表内的用户访问,拒绝其他人。
# 修改user_list为白名单模式
vim /etc/vsftpd/user_list
# 设置为白名单模式
userlist_deny=NO
配置虚拟用户登陆–最安全的模式,生产环境推荐
虚拟用户登陆ftp,默认访问的是:映射用户的home目录
1新建虚拟用户列表
cd /etc/vsftpd
# 新建虚拟用户列表
vim vuser.list
# 添加虚拟用户
## 奇数行是账号,偶数行是密码
zhangsan
123456
## 用户名列表文件不能直接被ftp读取,要进行加密后才能读取
# 生成ftp加密数据库文件
## 固定格式
db_load -T -t hash -f vuser.list vuser.db
# 设置vuser.db权限为600
chmod 600 vuser.db
# 删除明文文件,或将权限设小
rm -f vuser.list
2添加映射用户
# 添加用户并指定home路径,不允许登陆
useradd -d /var/ftproot -s /sbin/nologin ftpvuser
# 设置ftpvuser用户的home目录权限为755
chmod -Rf 755 /var/ftproot
3建立用于支持虚拟用户的PAM文件
# 新建一个用于虚拟用户认证的PAM文件vsftpd.vu
vim /etc/pam.d/vsftpd.vu
## 配置认证信息为自己生成的vuser.db文件(不要带db后缀)
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
4修改主配置文件为PAM认证
# 编辑主配置文件
vim /etc/vsftpd/vsftpd.conf
## 编辑对应参数
anonymous_enable=NO #禁止匿名开放模式
local_enable=YES #允许本地用户模式
guest_enable=YES #开启虚拟用户模式
guest_username=ftpvuser #指定虚拟用户账户
pam_service_name=vsftpd.vu #指定PAM文件
allow_writeable_chroot=YES #允许对禁锢的FTP根目录执行写入操作,而且不拒绝用户的登录请求
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
listen_ipv6=YES
user_config_dir=/etc/vsftpd/vusers_dir #对每个用户单独设置权限,需要新建
userlist_enable=YES
tcp_wrappers=YES
5为每个虚拟用户单独设置权限
比如,允许张三上传、创建、修改、查看、删除文件,只允许李四查看文件
# 新建虚拟用户权限控制文件 目录
mkdir -p /etc/vsftpd/vusers_dir/
# 进入该目录
cd /etc/vsftpd/vusers_dir/
# 新建lisi空文件
touch lisi
# 新建zhangsan权限控制文件
vim zhangsan
## 为zhangsan添加权限
anon_upload_enable=YES #允许上传文件
anon_mkdir_write_enable=YES #允许创建和写入权限
anon_other_write_enable=YES #允许删除重命名权限
6修改SELinux的安全上下文值
# 查看ftp的SELinux安全上下文值
getsebool -a | gerp ftp
# 设置ftp的SELinux安全上下文值
setsebool -P ftpd_full_access=on
7重启vsftpd服务
systemctl restart vsftpd