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服务_虚拟用户

# 备份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服务_虚拟用户_02


vsftpd服务主配置文件和子配置文件

vsftpd服务_白名单_03


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的布尔值

vsftpd服务_用户登陆_04


修改Selinux的布尔值

vsftpd服务_虚拟用户_05


配置本地用户登陆

本地用户登陆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
mail
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
mail
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