首先確認vsftpd服務是否正在運行,使用以下命令查看服務狀態:
sudo systemctl status vsftpd
若服務未運行,啟動服務并設置開機自啟:
sudo systemctl start vsftpd
sudo systemctl enable vsftpd
服務啟動失敗時,可通過journalctl -u vsftpd查看詳細錯誤日志。
Ubuntu系統通常使用ufw防火墻,需開放FTP控制端口(21)和數據端口(20),若使用被動模式還需開放被動端口范圍(如40000-50000):
sudo ufw allow 21/tcp
sudo ufw allow 20/tcp
sudo ufw allow 40000:50000/tcp # 被動模式端口范圍
sudo ufw reload
若使用iptables,需添加對應規則允許FTP流量通過。
vsftpd的主配置文件為/etc/vsftpd.conf,需確保以下關鍵設置正確(可根據需求調整):
listen=YES # 啟用監聽(IPv4)
listen_ipv6=NO # 禁用IPv6(若無需IPv6)
anonymous_enable=NO # 禁止匿名登錄
local_enable=YES # 允許本地用戶登錄
write_enable=YES # 允許用戶上傳文件
chroot_local_user=YES # 將用戶限制在主目錄(增強安全性)
allow_writeable_chroot=YES # 允許chroot目錄可寫(若chroot_local_user=YES)
pasv_enable=YES # 啟用被動模式(解決防火墻/路由器問題)
pasv_min_port=40000 # 被動模式最小端口
pasv_max_port=50000 # 被動模式最大端口
修改配置文件后,重啟vsftpd服務使更改生效:
sudo systemctl restart vsftpd
常見配置錯誤包括:local_enable=NO(禁止本地登錄)、write_enable=NO(禁止上傳)、chroot_local_user=NO(未限制用戶目錄)。
sudo chown -R ftpuser:ftpuser /home/ftpuser # 將用戶目錄所有者設為ftpuser
sudo chmod -R 755 /home/ftpuser # 設置目錄權限為755
/home/ftpuser/upload)有寫權限:sudo mkdir -p /home/ftpuser/upload
sudo chown ftpuser:ftpuser /home/ftpuser/upload
sudo chmod 777 /home/ftpuser/upload # 或755(根據需求調整)
sudo setsebool -P ftpd_full_access on # 臨時開啟(重啟失效)
# 或永久生效(需編輯/etc/selinux/config)
或修改SELinux上下文:sudo semanage fcontext -a -t public_content_rw_t "/home/ftpuser(/.*)?"
sudo restorecon -Rv /home/ftpuser
```。
被動模式(PASV)需要服務器開放指定端口范圍,并在客戶端配置中啟用被動模式:
/etc/vsftpd.conf中設置pasv_enable=YES、pasv_min_port和pasv_max_port,并開放這些端口到防火墻。若以上步驟無法解決問題,可通過查看vsftpd日志獲取詳細錯誤信息:
sudo journalctl -u vsftpd # 查看systemd日志
sudo tail -f /var/log/vsftpd.log # 查看vsftpd專用日志(若有)
常見日志錯誤及解決方法:
/etc/vsftpd.user_list文件是否存在,且包含正確的用戶賬戶。/etc/vsftpd.user_list中未禁用該用戶(若userlist_deny=YES)。使用FTP客戶端(如lftp或FileZilla)測試連接,命令示例如下:
lftp -u ftpuser,ftpuser_password your_server_ip
或使用FileZilla輸入服務器IP、端口(21)、用戶名和密碼進行連接。若連接成功,說明問題已解決。