目錄
文件傳輸協議(FTP)是一種透過網路上使用 TCP/IP 協議在電腦之間共享文件的方法。它採用客戶端 – 伺服器框架和安全套接層(SSL)來確保資料傳輸的安全。
FTP 與 hypertext transfer protocol(HTTP)和簡單郵件傳輸協議(SMTP)相似,但處理的資料類型不同。它對於管理遠程系統,如虛擬私人伺服器(VPS),至關重要。
在本文中,我們將解釋如何在 Ubuntu VPS 上架設 FTP 伺服器。我們將使用 vsftpd 伺服器,這是 UNIX 系統上最快速和最安全的 FTP 伺服器之一。
設定 FTP 伺服器的先決條件
在開始執行這些步驟之前,請購買具有廣泛軟體支援的 Ubuntu VPS 託管計劃(例如 TAKI Cloud),以避免不相容問題。 請注意,您的伺服器必須運行 Ubuntu,因為命令因 Linux 發行版而異。
然後,使用 SSH 用戶端(例如 PuTTY、Terminal 或 TAKI Cloud 的瀏覽器 Terminal – 控制台)連線到您的伺服器。 TAKI Cloud 用戶可以在會員服務管理介面的 VPS 說明選單中找到 IP 位址和登入詳細資訊。
預設情況下,您將以 root 身分連線。 我們建議建立一個具有超級使用者權限的新帳戶,以避免意外執行破壞性命令。 以下是命令:
adduser account
usermod -aG sudo account
將帳戶替換為您想要的使用者名稱。 然後,透過執行以下命令切換到新用戶並繼續設定:
su account
cd
如何在 Ubuntu 上設定 FTP 伺服器
在本節中,我們將解釋在 Ubuntu 上設定 FTP 伺服器的六個步驟。 如果你在過程遇到困難,您可以在以下留言或是在我們會員平台發工單詢問。
1. 安裝 vsftpd
- 首先安裝 vsftpd,它負責在您的 VPS 上啟用 FTP 服務。 步驟如下:
sudo apt-get update
- 等待更新完成,然後使用以下指令繼續安裝 vsftpd:
sudo apt-get install vsftpd
- 系統將提示您一條確認訊息。 輸入 Y 並按 Enter 鍵繼續安裝 vsftpd 守護程序。
- 安裝完成後,備份原始文件,以便可以從空白設定檔開始:
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.original
2. 允許來自防火牆的 FTP 流量
安裝完成後,配置系統防火牆規則以允許 Ubuntu FTP 伺服器通過網路進行通訊。您可以使用 Ubuntu Uncomplicated Firewall(UFW)完成此操作。以下是步驟:
- 首先使用以下命令檢查您的伺服器上是否已安裝防火牆:
sudo ufw status
- 如果看到“ufw:command not found error”,則表示未安裝 Ubuntu 防火牆。依次運行以下命令來下載並啟用它。如果已經配置,則跳過此步驟:
sudo apt-get install ufw
sudo ufw enable
- 執行以下命令來驗證防火牆狀態:
sudo ufw status
- 啟動後,請單獨執行以下命令以確保允許 FTP 流量:
sudo ufw allow OpenSSH
sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
sudo ufw allow 990/tcp
sudo ufw allow 40000:50000/tcp
- 再次執行以下命令以驗證您是否已正確新增新的防火牆規則:
sudo ufw status
檢查 Terminal 輸出,確保打開這些連接 port 以使 FTP 伺服器正常運作:
- 如果您希望透過 SSH 存取伺服器,則需要 OpenSSH。 有時,此選項預設為啟用。
- 用於 FTP 流量的連接 port 20 和 21。
- 連接port 40000:50000 保留用於稍後在設定檔中設定的被動連接埠範圍。
- 連接port 990 啟用後允許 TLS 加密。
3. 建立使用者目錄
啟用協定通訊後,建立將使用 FTP 存取的新使用者。 為此,請執行以下命令:
sudo adduser taki
將占位符替換為您想要的名稱。然後,輸入用戶密碼並填寫所有必需的詳細信息。
在配置 FTP 時,出於安全考慮,理想情況下應將其訪問限制為一個特定的目錄。出於這個原因,vsftpd 默認使用 chroot jails 將本地用戶限制在其家目錄中。
然而,vsftpd 安全性可能會阻止非 FTP 用戶將文件寫入其家目錄。為解決此問題,創建一個作為 chroot 的 FTP 目錄,其中包含一個用於傳輸文件的可寫文件夾。以下是操作步驟:
- 使用以下命令建立 FTP 資料夾。 相應地替換帳戶名:
sudo mkdir /home/taki/ftp
- 然後,使用以下命令設定所有權:
sudo chown nobody:nogroup /home/taki/ftp
- 刪除寫入權限:
sudo chmod a-w /home/taki/ftp
- 現在,使用以下命令來驗證權限:
sudo ls -la /home/taki/ftp
- 輸出應如下所示:
total 8
dr-xr-xr-x 2 nobody nogroup 4096 Oct 8 11:32 .
drwxr-xr-x 3 taki taki 4096 Oct 8 11:32 ..
- 接下來,建立目錄來保存檔案並分配所有權:
sudo mkdir /home/taki/ftp/files
sudo chown taki:taki /home/taki/ftp/files
- 最後,將一個測試文件添加到目錄中,我們稍後將用它來測試所有內容:
echo "vsftpd sample file" | sudo tee /home/taki/ftp/files/sample.txt
4. 設定 vsftpd
接下來,配置 vsftpd 和 FTP 訪問。在這個示例中,我們將允許單個用戶使用本地 shell 賬戶進行連接。為此,vsftpd.conf 配置文件中已經設置了兩個關鍵配置。以下是具體步驟:
- 使用 nano 命令開啟 vsftpd 設定檔:
sudo nano /etc/vsftpd.conf
- 檢查以下設定是否存在:
# Allow anonymous FTP? (Disabled by default).
anonymous_enable=NO
#
# Uncomment this to allow local users to log in.
local_enable=YES
- 啟用 write_enable 參數。 為此,請透過刪除井號 (#) 來取消註解:
write_enable=YES
- 取消註解 chroot_local_user 並將值變更為 YES 以限制 FTP 使用者只能存取允許目錄中的檔案。 在該文件中,有兩個這樣的參數,您必須對這兩個參數執行相同的操作。
chroot_local_user=YES
- 接下來,在檔案底部的 local_root 目錄路徑中新增 user_sub_token 設定。 它將把設定檔應用到目前使用者和您稍後新增的其他帳戶:
user_sub_token=$USER local_root=/home/$USER/ftp
- 在設定檔底部指定連接 port 數量,以確保您的 FTP 伺服器可以接受大量連線。 您的防火牆規則必須允許它們:
pasv_min_port=40000 pasv_max_port=50000
- 為了提高安全性,僅允許設定檔中指定的使用者進行FTP存取。 為此,請在底部添加以下參數。 確保將 userlist_deny 標誌設為 NO。
userlist_enable=YES userlist_file=/etc/vsftpd.userlist userlist_deny=NO
- 完成後,按 Ctrl + X、Y 和 Enter 確認文件變更。
- 調整配置後,建立使用者清單並將您的 FTP 帳戶新增至檔案。 在終端機中執行以下命令:
echo "taki" | sudo tee -a /etc/vsftpd.userlist
- 透過執行以下命令驗證使用者是否處於活動狀態。 終端機應輸出您新增的帳戶名,在我們的範例中為「taki」:
cat /etc/vsftpd.userlist
- 使用以下命令重新啟動 FTP 守護程式以套用變更:
sudo systemctl restart vsftpd
5. 保護 FTP 伺服器的安全
由於 FTP 預設不是加密,因此請安裝 SSL/TLS 憑證以保護檔案傳輸。 步驟如下:
- 為 Ubuntu FTP 伺服器頒發 SSL 憑證。 在我們的例子中,我們將使用以下指令建立一個有效期為 365 天的金鑰,並使用 2048 位元 RSA 私鑰:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
- 在提示欄位中輸入相應的個人詳細資料。
- 建立完證書後,再次開啟 vsftpd 設定檔:
sudo nano /etc/vsftpd.conf
- 向下捲動到文件末尾,您應該會找到這兩行以 rsa 開頭的行。 如果它們未註釋,請添加井號:
# rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
# rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
- 現在,將設定檔指向新建立的憑證。 在兩行下面新增以下目錄:
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
- 接下來,啟用 SSL 證書,並透過新增以下行將連線限制為僅具有活動證書的用戶端:
ssl_enable=YES
- 然後,新增以下行以拒絕透過 SSL 的匿名連線:
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
- 透過新增以下參數使伺服器能夠使用 TLS:
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
- 接下來,停用 SSL 重複使用以防止 FTP 用戶端崩潰,並使用高加密密碼套件將金鑰長度設為 128 位元或更長。 透過新增以下行來完成此操作:
require_ssl_reuse=NO
ssl_ciphers=HIGH
- 按 Ctrl + X、Y 和 Enter 儲存檔案。
- 最後重新啟動 vsftpd 以套用新配置:
sudo systemctl restart vsftpd
您現在已經在 Ubuntu VPS 上配置了 FTP 伺服器並可以透過 SSL/TLS 協定工作。
6. 使用 FileZilla 來測試連接
最後一步是測試您的 Ubuntu FTP 伺服器是否正常且安全地運作。 您可以使用支援加密的 FTP 用戶端來執行此操作。 在本教程中,我們將使用 FileZilla。
在本機系統中下載並安裝 FileZilla FTP 用戶端後,請依照下列步驟操作:
- 啟動 FileZilla 並點擊右上角「檔案」下方的「網站管理員」圖示。
- 將出現一個新視窗。 點擊“新網站”按鈕並輸入您的 Ubuntu FTP 伺服器詳細資訊。
- 在對應欄位中輸入新建立的 Ubuntu FTP 伺服器資訊。 由於我們將其配置為使用 TLS,因此請選擇「使用基於 TLS 的明確 FTP」選項。 最終配置應如下所示:
- 點擊“連線”,將出現一個要求您輸入 FTP 使用者密碼的畫面。 填寫憑證並點選「確定」。
- 最後,驗證您的 Ubuntu VPS FTP 伺服器的 SSL 憑證。 確認後,帶有測試檔案的根目錄應該會出現在螢幕上。
就這樣! 現在,您可以執行從電腦到 Ubuntu FTP 伺服器的各種檔案傳輸了。
結論
設定 Ubuntu FTP 伺服器可以簡化遠端伺服器和本機之間的檔案傳輸,提高開發效率。 此外,它還利用 SSL/TLS 和 TCP/IP 協定來增強安全性並確保可靠的連線。
在本教程中,我們透過六個步驟探索如何使用 vsftpd 在 Ubuntu VPS 上設定 FTP 伺服器。 這裡是一個回顧:
- 在 Ubuntu 伺服器上安裝 vsftpd 並備份原始設定檔。
- 允許 FTP 連線穿過防火牆。
- 建立僅供指定帳戶存取的使用者目錄。
- 配置 vsftpd 設定。
- 使用 SSL/TLS 保護 FTP 伺服器的安全性。
- 測試您與 FileZilla 的 FTP 連線。
在設定 FTP 之前,請記住透過 SSH 連接到您的 VPS 並建立新的超級使用者帳戶。 如果你在過程遇到困難,您可以在以下留言或是在我們會員平台發工單詢問。