在 Ubuntu 上搭建的 FTP 服务器(常见为 vsftpd)能连上但传不了文件,通常不是网络问题,而是配置或权限问题。下面按最常见原因逐一说明,并给出排查和解决办法。
| 现象 | 可能原因 |
|---|---|
| 能登录,但上传失败 | 目录权限不足 |
| 能登录,但列不出目录 | 被动模式(PASV)未配置 |
| 防火墙开着就传不了 | 被动端口未放行 |
| 使用 root 登录传不了 | vsftpd 禁止 root |
| 提示 550 / 553 | 写权限被禁用 |
错误示例:
/var/ftp ❌ 属于 root,且 755
解决:
sudo mkdir -p /srv/ftp
sudo chown ftp:ftp /srv/ftp
sudo chmod 755 /srv/ftp
如果是普通用户:
sudo chown 用户名:用户名 /home/用户名/ftp
检查配置文件:
sudo nano /etc/vsftpd.conf
确保有以下内容:
write_enable=YES
❌ 如果看到:
write_enable=NO
改成 YES 并重启:
sudo systemctl restart vsftpd
很多客户端连得上,但传不了文件,就是因为 PASV。
在 /etc/vsftpd.conf 加:
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
然后开放防火墙:
sudo ufw allow 20:21/tcp
sudo ufw allow 30000:31000/tcp
如果你配置了:
chroot_local_user=YES
那 chroot 目录本身不能可写,否则登录失败或无法上传。
✅ 正确结构:
/home/user/ftp # 755,不可写
/home/user/ftp/upload # 755/775,可写
sudo ufw status
确保:
vsftpd 默认禁止:
userlist_deny=YES
如需允许(不推荐):
userlist_deny=NO
# 1. 服务是否运行
systemctl status vsftpd
# 2. 是否能登录
ftp localhost
# 3. 是否能 put 文件
put test.txt
# 4. 查看错误码
# 550 = 权限
# 553 = 目录不可写
# 425 = 被动端口问题
你可以告诉我:
我可以一步一步帮你精确修好。