在 Linux 上管理 FTP 权限,核心在于用户权限 + 目录权限 + FTP 服务配置三者配合。下面以最常见的 vsftpd 为例,系统、完整地说明。
下面以 vsftpd 为主说明,其他原理类似。
直接使用 Linux 系统用户登录 FTP。
# 创建用户
useradd ftpuser
passwd ftpuser
编辑 /etc/vsftpd/vsftpd.conf:
chroot_local_user=YES
allow_writeable_chroot=YES
✅ 效果:
/home/ftpuser/etc、/root 等系统目录允许 anonymous 登录。
anonymous_enable=YES
anon_root=/var/ftp
⚠️ 安全风险高,生产环境不建议开启。
流程简述:
virtftp)✅ 适合多用户、高安全场景
r = 读
w = 写
x = 进入目录
示例:
drwxr-x--- ftpuser ftpuser /home/ftpuser
chown ftpuser:ftpuser /data/ftp
chmod 755 /data/ftp
chmod 775 /data/ftp
chmod 700 /home/ftpuser
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
⚠️ 匿名目录必须可写:
chown ftp /var/ftp/pub
userlist_enable=YES
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO
NO:只允许列表中的用户YES:禁止列表中的用户查看状态:
getenforce
允许 FTP 访问家目录:
setsebool -P ftp_home_dir on
允许上传:
setsebool -P allow_ftpd_full_access on
firewall-cmd --add-service=ftp --permanent
firewall-cmd --reload
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
防火墙放行:
firewall-cmd --add-port=30000-31000/tcp --permanent
✅ 使用 系统用户 + chroot
✅ 禁止 root 登录 FTP
✅ 禁用匿名用户
✅ 目录权限最小原则
✅ 使用被动模式
✅ 配合 SELinux / 防火墙
✅ 日志审计:
/var/log/vsftpd.log
| 项目 | 是否 |
|---|---|
| 用户只能访问指定目录 | ✅ |
| 上传 / 下载权限明确 | ✅ |
| SELinux 配置正确 | ✅ |
| 防火墙放行 | ✅ |
| 匿名访问关闭 | ✅ |
如果你愿意,可以告诉我:
我可以给你一份可直接用的配置文件。