下面按“先排查 → 再修复”的思路,给你一套在 Ubuntu 上修复 FTP / FTPS Server 的通用方法。常见 FTP 服务有 vsftpd(最常用)、proftpd。下面以 vsftpd + FTPS 为主说明。
which vsftpd
# 或
dpkg -l | grep vsftpd
未安装则安装:
sudo apt update
sudo apt install vsftpd
systemctl status vsftpd
如果没运行:
sudo systemctl start vsftpd
sudo systemctl enable vsftpd
原因:服务没启动或端口被防火墙挡
检查端口:
sudo netstat -tulnp | grep 21
防火墙放行(FTP 控制端口):
sudo ufw allow 21/tcp
如果是 FTPS(隐式):
sudo ufw allow 990/tcp
如果是 被动模式(PASV):
sudo ufw allow 30000:31000/tcp
检查:
编辑配置:
sudo nano /etc/vsftpd.conf
确保:
local_enable=YES
write_enable=YES
然后重启:
sudo systemctl restart vsftpd
⚠️ 如果用 FTP 用户但禁止 shell 登录:
sudo usermod -s /usr/sbin/nologin ftpuser
同时确保:
check_shell=NO
检查是否启用 SSL:
sudo nano /etc/vsftpd.conf
示例 FTPS 配置:
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.key
生成证书(如果没有):
sudo openssl req -x509 -nodes -days 365 \
-newkey rsa:2048 \
-keyout /etc/ssl/private/vsftpd.key \
-out /etc/ssl/certs/vsftpd.pem
重启:
sudo systemctl restart vsftpd
客户端能登录但列目录卡住,通常是 PASV 问题。
配置:
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
pasv_address=你的公网IP
防火墙放行:
sudo ufw allow 30000:31000/tcp
查看错误:
sudo journalctl -xe | grep vsftpd
常见错误:
✅ 服务状态
✅ 防火墙
✅ 用户权限
✅ SSL 证书
✅ 被动端口
✅ 配置文件语法
你可以补充:
我可以直接给你一份可复制的修复配置。