極速雲online 極速雲online 立即諮詢

華為雲帳號安全認證 香港雲主機配置FTP伺服器教學:使用vsftpd實現安全的文件傳輸

華為雲國際 / 2026-09-03 15:19:24

第一章:為什麼在香港雲主機上要談 FTP 安全

FTP 這個名字看似老派,卻仍在很多小型團隊、網站維護與資料交換流程中出現。它的問題也同樣明顯:傳統 FTP 以明文方式傳輸帳號與資料,容易被竊聽;再加上防火牆與 NAT 的影響,配置稍有不慎就會導致連不上、連上後傳輸卡住。若你的伺服器部署在雲端(例如香港雲主機),還需要把「雲防火牆、系統防火牆、路由器轉發」的因素一起納入設計。

用 vsftpd(Very Secure FTP Daemon)來做 FTP 伺服器,是不少人仍選擇它的原因:它相對輕量、配置成熟,並且能支援 TLS/SSL 加密、限制權限、隔離目錄與更細緻的登入策略。本文會以「能用」為起點,但更重視「安全與可維護」。

第二章:準備工作與環境假設

以下流程以一台香港雲主機為例。假設你已經:

  • 擁有可登入的 Linux 主機(常見如 Ubuntu / Debian / CentOS 系列)。
  • 能透過 SSH 登入,且知道你的公網 IP 或可用的網域。
  • 雲端控制台已能對外放行必要端口,或至少你能調整防火牆規則。
  • 你希望允許「特定使用者」上傳與下載,且盡量避免匿名登入。

FTP 常見端口:21(控制連線)與一組被動模式端口(例如 50000-51000)。若你打算開啟 TLS,21 與被動端口都會承載加密後的資料通道。

第三章:安裝 vsftpd

華為雲帳號安全認證 在不同發行版上安裝命令略有差異。你可以先更新系統套件,再安裝 vsftpd。

華為雲帳號安全認證 3.1 Ubuntu / Debian

sudo apt update
sudo apt install -y vsftpd

3.2 CentOS / Rocky / Alma

sudo dnf install -y vsftpd
# 或:sudo yum install -y vsftpd

安裝後可以先查看服務狀態,並啟用開機自動啟動(之後再做完整配置)。

sudo systemctl status vsftpd
sudo systemctl enable vsftpd

第四章:基本配置檔理解與啟用重啟思路

vsftpd 的主設定檔路徑通常在:

  • Ubuntu/Debian:/etc/vsftpd.conf/etc/vsftpd.conf(可能存在 /etc/vsftpd.conf)
  • CentOS 系列:/etc/vsftpd/vsftpd.conf

建議你把原檔先備份,因為 FTP 的排錯常常需要回到某個階段。

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak

接下來的策略是:每改一組設定就重啟一次服務,並用日誌觀察是否報錯。FTP 不像 Web 那樣直觀,日誌常常是你找到問題的捷徑。

華為雲帳號安全認證 第五章:建立本地用戶與目錄結構(避免把整台系統暴露給 FTP)

安全的第一步不是加密,而是「把你允許的範圍限制住」。不要讓 FTP 直接操作到系統整個檔案樹。

5.1 建立一個用戶群與 FTP 根目錄

sudo groupadd ftpusers
sudo useradd -m -s /sbin/nologin -g ftpusers ftpuser1
sudo passwd ftpuser1

這裡把登入 shell 設為 /sbin/nologin,讓該用戶無法 SSH 登入,只允許 FTP(vsftpd 仍可用其本地帳號驗證)。若你希望完全禁止 SSH,這樣設計更一致。

接著準備 FTP 的資料目錄。例如:/srv/ftp/ftpuser1

sudo mkdir -p /srv/ftp/ftpuser1
sudo chown -R ftpuser1:ftpusers /srv/ftp/ftpuser1
sudo chmod 750 /srv/ftp/ftpuser1

華為雲帳號安全認證 5.2 目錄隔離與「不能跑到外面」

vsftpd 可以透過 chroot_local_user 或相關配置,讓使用者被限制在自己的家目錄。這對防止路徑跳躍非常重要。

第六章:核心配置——關掉匿名、開啟本地登入、限制目錄

下面是一份可參考的基礎配置段落。請依你的實際路徑與系統位置調整。

6.1 建議的安全基線

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
# 讓使用者登入後盡量限制在自己的目錄
chroot_local_user=YES
allow_writeable_chroot=YES
# 被動模式(後面要配端口)
pasv_enable=YES
# 額外安全:不允許匿名/或限制一些行為可再擴展
# 禁止使用者可列出太多外部資訊
hide_ids=YES

