在 Ubuntu 上搭建 FTP 服务器(常见为 vsftpd)时,“拒绝连接 / 登录被拒”是很常见的现象,原因通常集中在以下几类。你可以逐项对照排查。
systemctl status vsftpd
若未运行:
sudo systemctl start vsftpd
sudo systemctl enable vsftpd
sudo ufw status
若开启,需放行:
sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
如果是 被动模式(PASV),还需放行被动端口范围(见后文)。
anonymous_enable=NO
local_enable=YES
确保:
chroot_local_user=YES
此时用户主目录 不能可写,否则 vsftpd 会拒绝登录。
解决方法(推荐):
sudo chmod a-w /home/username
sudo mkdir /home/username/ftp
sudo chown username:username /home/username/ftp
或在配置中加:
allow_writeable_chroot=YES
grep username /etc/passwd
若 shell 是 /usr/sbin/nologin 或 /bin/false,FTP 会被拒。
可改为:
sudo usermod -s /bin/bash username
或确保 vsftpd 不依赖 shell(部分版本需要)。
Ubuntu 默认不使用 SELinux,可忽略。
编辑 /etc/vsftpd.conf:
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
pasv_address=你的公网IP
然后:
sudo ufw allow 30000:31000/tcp
sudo tail -n 50 /var/log/vsftpd.log
# 或
sudo journalctl -u vsftpd
日志通常会直接写明拒绝原因。
如果你愿意,可以把 具体报错信息(客户端提示 + /var/log/vsftpd.log)贴出来,我可以直接帮你定位是哪一条原因。