什麼是FTP?

FTP(File Transfer Protocol)即文件傳輸協議,是用於在網絡中傳輸文件的標準協議。在Linux服務器上搭建FTP服務,可以方便地實現本地計算機與服務器之間的文件上傳、下載和管理。

爲什麼選擇vsftpd?

vsftpd(Very Secure FTP Daemon)是Linux系統中最流行的FTP服務器軟件,以安全、穩定和高性能著稱,非常適合初學者使用。本文將以vsftpd爲例講解搭建過程。

一、準備工作

  1. 環境要求:一臺安裝了Linux系統的服務器(如CentOS 7/8或Ubuntu 20.04/22.04),且已具備管理員權限(能執行sudoroot命令)。
  2. 網絡要求:確保服務器能訪問互聯網(或內部網絡),並已配置好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       # 下載文件

遠程測試(使用客戶端工具)

  1. Windows/macOS:使用FileZilla、Xftp等工具,輸入:
    - 主機:服務器IP
    - 端口:21
    - 用戶名:ftpuser
    - 密碼:你設置的密碼
  2. 連接成功後:可在服務器目錄(/home/ftpuser)下上傳、下載文件。

八、常見問題排查

1. 連接超時或拒絕連接

  • 檢查防火牆:確認21端口和被動端口範圍已開放(firewall-cmd --list-portsufw 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.confpasv_min_portpasv_max_port與防火牆開放端口一致。
  • 測試被動端口telnet 服務器IP 50000(替換50000爲被動端口範圍中的端口)。

總結

通過以上步驟,你已成功搭建FTP服務。vsftpd的核心是安全限制用戶權限和目錄,後續可擴展匿名用戶、虛擬用戶或SSL加密(FTPS)等高級功能。日常文件傳輸使用本地用戶模式已足夠簡單可靠。

小夜