参考文档:https://blog.csdn.net/weixin_45551608/article/details/116903931
一、FTP 简介
1. 它是干啥的
用来传输文件的协议。FTP 是 File Transfer Protocol(文件传输协议)的英文简称, 中文简称"文传协议",用于 Internet 上控制文件的双向传输。
同时它也是一个应用程序(Application)。基于不同的操作系统有不同的 FTP 应用程序, 而这些应用程序都遵守同一种协议来传输文件。
2. 用的端口
FTP 服务器默认使用 TCP 协议的 20、21 端口与客户端通信:
| 端口 | 作用 |
|---|---|
| 20 | 建立数据连接,传输文件数据 |
| 21 | 建立控制连接,传输 FTP 控制命令 |
3. 数据连接方式
分主动模式和被动模式:
- 主动模式:服务器主动发起数据连接
- 被动模式:服务器被动等待数据连接
二、搭建步骤
详见文档,此处仅保留关键步骤。
1. 设置匿名用户访问的 FTP 服务(最大权限)
一般不会启用最大权限,只保留上传和读的权限。
vim /etc/vsftpd/vsftpd.conf # 修改配置文件
anonymous_enable=YES # 开启匿名用户访问。默认已开启
write_enable=YES # 开放服务器的写权限(若要上传,必须开启)。默认已开启
anon_umask=022 # 设置匿名用户所上传数据的权限掩码(反掩码),需手动添加
# 文件 644,目录 755
anon_upload_enable=YES # 允许匿名用户上传文件。默认已注释,需取消注释
anon_mkdir_write_enable=YES # 允许匿名用户创建(上传)目录。默认已注释,需取消注释
anon_other_write_enable=YES # 允许删除、重命名、覆盖等操作。需添加
chmod 777 /var/ftp/pub/ # 最大权限,测试用
systemctl start vsftpd
systemctl stop firewalld.service # 关闭防火墙
setenforce 0 # 关闭底层的防火墙,测试用
2. 设置本地用户验证访问,并禁止切换到 ftp 以外的目录
默认登录的根目录为本地用户的家目录。
⚠️ 注意和之前的配置不能冲突,必须检查。
vim /etc/vsftpd/vsftpd.conf # 修改配置文件
local_enable=YES # 启用本地用户
anonymous_enable=no # 关闭匿名用户访问
write_enable=YES # 开放服务器的写权限(若要上传,必须开启)
local_umask=077 # 可设置仅宿主用户拥有被上传文件的权限(反掩码)
chroot_local_user=YES # 将访问禁锢在用户的宿主目录中
allow_writeable_chroot=yes # 允许被限制的用户主目录具有写权限
systemctl restart vsftpd
3. 设置白名单
vim /etc/vsftpd/vsftpd.conf # 修改配置文件
userlist_enable=YES # 启动 user_list 用户列表文件
userlist_deny=NO # 设置白名单:仅允许 user_list 里的用户访问
# 默认为 yes,就是黑名单,禁用
vim /etc/vsftpd/user_list # 修改白名单,把允许访问的用户名加到末尾即可
三、配置项备忘
1. 默认参数
| 配置项 | 默认值 | 意思 |
|---|---|---|
anonymous_enable | YES | 匿名用户能不能进 |
local_enable | NO | 本地用户(系统账号)能不能进 |
write_enable | YES | 能不能上传 / 删除 / 改名 |
local_umask | 022 | 上传的文件权限(别人能看不能改) |
chroot_local_user | NO | 用户能不能在家目录外乱逛 |
listen_ipv6 | YES | 监听 IPv6 连接 |
pam_service_name | vsftpd | 用系统账号登录时的验证方式 |
userlist_enable | YES | 是否启用用户黑白名单 |
2. 两套配置只能存在一套
方案一:匿名用户(最大权限)
anonymous_enable=YES # 允许匿名登录
write_enable=YES # 允许写入(全局开关)
anon_umask=022 # 上传文件权限 644/755
anon_upload_enable=YES # 允许上传文件
anon_mkdir_write_enable=YES # 允许创建目录
anon_other_write_enable=YES # 允许删除 / 重命名
- 适用场景:公共文件下载站、匿名上传分享
- 安全等级:⚠️ 低(任何人可写,建议内网使用)
方案二:本地用户验证
local_enable=YES # 允许系统用户登录
anonymous_enable=NO # 关闭匿名访问
write_enable=YES # 允许写入
local_umask=077 # 上传文件权限 600/700(仅自己可见)
chroot_local_user=YES # 限制用户在自己的家目录
allow_writeable_chroot=YES # 允许家目录可写(必须加)
- 适用场景:员工个人文件存储、备份
- 安全等级:✅ 高(需密码登录)