在 CentOS 上设置 FTP 权限,通常包括 安装 FTP 服务、配置用户权限、目录权限、防火墙和 SELinux。下面以 vsftpd(最常见的 FTP 服务器) 为例,按步骤说明。
yum install -y vsftpd
启动并设置开机自启:
systemctl start vsftpd
systemctl enable vsftpd
useradd -d /data/ftp -s /sbin/nologin ftpuser
passwd ftpuser
-d:指定 FTP 根目录-s /sbin/nologin:禁止 SSH 登录(更安全)mkdir -p /data/ftp
chown -R ftpuser:ftpuser /data/ftp
chmod -R 755 /data/ftp
✅ 原则:
- 用户要对目录有 读 + 写 + 执行 权限
- 上级目录不能有 写权限 + 其他用户写权限(vsftpd 安全限制)
编辑配置文件:
vim /etc/vsftpd/vsftpd.conf
# 禁止匿名登录
anonymous_enable=NO
# 允许本地用户登录
local_enable=YES
# 允许上传
write_enable=YES
# 本地用户限制在主目录
chroot_local_user=YES
# 允许写 chroot(CentOS 7+ 必须)
allow_writeable_chroot=YES
# 使用被动模式(推荐)
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
重启服务:
systemctl restart vsftpd
firewall-cmd --permanent --add-service=ftp
firewall-cmd --permanent --add-port=30000-31000/tcp
firewall-cmd --reload
CentOS 默认开启 SELinux,不设置会导致 能登录但不能上传。
getenforce
setsebool -P ftp_home_dir on
setsebool -P allow_ftpd_full_access on
如果仍不行,可临时测试:
setenforce 0
⚠️ 生产环境不建议永久关闭 SELinux
ftp 服务器IP
或使用工具:
/sbin/nologin 未加入 /etc/shellsecho "/sbin/nologin" >> /etc/shells
allow_writeable_chroot=YES
write_enable=YES| 项目 | 设置 |
|---|---|
| FTP 用户 | nologin |
| 目录属主 | 与 FTP 用户一致 |
| 目录权限 | 755 |
| 上传权限 | write_enable=YES |
| SELinux | 必须开启放行 |
如果你愿意,可以告诉我:
我可以给你一套 完全贴合你场景的 FTP 权限方案。