在 Debian 上搭建的 FTP 服务器无法上传是比较常见的问题,通常不是“FTP 服务挂了”,而是权限 / 配置 / 防火墙 / SELinux 类机制导致的。下面按最常见原因逐一排查。
| 原因 | 现象 |
|---|---|
| 目录没有写权限 | 能登录,但上传报错 550 Permission denied |
| vsftpd 配置限制上传 | 能登录,但不能写 |
| 用户是 nologin / 家目录不对 | 登录成功但无目录可写 |
| 被动模式端口被防火墙挡 | 能登录,但 LIST / 上传卡住 |
| 磁盘满了 | 上传直接失败 |
| chroot 限制导致写失败 | 500 OOPS 或无法写 |
假设 FTP 用户是 ftpuser,上传目录是 /srv/ftp
ls -ld /srv/ftp
✅ 正确示例:
drwxr-xr-x ftpuser ftpuser /srv/ftp
❌ 错误示例(root 所有,ftp 用户不可写):
drwxr-xr-x root root /srv/ftp
修复:
chown ftpuser:ftpuser /srv/ftp
chmod 755 /srv/ftp
如果还要子目录可写:
chown -R ftpuser:ftpuser /srv/ftp
编辑:
sudo nano /etc/vsftpd.conf
确保有以下内容:
write_enable=YES
local_enable=YES
然后重启:
sudo systemctl restart vsftpd
⚠️ 如果 write_enable=NO,永远不能上传
如果配置了:
chroot_local_user=YES
那 FTP 根目录必须是不可写的,否则 vsftpd 会拒绝。
✅ 正确结构:
/srv/ftp (755, 属主 root)
/srv/ftp/upload (755, 属主 ftpuser)
用户登录后在 upload 里上传。
vsftpd 配置:
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
防火墙开放:
sudo ufw allow 20:21/tcp
sudo ufw allow 30000:31000/tcp
云服务器还要在安全组放行这些端口。
如果是:
ftpuser:x:1001:1001::/srv/ftp:/usr/sbin/nologin
✅ 没问题(nologin 可用 FTP)
但确保:
local_enable=YES
在客户端用主动模式 + 详细日志:
ftp -d your.server.ip
或 FileZilla:
设置 → 调试 → 显示 raw command
常见错误含义:
550 Permission denied → 权限500 OOPS → 配置错误425 Can't open data connection → 被动端口问题# 1. 服务在跑吗
systemctl status vsftpd
# 2. 能写吗
sudo -u ftpuser touch /srv/ftp/test
# 3. 磁盘满了吗
df -h
# 4. 配置对吗
grep -E "write_enable|local_enable|chroot" /etc/vsftpd.conf
你可以贴出:
/etc/vsftpd.conf我可以直接告诉你是哪一行配置或权限错了。