Ubuntu 上 vsftpd 故障排查技巧
一 快速定位流程
sudo systemctl status vsftpd、sudo systemctl restart vsftpd、sudo netstat -tulpen | grep ':21\b'。若端口被占用,改用其他端口并同步更新防火墙规则。sudo journalctl -u vsftpd -xe、tail -f /var/log/vsftpd.log、grep vsftpd /var/log/auth.log。listen=YES、anonymous_enable=NO、local_enable=YES、write_enable=YES、chroot_local_user=YES;修改后务必重启服务。二 常见症状与处理要点
telnet 服务器IP 21 或 nc -vz 服务器IP 21 验证连通性。pam_service_name=vsftpd 与 PAM 配置正常;若启用 TLS,确保客户端以 FTPS 方式连接。write_enable=YES;检查目标目录属主与权限(如 chown -R user:user /home/user、chmod -R 755 /home/user);检查磁盘空间 df -h。chown root:root /var/ftp && chmod 755 /var/ftp。vsftpd.conf 设置 pasv_enable=YES、pasv_min_port 与 pasv_max_port(如 40000:50000),并在防火墙/安全组放行该端口段;客户端需启用被动模式。ssl_enable=YES、rsa_cert_file 与 rsa_private_key_file 路径与权限;证书文件需对 vsftpd 可读;客户端使用 FTP over TLS(显式/隐式)而非明文 FTP。三 配置与权限检查清单
listen=YES、anonymous_enable=NO、local_enable=YES、write_enable=YES、chroot_local_user=YESpasv_enable=YES、pasv_min_port=40000、pasv_max_port=50000xferlog_enable=YES、xferlog_std_format=NO、log_ftp_protocol=YES(便于排错)ssl_enable=YES、rsa_cert_file=/etc/ssl/certs/vsftpd.crt、rsa_private_key_file=/etc/ssl/private/vsftpd.keyuserlist_enable=YES、userlist_deny=NO 配合)chroot_local_user=YES,确保用户根目录不可写,或在需要写入的目录上单独放宽权限(避免 500 OOPS)四 防火墙 端口转发 与 SELinux
sudo ufw allow 21/tcpsudo ufw allow 40000:50000/tcpsudo ufw allow 990/tcpsudo firewall-cmd --permanent --add-port=21/tcpsudo firewall-cmd --permanent --add-port=990/tcp(如启用)sudo firewall-cmd --permanent --add-port=40000-50000/tcpsudo firewall-cmd --reloadsudo setenforce 0sudo setsebool -P ftpd_full_access on 或 sudo setsebool -P ftp_home_dir on五 高效排错命令清单
sudo systemctl status vsftpd、sudo systemctl restart vsftpd、sudo journalctl -u vsftpd -xe、sudo netstat -tulpen | grep ':21\b'tail -f /var/log/vsftpd.log、grep vsftpd /var/log/auth.log、sudo journalctl -xeping 服务器IP、telnet 服务器IP 21、nc -vz 服务器IP 21、traceroute 服务器IPdf -h、du -sh /home/*、top/htopsudo ufw status、sudo ufw allow 21/tcp、sudo ufw allow 40000:50000/tcp、sudo firewall-cmd --list-portssudo systemctl restart vsftpd 并立即查看日志以确认生效与无语法错误