在 Ubuntu 上搭建 FTP 服务器(常见如 vsftpd)时,上传报错是很常见的问题。原因通常集中在权限、配置、防火墙 / SELinux、被动模式等方面。下面按最常见原因逐一说明,并给出排查办法。
FTP 用户对上传目录没有写权限。
检查:
ls -ld /home/ftpuser/upload
解决:
chown ftpuser:ftpuser /home/ftpuser/upload
chmod 755 /home/ftpuser/upload
如果是匿名上传:
chmod 777 /srv/ftp/incoming
vsftpd 默认可能禁止上传。
关键配置(/etc/vsftpd.conf):
write_enable=YES
修改后重启:
sudo systemctl restart vsftpd
如果用户被 chroot,但家目录可写,vsftpd 会拒绝登录或上传。
错误示例:
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
解决方式(任选其一):
✅ 方法 1:根目录只读,子目录可写
chmod a-w /home/ftpuser
mkdir /home/ftpuser/upload
chown ftpuser:ftpuser /home/ftpuser/upload
✅ 方法 2:允许可写 chroot(不推荐生产)
allow_writeable_chroot=YES
客户端使用被动模式,但服务器未正确配置。
配置示例:
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
并放行端口:
ufw allow 30000:31000/tcp
FTP 需要:
ufw allow 21/tcp
云服务器还要在安全组放行。
vsftpd 可能被 AppArmor 限制。
查看:
aa-status | grep ftp
临时测试:
sudo aa-complain /usr/sbin/vsftpd
df -h
匿名上传需:
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
write_enable=YES
tail -f /var/log/vsftpd.log
# 或
journalctl -u vsftpd
write_enable=YES你可以补充:
我可以直接给你一份可用配置。