在 Ubuntu 上使用 vsftpd 时出现 500 错误,通常不是“一个”原因,而是某一类配置或权限问题被 vsftpd 拒绝了。下面按最常见 → 较少见帮你排查。
vsftpd 对用户目录权限有严格要求:
错误示例
500 OOPS: cannot change directory:/home/xxx
原因
解决方法
sudo chmod 755 /home/用户名
sudo chown 用户名:用户名 /home/用户名
如果你是 虚拟用户,根目录也要:
chmod 555 /ftp
这是 Ubuntu 上最常见 500 错误之一。
现象
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
原因
chroot_local_user=YES解决方法(任选一种)
✅ 推荐(Ubuntu 新版本):
allow_writeable_chroot=YES
或修改目录权限:
chmod a-w /home/用户名
Ubuntu 默认用 AppArmor。
现象
500 OOPS: child died
检查
sudo aa-status | grep ftp
临时解决
sudo systemctl stop apparmor
长期解决
/etc/apparmor.d/usr.sbin.vsftpd比如:
local_enable = yes ❌
应为:
local_enable=YES
检查
sudo vsftpd /etc/vsftpd.conf
会直接报配置错误。
如果启用了匿名:
anonymous_enable=YES
但目录不对,会 500。
虽然不是严格 500,但常被混淆。
建议配置
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
并在防火墙放行:
sudo ufw allow 30000:31000/tcp
你可以贴出以下信息,我可以精准判断:
/var/log/vsftpd.log)/etc/vsftpd.conf如果你愿意,可以直接把 报错原文 + vsftpd.conf 发出来,我可以逐行帮你改。