幾個重點解釋:

  • anonymous_enable=NO:關閉匿名,避免被掃到帳號後嘗試。匿名 FTP 在現代環境中幾乎不該存在。
  • chroot_local_user=YES:把本地用戶鎖在家目錄或指定目錄。
  • allow_writeable_chroot=YES:因為 chroot 目錄通常需要滿足權限條件。若你希望用戶可上傳,就可能遇到權限限制,這個參數能讓流程可跑。但安全上仍要確保 chroot 目錄不讓使用者可隨意改變結構。
  • pasv_enable=YES:雲端與防火牆環境幾乎都需要被動模式才能穩定穿透。

6.2 設定使用者家目錄映射到 FTP 根

vsftpd 通常用系統的 /etc/passwd 內的家目錄。你可以把 ftpuser1 的家目錄設成你要的 FTP 路徑:

sudo usermod -d /srv/ftp/ftpuser1 ftpuser1

華為雲帳號安全認證 然後確認:

getent passwd ftpuser1

看到家目錄就是 /srv/ftp/ftpuser1,你就能更一致地管理 chroot。

第七章:被動模式端口與防火牆規則(最常卡住的一段)

如果你只開了 21,卻沒有正確設定被動模式端口範圍,客戶端很可能連上控制連線但資料傳輸失敗,或一直等待。

7.1 vsftpd 配置被動端口範圍

pasv_min_port=50000
pasv_max_port=51000

另外若你的雲主機有多個網卡,或你遇到 IP 解析問題,可以指定對外宣告的 IP:

pasv_address=你的公網IP

若你的主機只有單一對外 IP,通常不必指定,但遇到連線錯誤就要考慮。

7.2 系統防火牆開放規則

如果你使用 UFW(Ubuntu 常見),開放:

sudo ufw allow 21/tcp
sudo ufw allow 50000:51000/tcp

如果你使用 firewalld(CentOS 常見),則例如:

sudo firewall-cmd --permanent --add-service=ftp
sudo firewall-cmd --permanent --add-port=50000-51000/tcp
sudo firewall-cmd --reload

此外,很多雲服務還有「雲端控制台安全群組」。你也必須在那裡對外開放相同端口範圍。這點常被忽略。

第八章:啟用 TLS(FTPS)讓帳號與資料不再明文

若你真的在意安全,TLS 幾乎是必須的。vsftpd 支援使用 OpenSSL 的 FTPS(常見為 explicit FTPS)。

8.1 產生自簽憑證(先能跑起來,再考慮商用憑證)

sudo mkdir -p /etc/ssl/private
sudo openssl req -x509 -nodes -days 3650 \
  -newkey rsa:2048 \
  -keyout /etc/ssl/private/vsftpd.pem \
  -out /etc/ssl/private/vsftpd.pem

此處會生成同一個檔案包含私鑰與公鑰。正式環境你也可以使用 CA 簽發憑證。

8.2 在 vsftpd 啟用 TLS

ssl_enable=YES
allow_anon_ssl=NO
force_local_logins_ssl=YES
force_local_data_ssl=YES
# 憑證檔路徑,依你實際生成的位置
rsa_cert_file=/etc/ssl/private/vsftpd.pem
# 建議顯式 FTPS(explicit)
ssl_tlsv1=YES
# 若你的客戶端需要,另可搭配 TLS 版本限制(依系統策略)

你還可以限制允許的加密強度與協議版本,視合規要求調整。核心精神是:控制連線與資料通道都強制走 SSL,避免出現「控制加密、資料沒加密」這種尷尬情況。

第九章:完整示例配置(建議你以此為骨架再微調)

以下給出一份較完整、容易理解的示例。你可以打開你的 vsftpd.conf,把內容對照替換(記得先備份)。

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022

# 限制目錄
chroot_local_user=YES
allow_writeable_chroot=YES
hide_ids=YES

# 被動模式
pasv_enable=YES
pasv_min_port=50000
pasv_max_port=51000
# 若需要可指定對外宣告的 IP
# pasv_address=你的公網IP

# TLS
ssl_enable=YES
allow_anon_ssl=NO
force_local_logins_ssl=YES
force_local_data_ssl=YES
rsa_cert_file=/etc/ssl/private/vsftpd.pem

注意:有些發行版會預設加入 listen=YES 或其他設定。你不必盲目複製全部,理解你已經有的內容,再決定保留與否。

第十章:重啟服務與驗證連線

完成配置後,先檢查語法(若你的版本支援)。若不支援也沒關係,直接重啟再看日誌。

sudo systemctl restart vsftpd
sudo systemctl status vsftpd --no-pager

觀察日誌:

sudo journalctl -u vsftpd --no-pager -n 100

若要在檢查階段更細緻,你也可暫時提高 vsftpd 的 log level(例如在配置中調整 xferlog_enablelog_... 等),但最後仍建議回到合理值,避免磁碟被日誌填滿。

第十一章:用戶權限與可寫性策略(避免「能登入但不能上傳」)

很多人會在這裡遇到:能登入、能看到目錄,但上傳失敗。通常原因是:

  • 目錄權限不允許寫入。
  • chroot 目錄或其子目錄所有者不符合預期。
  • SELinux(若是 CentOS 系列開啟)阻擋 FTP 寫入。

