解决 Ubuntu 上的 FTP 报错,需要先明确具体报错信息。不过大多数问题都集中在 vsftpd(最常见)、防火墙/端口、权限与 SELinux/AppArmor、被动模式 等方面。下面我按常见场景 + 通用排查步骤给你一个系统性的解决方案。
Ubuntu 最常见的是 vsftpd,先确认:
dpkg -l | grep ftp
或
systemctl status vsftpd
原因
解决
sudo systemctl start vsftpd
sudo systemctl enable vsftpd
检查端口:
ss -antp | grep 21
防火墙放行:
sudo ufw allow 21/tcp
sudo ufw reload
原因
解决
编辑配置:
sudo nano /etc/vsftpd.conf
确认:
local_enable=YES
write_enable=YES
如果仍不行,检查 PAM:
cat /etc/pam.d/vsftpd
测试用户:
ftp localhost
原因
解决
修复权限:
sudo chmod 755 /home/username
临时关闭 AppArmor 测试:
sudo systemctl stop apparmor
典型报错
LISTEntering Passive Mode 后失败解决(推荐)
编辑 /etc/vsftpd.conf:
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
防火墙放行:
sudo ufw allow 30000:31000/tcp
重启:
sudo systemctl restart vsftpd
解决
write_enable=YES
local_umask=022
目录权限:
sudo chown -R ftpuser:ftpuser /data/ftp
sudo chmod -R 755 /data/ftp
listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
sudo tail -f /var/log/vsftpd.log
如果没有:
journalctl -u vsftpd -f
ftp localhost
telnet 服务器IP 21
你可以直接把完整报错信息发给我,例如:
530 / 500 / 550 等错误码我可以针对你的具体错误一步步给你精确解决方案 ✅