在 Linux 上设置 FTP 目录,常见的是使用 vsftpd(最常用)。下面按实战步骤说明,包含目录权限、用户隔离、常见问题,你可以直接照着做。
yum install -y vsftpd
systemctl enable vsftpd
systemctl start vsftpd
apt update
apt install -y vsftpd
systemctl enable vsftpd
systemctl start vsftpd
useradd -m ftpuser
passwd ftpuser
mkdir -p /data/ftp
chown ftpuser:ftpuser /data/ftp
chmod 755 /data/ftp
✅ 推荐目录结构:
/data/ftp
├── upload
├── download
配置文件路径:
/etc/vsftpd/vsftpd.conf # CentOS
/etc/vsftpd.conf # Ubuntu
# 禁止匿名登录
anonymous_enable=NO
# 允许本地用户登录
local_enable=YES
# 允许上传
write_enable=YES
# 用户只能访问自己的目录(重要)
chroot_local_user=YES
# 允许写 chroot 目录(新版必须)
allow_writeable_chroot=YES
# 指定 FTP 根目录(可选)
local_root=/data/ftp
# 被动模式(云服务器必须)
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
修改后重启:
systemctl restart vsftpd
local_root=/data/ftp
每个用户都进入这个目录。
mkdir /data/ftp/user1
chown ftpuser:ftpuser /data/ftp/user1
在配置中:
user_sub_token=$USER
local_root=/data/ftp/$USER
✅ FTP 根目录不能有写权限
chmod 555 /data/ftp
✅ 上传目录要可写
mkdir /data/ftp/upload
chown ftpuser:ftpuser /data/ftp/upload
chmod 755 /data/ftp/upload
❌ 错误示例:
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
# 开放 FTP
firewall-cmd --add-service=ftp --permanent
firewall-cmd --add-port=30000-31000/tcp --permanent
firewall-cmd --reload
setsebool -P ftp_home_dir on
setsebool -P allow_ftpd_full_access on
ftp localhost
| 问题 | 解决方法 |
|---|---|
| 无法登录 | 检查 local_enable=YES |
| 不能上传 | 检查 write_enable=YES |
| 500 OOPS | 根目录权限过高 |
| 云服务器连不上 | 开启被动模式 |
我可以给你 完全定制化的配置方案(含安全加固)。