在 Ubuntu 上使用 vsftpd(Very Secure FTP Daemon)时,登录慢是一个比较常见的问题,通常和DNS 解析、PAM、SSL/TLS、配置参数有关。下面按最常见 → 较少见的顺序说明原因和解决办法。
vsftpd 默认会尝试对客户端 IP 做 反向 DNS 解析(reverse lookup),如果 DNS 不通或很慢,就会卡住。
编辑配置文件:
sudo nano /etc/vsftpd.conf
确保有以下一行:
reverse_lookup_enable=NO
然后重启:
sudo systemctl restart vsftpd
⚠️ 注意:
vsftpd 使用 PAM 做用户认证,pam_unix 或 pam_systemd 可能会尝试 DNS / NSS 查询。
编辑 PAM 配置:
sudo nano /etc/pam.d/vsftpd
注释掉不必要的模块,例如:
# auth required pam_shells.so
或者测试时临时改成:
# @include common-auth
# @include common-account
(仅用于排查,不建议长期关闭)
ftp:// 正常ftps:// 或 implicit TLS 很慢ssl_verify_clientssl_enable=YES
require_ssl_reuse=NO
ssl_ciphers=HIGH
并检查:
openssl x509 -in /etc/ssl/certs/vsftpd.pem -noout -text
证书必须包含完整 chain。
确保被动模式配置正确:
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
pasv_address=你的公网IP
防火墙放行对应端口。
systemctl status systemd-logind
检查:
/etc/nsswitch.conf
确保没有:
hosts: files dns [UNAVAIL=return]
异常配置
# 看登录耗时
time ftp localhost
# 看 DNS
nslookup 你的客户端IP
# 看 vsftpd 日志
sudo tail -f /var/log/vsftpd.log
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
reverse_lookup_enable=NO
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
如果你愿意,可以贴出:
/etc/vsftpd.conf我可以帮你精准定位是哪一行配置导致的慢。