無法連接FTP服務器的首要步驟是確認vsftpd服務是否正在運行。使用以下命令查看服務狀態:
sudo systemctl status vsftpd
若服務未啟動(顯示“inactive”),則啟動服務并設置開機自啟:
sudo systemctl start vsftpd
sudo systemctl enable vsftpd
部分舊系統可能使用service命令:
sudo service vsftpd start
FTP服務依賴控制端口21(默認)和數據端口范圍(主動模式需動態端口,被動模式需指定pasv_min_port/pasv_max_port)。需確保防火墻放行這些端口:
sudo iptables -L -n | grep 21 # 檢查21端口是否開放
sudo iptables -A INPUT -p tcp --dport 21 -j ACCEPT # 開放21端口
sudo service iptables save # 保存規則(CentOS 6)
sudo firewall-cmd --list-all | grep ftp # 檢查FTP服務是否允許
sudo firewall-cmd --add-service=ftp --permanent # 允許FTP服務(自動開放21端口)
sudo firewall-cmd --reload # 重新加載規則
sudo ufw allow 21/tcp # 開放21端口
sudo ufw allow 20/tcp # 開放數據傳輸端口(可選)
sudo ufw reload
配置文件/etc/vsftpd.conf的錯誤會導致服務無法啟動或連接失敗。使用以下命令檢查語法:
sudo vsftpd /etc/vsftpd.conf # 測試配置文件語法
重點檢查以下關鍵參數(確保值為YES或正確設置):
listen=YES:啟用獨立監聽模式(若為NO,則依賴xinetd超級服務);local_enable=YES:允許本地系統用戶登錄;write_enable=YES:允許用戶上傳文件;chroot_local_user=YES:將用戶限制在主目錄(避免越權訪問);pasv_enable=YES:啟用被動模式(若客戶端在防火墻后,需開啟);pasv_min_port/pasv_max_port:被動模式的數據端口范圍(如pasv_min_port=30000,pasv_max_port=31000)。sudo systemctl restart vsftpd
若服務器啟用了SELinux(getenforce顯示Enforcing),可能會阻止vsftpd訪問用戶目錄或更改目錄。解決方法:
sudo setenforce 0
/etc/selinux/config,將SELINUX=enforcing改為SELINUX=permissive。sudo setsebool -P ftpd_full_access on
允許vsftpd更改目錄:sudo setsebool -P ftpd_disable_trans on
vsftpd的日志文件/var/log/vsftpd.log(部分系統可能在/var/log/messages或/var/log/xferlog)記錄了連接失敗的詳細原因。使用以下命令查看實時日志:
sudo tail -f /var/log/vsftpd.log
常見日志錯誤及解決方法:
sudo mkdir -p /home/username
sudo chown username:username /home/username
sudo chmod 755 /home/username
local_enable=NO(未開啟本地用戶登錄)。YES/NO)拼寫錯誤或有多余空格。若客戶端無法連接服務器,需先確認網絡可達性:
ping ftp_server_ip # 替換為服務器IP地址
若無法ping通,可能是網絡故障(如路由器配置、服務器IP錯誤)或服務器防火墻阻斷了ICMP請求。
確保FTP客戶端(如FileZilla、命令行ftp)的設置正確:
pasv_enable=YES),需在客戶端中勾選“被動模式”(Passive Mode)。