什麼是FTP?¶
FTP(File Transfer Protocol)即文件傳輸協議,是用於在網絡中傳輸文件的標準協議。在Linux服務器上搭建FTP服務,可以方便地實現本地計算機與服務器之間的文件上傳、下載和管理。
爲什麼選擇vsftpd?¶
vsftpd(Very Secure FTP Daemon)是Linux系統中最流行的FTP服務器軟件,以安全、穩定和高性能著稱,非常適合初學者使用。本文將以vsftpd爲例講解搭建過程。
一、準備工作¶
- 環境要求:一臺安裝了Linux系統的服務器(如CentOS 7/8或Ubuntu 20.04/22.04),且已具備管理員權限(能執行
sudo或root命令)。 - 網絡要求:確保服務器能訪問互聯網(或內部網絡),並已配置好IP地址。
二、安裝vsftpd服務器¶
CentOS系統(使用yum)¶
sudo yum install vsftpd -y # 安裝vsftpd,-y表示自動確認安裝
Ubuntu系統(使用apt)¶
sudo apt update # 更新軟件源
sudo apt install vsftpd -y # 安裝vsftpd
三、啓動服務並設置開機自啓¶
CentOS/Ubuntu通用步驟¶
# 啓動vsftpd服務
sudo systemctl start vsftpd
# 設置開機自啓
sudo systemctl enable vsftpd
驗證服務狀態:
sudo systemctl status vsftpd # 應顯示“active (running)”
四、配置防火牆(開放FTP端口)¶
FTP服務需要開放兩個關鍵端口:
- 21端口:控制連接(用於命令傳輸)
- 被動模式端口範圍:默認50000-60000(數據傳輸,可根據需求調整)
CentOS(使用firewalld)¶
# 開放21端口(控制連接)
sudo firewall-cmd --permanent --add-port=21/tcp
# 開放被動端口範圍(50000-60000)
sudo firewall-cmd --permanent --add-port=50000-60000/tcp
# 重新加載防火牆規則
sudo firewall-cmd --reload
# 檢查開放端口
sudo firewall-cmd --list-ports # 應顯示21/tcp和50000-60000/tcp
Ubuntu(使用ufw)¶
# 開放21端口
sudo ufw allow 21/tcp
# 開放被動端口範圍(50000-60000)
sudo ufw allow 50000:60000/tcp
# 啓用ufw(若未啓用)
sudo ufw enable
# 檢查狀態
sudo ufw status # 應顯示21/tcp和50000-60000/tcp
五、創建FTP用戶(安全考慮:禁止root直接登錄)¶
1. 創建FTP用戶¶
# 創建用戶,指定家目錄爲/home/ftpuser(可自定義),並禁止shell登錄
sudo useradd -d /home/ftpuser -s /sbin/nologin ftpuser
# 設置用戶密碼
sudo passwd ftpuser
# 按提示輸入密碼(需記憶,後續FTP登錄用)
2. 設置用戶目錄權限¶
# 確保目錄所有者爲ftpuser,且權限爲755(用戶可讀寫執行,組和其他用戶可讀執行)
sudo chown -R ftpuser:ftpuser /home/ftpuser
sudo chmod 755 /home/ftpuser
六、配置vsftpd服務¶
編輯配置文件¶
sudo vim /etc/vsftpd/vsftpd.conf
修改關鍵參數(初學者只需調整以下內容):¶
# 允許本地用戶登錄(即我們創建的ftpuser)
local_enable=YES
# 允許寫操作(上傳/下載)
write_enable=YES
# 限制用戶只能在自己的家目錄(防止越權訪問)
chroot_local_user=YES
# 允許在chroot環境下寫文件(否則無法上傳)
allow_writeable_chroot=YES
# 被動模式端口範圍(與防火牆開放的端口範圍一致)
pasv_min_port=50000
pasv_max_port=60000
# 被動模式IP(服務器公網IP或0.0.0.0允許所有IP,內網可填服務器IP)
pasv_address=服務器IP # 例如192.168.1.100
保存並重啓服務¶
# 保存配置文件後重啓vsftpd
sudo systemctl restart vsftpd
七、測試FTP連接¶
本地測試(服務器終端)¶
ftp localhost # 連接本地FTP服務器
# 輸入用戶名:ftpuser,密碼:你設置的密碼
# 登錄後嘗試上傳/下載文件,例如:
# put /tmp/test.txt # 上傳本地臨時文件
# get test.txt # 下載文件
遠程測試(使用客戶端工具)¶
- Windows/macOS:使用FileZilla、Xftp等工具,輸入:
- 主機:服務器IP
- 端口:21
- 用戶名:ftpuser
- 密碼:你設置的密碼 - 連接成功後:可在服務器目錄(
/home/ftpuser)下上傳、下載文件。
八、常見問題排查¶
1. 連接超時或拒絕連接¶
- 檢查防火牆:確認21端口和被動端口範圍已開放(
firewall-cmd --list-ports或ufw status)。 - 檢查服務狀態:
sudo systemctl status vsftpd確認服務運行正常。
2. 權限錯誤(550 Permission denied)¶
- 檢查目錄權限:
ls -ld /home/ftpuser,確保所有者爲ftpuser且權限爲755。 - SELinux問題(CentOS):臨時關閉SELinux測試:
sudo setenforce 0,若解決則需設置:sudo setsebool -P ftpd_full_access=on。
3. 被動模式無法連接¶
- 檢查端口範圍:確認
vsftpd.conf中pasv_min_port和pasv_max_port與防火牆開放端口一致。 - 測試被動端口:
telnet 服務器IP 50000(替換50000爲被動端口範圍中的端口)。
總結¶
通過以上步驟,你已成功搭建FTP服務。vsftpd的核心是安全限制用戶權限和目錄,後續可擴展匿名用戶、虛擬用戶或SSL加密(FTPS)等高級功能。日常文件傳輸使用本地用戶模式已足夠簡單可靠。