以檔案系統權限為例,確認你的 FTP 根目錄可寫。

sudo chown -R ftpuser1:ftpusers /srv/ftp/ftpuser1
sudo chmod -R 750 /srv/ftp/ftpuser1

如果你希望該用戶能上傳、但其他用戶不能互相覆蓋,就要搭配:

  • 每個用戶各自的目錄(最簡單)。
  • 或共享目錄但設定 ACL(更進階)。

本文先採用最直觀:每人一個目錄。

第十二章:客戶端測試流程與常見錯誤定位

華為雲帳號安全認證 測試時,先用簡單方式確認「控制連線」與「資料連線」都正常,再談安全與效能。

12.1 測試連線類型

  • 若你啟用 explicit FTPS,客戶端要選 FTPS(Explicit)或 SSL/TLS,並通常要設定為「允許自簽憑證」以完成握手。
  • 若你改成 implicit,設定方式又不同,但本文以 explicit 為主。

華為雲帳號安全認證 12.2 常見錯誤:連上了但上傳卡住

最常見仍是被動端口、防火牆未開或 NAT 宣告 IP 不正確。你可以回看:

  • vsftpd 配置的 pasv_min_portpasv_max_port 是否正確。
  • 雲端控制台安全群組是否放行同一組端口。
  • 本機或系統防火牆是否放行。
  • 是否需要 pasv_address 指定公網 IP。

日誌通常會提示是哪個階段失敗。

12.3 常見錯誤:TLS 警告或憑證不被信任

自簽憑證在客戶端上必然會有警告。這不是「配置錯」而是「信任來源未建立」。你可以先接受警告完成測試;正式環境建議使用合規憑證(商用 CA 或你內部 PKI)。

第十三章:把 FTP 變成可長期運作的服務(運維層面的安全)

搭起服務只是第一步。要讓 FTP 在真實環境穩定運作,還要處理日常風險。

13.1 禁止弱密碼與限制登入次數(可結合系統策略)

FTP 的登入安全取決於帳號密碼政策。你可以:

  • 使用更強密碼,並限制登入錯誤次數(例如 PAM / fail2ban 這類工具)。
  • 針對臨時需求建立專用帳號,過期就刪除。

13.2 關閉不需要的功能

如果你的需求只需上傳下載,不一定要允許某些高風險操作。vsftpd 提供很多選項,你可以逐步收斂:

  • 限制目錄清單與符號連結行為。
  • 檔案上傳大小限制或速率限制(視版本支援)。

13.3 日誌管理

FTP 會持續產生日誌。若你不管理,磁碟很容易被填滿導致服務崩潰。建議:

  • 設定 logrotate。
  • 定期查看登入失敗與可疑連線。

第十四章:效能與可用性小技巧(不追求花哨,追求穩)

雲主機網路環境與用戶端差異可能導致 FTP 效能波動。你可以從幾個方向改善:

  • 確保被動端口範圍足夠且不與其他服務衝突。
  • 必要時調整 tcp_wrappers 或 IP 篩選(若你只對特定網段提供服務)。
  • 使用成熟的客戶端設定,避免反覆嘗試導致連線暴增。

但也要記住:FTP 在傳輸層面仍不是最理想方案。若你真正要高安全與可審計,SFTP(SSH File Transfer)往往更受推薦。只是本文聚焦於 FTP/FTPS 的實作,讓你在既有流程中也能把風險降下來。

第十五章:安全檢查清單(上線前務必做)

  • 已關閉匿名登入:anonymous_enable=NO
  • 本地用戶能登入,且目錄被 chroot:chroot_local_user=YES
  • 被動模式端口範圍已設定且雲端與系統防火牆同步開放
  • FTPS 已啟用,且強制控制與資料通道:force_local_logins_sslforce_local_data_ssl
  • 憑證檔權限妥當,避免私鑰被讀取:/etc/ssl/private/ 下通常需嚴格權限
  • 服務重啟後無明顯錯誤,日誌正常
  • 測試至少包含:上傳、下載、列目錄、斷線重連

第十六章:結語——你得到的不只是 FTP,而是可控的傳輸通道

把 FTP 安裝起來很快,但把它變得安全、穩定、好維護,需要一連串看似瑣碎卻關鍵的決策:關匿名、做目錄隔離、正確配置被動端口、再用 TLS 把傳輸加密。尤其在香港雲主機這種網路與防火牆因素更複雜的環境裡,配置錯一個細節就可能造成連線失敗或資料明文外流。

當你完成本文的流程,你會擁有一套可落地的 vsftpd FTPS 方案:使用者只在自己的空間活動,連線全程加密,且端口與防火牆可被清楚管理。接下來,你可以依團隊規範繼續收斂權限、完善日誌與告警,把它真正變成穩定的文件傳輸通道。

Telegram售前客服
客服ID
@cloudcup
联系
Telegram售后客服
客服ID
@yanhuacloud
联系