WordPress

FTP 跟 SFTP 該選哪個?主機後台看得到,連線設定要跟著調

多數人以為 FTP 跟 SFTP 的差別只在傳輸速度或介面好不好用,其實最根本的差距,在於密碼與檔案內容有沒有被加密,連接埠與認證方式也跟著不同。

如果主機商的後台同時列出 FTP 和 SFTP 兩個連線選項,大部分人會直覺選熟悉的那一個。問題是,用 FTP 登入時輸入的帳號密碼是用明碼傳送的,連正在上傳、下載的 wp-config.php 裡的資料庫密碼也一樣,只要有人在同一段公共網路上稍微攔截封包,這些內容就等於攤在眼前。FTP(File Transfer Protocol)是 1985 年就定案的老牌檔案傳輸協定,設計目的單純是把檔案送上遠端主機;SFTP(SSH File Transfer Protocol)則是架在加密的 SSH 連線之上,同樣能上傳下載檔案,差別在於整個過程都被封裝進同一條加密通道。台灣的 TWCERT/CC 甚至把 FTP 這類「公開曝露的服務」跟遠端桌面、VNC 並列,建議這類服務啟用多因素身份驗證並記錄登入活動。

弄懂這兩者的差異出在哪個環節,才知道該不該向主機商要求開通 SFTP、換過去之後還有什麼設定不能省。

FTP 是什麼?

很多人第一次接觸「把檔案傳到網站」,是照著某篇主機商教學,打開 FileZilla 之類的用戶端輸入帳號密碼。這個當下用的多半就是 FTP。它負責把整個網站需要的東西搬上遠端主機:安裝 WordPress 核心程式、上傳外掛與佈景主題的壓縮檔,或是直接打開某個檔案改幾行程式碼,都靠它。

FTP 在 RFC 959 裡正式定義,發布於 1985 年 10 月,作者是 Jon Postel 與 Joyce K. Reynolds,同時也是 Internet Standard STD 9 的一部分。這份規範開宗明義寫下 FTP 的四個設計目標:促進檔案分享、鼓勵透過程式間接使用遠端電腦、屏蔽不同主機檔案系統之間的差異,以及可靠且有效率地傳輸資料。換句話說,FTP 從一開始要解決的問題是怎麼把檔案送到另一台電腦,不是怎麼確保沒有人偷看。

這份規範還有一個底層設計,對後面的加密問題影響很大:FTP 把控制指令(登入、切換目錄、下指令要對方做什麼)跟實際傳輸的資料,拆成兩條獨立連線,指令走一條,檔案內容走另一條,各管各的。也正因為這套設計幾十年沒有大改,再加上許多老主機面板、教學文章長年預設用它,FTP 到現在仍然是不少人第一個接觸、也最容易繼續沿用下去的選項。

SFTP 建立在 SSH 加密通道之上

SFTP 聽起來像是 FTP 加了個 S 字、順手升級的版本,實際上兩者的技術路線完全不同。SFTP 全名是 SSH File Transfer Protocol,不是 Secure FTP 的簡稱,它是 SSH(Secure Shell)這個加密協定家族底下的一個子系統,平常用來遠端登入伺服器下指令的那套 SSH,傳檔案時走的正是同一套加密機制。

因為指令與檔案資料都封裝進同一條 SSH 加密通道,SFTP 連線只需要一個埠,走 22 號埠,跟伺服器管理用的一般 SSH 連線共用,不像 FTP 得另外處理資料傳輸的問題。

SFTP 的身世,有一個技術冷知識特別能看出來。定義 SFTP 協定細節的草案文件(draft-ietf-secsh-filexfer)前後修訂到第 13 版,定義了版本 3 到版本 6 的規格,卻始終停留在 IETF「work in progress」的草案狀態,最後一版落在 2006 年,沒有像 FTP 的 RFC 959 那樣正式定案成標準文件。但這不影響它成為業界實際採用的做法,像 OpenSSH 就是照其中 draft-02 定義的版本 3 實作,業界一樣把它當成標準在用。

FTP 從設計之初就不打算加密資料

FTP 的控制連線與資料連線裡,從頭到尾都沒有加密這個環節——這不是設定沒開對,是規範本身從 1985 年定案的那一刻起就沒把加密算進去。

登入時輸入的帳號密碼是明碼傳送,只要有人在傳輸路徑上攔截封包,就能直接看到完整的帳密。不只密碼,傳輸中的檔案內容本身也是明碼,上傳或下載 wp-config.php 的當下,裡面存放的資料庫帳號密碼等於一起用明碼傳出去。

WordPress 開發者文件裡的資安強化指南(Hardening WordPress)建議,連線到伺服器時只要主機商有提供,就應該改用 SFTP 加密;使用 SFTP 跟 FTP 的操作方式一樣,差別在於密碼與其他資料在傳輸過程中會被加密,代表密碼不會用明碼傳送,也無法被攻擊者攔截。同一份文件也直接點名網路環境的風險,像是在網咖用未加密的連線(不論有線無線)傳送密碼,這樣的網路不能算是受信任的網路。照這個標準來看,咖啡廳、機場這類公共 Wi-Fi 也屬於同一種不受信任的環境。

FTP 以明碼傳送帳號密碼與 wp-config.php,攔截封包就看得到;SFTP 把同樣內容封裝進 SSH 加密通道
同一趟上傳,FTP 的帳密與檔案內容都是明碼,SFTP 則全程走 SSH 加密通道,密碼不會用明碼傳送。

台灣的 TWCERT/CC(台灣電腦網路危機處理暨協調中心)在防護建議中,把 FTP 跟遠端桌面協定、VNC 並列,列為「任何公開曝露的服務」的例子,建議這類服務啟用多因素身份驗證並記錄系統登錄活動;同一份防護建議也要求服務連線必須加密。FTP 會不會被盯上,不是猜測,是 TWCERT/CC 已經點名的風險項目。

FTP 與 SFTP 連接埠不同,防火牆設定也要跟著調整

FTP 跟 SFTP 除了加不加密,連走的連接埠與連線通道數量都不一樣,這也是為什麼很多人反映 FTP 連線設定比較容易出狀況。

FTP 固定用 21 號埠傳送指令,另外還要再開一條資料連線來傳輸檔案內容:主動模式由伺服器主動連回用戶端指定的資料埠,被動模式則動態協商出一個高位埠,兩條通道各走各的。這套控制連線與資料連線分離的設計,寫在 RFC 959 裡從一開始就是這樣安排。防火牆或 NAT 環境如果沒有正確處理這第二條資料連線,FTP 傳輸就容易中斷或連不上,這是不少人維護老主機時碰過的困擾。

SFTP 因為是 SSH 的子系統,指令與檔案資料擠在同一條連線裡,固定走 22 號埠,不必額外協商資料埠,設定起來自然單純不少。

FTP 用 21 號埠控制連線另加一條資料連線,SFTP 只走 22 號埠單一連線,防火牆設定較單純
FTP 要處理控制與資料兩條連線,資料連線沒被防火牆或 NAT 正確處理就容易中斷;SFTP 固定走 22 號埠一條連線。

FTP 認證只能用密碼,SFTP 能換成金鑰

登入方式的安全上限,是另一個容易被忽略的差異。

FTP 原始規範裡,登入驗證靠的是 USER 與 PASS 這一組指令,也就是帳號加密碼,沒有其他驗證方式可以選。SFTP 因為架在 SSH 上,除了沿用帳號密碼登入,也能改用 SSH 金鑰驗證:先產生一組公鑰與私鑰,公鑰放在主機那端,私鑰留在自己的電腦裡,登入時靠這組金鑰互相驗證身份,不必每次輸入密碼。

金鑰登入的好處不只是省下打密碼的步驟。密碼從頭到尾不會出現在傳輸過程裡,自然也不怕被竊聽或暴力破解猜中,對安全等級要求比較高的場景來說,是常被優先採用的做法。

FTP 登入只有 USER 與 PASS 帳密,SFTP 可改用 SSH 金鑰,私鑰留在電腦、公鑰放在主機互相驗證
FTP 只能用帳號加密碼登入,SFTP 還能改用 SSH 金鑰,密碼從頭到尾不出現在傳輸過程裡。

FTPS 這個名稱常被誤認成 SFTP

FTPS 這三個字看起來像 SFTP 的別名,實際上是兩套完全不同的架構,選錯很容易讓人誤以為自己已經在用加密連線。

FTPS 全名 FTP Secure,也叫 FTP over SSL/TLS,做法是在既有的 FTP 協定外面加掛一層 SSL/TLS 加密;SFTP 則從頭到尾是另一套協定,架在 SSH 之上,兩者的技術血統從一開始就不同。因為 FTPS 還是沿用 FTP 原本控制連線與資料連線分離的架構,只是外面多包一層加密,實際安全程度會受伺服器與用戶端的配置方式影響,不像 SFTP 單一加密通道那樣一致。

FTP、FTPS、SFTP 在技術基礎、加密方式、連線架構與安全程度上的差異比較
FTPS 是在 FTP 外面加掛 SSL/TLS,SFTP 則是 SSH 底下的另一套協定,兩者拼字相近但不是同一件事。

主機商列出的連線選項裡,FTPS 和 SFTP 拼字相近,判斷要用哪一種,得看清楚字面是哪三個字母,別因為名稱都帶個 S,就當成同一件事。

主機控制台通常看得出 SFTP 有沒有開放

主機商有沒有開放 SFTP,通常不必特地打電話問,你只要先到後台看一眼多半就有答案。

不分品牌,常見的 cPanel、Plesk 或主機自有的控制面板,通常會在 FTP 帳號或 SSH 存取設定頁裡,一併列出 SFTP 的連線資訊,包括主機位址、22 號埠、帳號密碼或金鑰設定。如果你把整個面板翻過一遍都找不到 SSH 或 SFTP 相關的字樣,才需要主動聯絡主機商客服,詢問是否提供、或是不是要額外申請開通。

很多人以為只要 FTP 連得上主機,就等於在用安全連線,但這其實是兩回事。FTP 跟 SFTP 是分開的兩個選項,你要在用戶端軟體裡明確選對協定,不能只看連得上就假設安全性沒問題。

從 FTP 切換到 SFTP,改的只是連線協定與連接埠

把 FTP 換成 SFTP,實際上要調整的地方比你想像中少,多半停留在連線設定,不牽涉重灌任何東西。

多數現成的 FTP 用戶端軟體,像 FileZilla、Cyberduck 這類同時支援雙協定的免費工具,介面操作方式一樣,差別只在連線設定裡把協定選項從 FTP 改成 SFTP,連接埠從 21 改成 22。帳號密碼通常沿用主機商原本提供的資訊;如果主機商鼓勵你改用金鑰登入,就另外照它的說明設定金鑰,這只是協定層級的切換,不必逐欄位重新設定整個連線。

用戶端從 FTP 切換到 SFTP,只把協定改成 SFTP、連接埠由 21 改成 22,主機與帳密沿用
切換到 SFTP 多半只動協定與連接埠兩欄,主機與帳密通常沿用(示意畫面,非特定軟體介面,主機與帳號皆為示範值)。

換過去之後,因為多了一層加密運算,連線或大量傳輸檔案時可能感覺比 FTP 略慢一點,這是用安全性換來的合理取捨,不是連線出了問題。

傳輸之後,wp-config.php 的權限同樣不能放鬆

換成 SFTP,只解決了傳輸途中被攔截的風險;檔案本身放在伺服器上,權限設定是另一層獨立的防線,兩者要一起顧,做了一件不代表全部安全。

同一份 WordPress 資安強化指南建議,一般資料夾的權限設在 755、一般檔案設在 644,這是多數網站檔案適用的基準。wp-config.php 因為存放資料庫帳號密碼等機敏設定,建議設成比一般檔案更嚴格的權限,通常是 400(只有擁有者能讀取)或 440(擁有者與同群組可讀)。

SFTP 保護傳輸途中,檔案權限保護伺服器上的檔案:資料夾 755、檔案 644、wp-config.php 400 或 440
SFTP 解決的是傳輸途中被攔截的風險,檔案放上伺服器後還要把權限設好,wp-config.php 要比一般檔案更嚴格。

除了調整權限,同一份指南還提到兩個做法可以進一步降低風險:一是把 wp-config.php 移到 WordPress 安裝目錄的上一層;二是在 .htaccess 最上方加一段規則,擋掉外部直接存取這個檔案:

<Files "wp-config.php">
Require all denied
</Files>Code language: plaintext (plaintext)

這段規則的作用,是讓任何人直接在瀏覽器輸入這個檔案的網址都拿不到內容,等於在權限之外再多一道防線。

把 FTP 換成 SFTP,解決的是傳輸途中會不會被攔截這一段;連接埠、認證方式、傳輸後的檔案權限,則是另外幾道各自獨立、卻同樣重要的關卡。這幾件事沒有哪一項可以取代另一項,主機商的後台只要看得到 SFTP 這個選項,就幾乎沒有理由繼續讓帳密和 wp-config.php 用明碼在網路上跑。

常見問答

本區問答由 AI 依文章內容自動整理,僅供快速參考,正式內容仍以全文為準。

SFTP 跟 FTP 最大的差別是什麼?

SFTP 跟 FTP 最根本的差別在於有沒有加密。FTP 傳送帳號密碼與檔案內容都是明碼,有人攔截封包就看得到;SFTP 把指令與檔案資料封裝進同一條 SSH 加密通道,密碼不會用明碼傳送。

SFTP 使用哪個連接埠?

SFTP 固定走 22 號埠,跟一般 SSH 連線共用,指令與檔案資料在同一條連線裡,不必額外協商資料埠。FTP 則用 21 號埠傳指令、另開一條資料連線,防火牆或 NAT 沒處理好就容易中斷。

SFTP 可以用金鑰取代密碼登入嗎?

SFTP 可以改用 SSH 金鑰登入,公鑰放在主機端、私鑰留在自己的電腦,靠這組金鑰互相驗證身份,不必每次輸入密碼。密碼不會出現在傳輸過程裡,FTP 則只能用帳號加密碼登入。

FTPS 跟 SFTP 是同一種東西嗎?

FTPS 跟 SFTP 不是同一種東西。FTPS 是在 FTP 外面加掛一層 SSL/TLS 加密,仍沿用控制與資料連線分離的架構;SFTP 是架在 SSH 之上的另一套協定,全程走單一加密通道。

從 FTP 換成 SFTP 要改哪些設定?

從 FTP 換成 SFTP,多半只要在用戶端軟體把協定改成 SFTP、連接埠從 21 改成 22,帳號密碼通常沿用主機商原本提供的資訊。換過去後多了加密運算,傳輸可能略慢一點,這不是連線出了問題。

資料來源
  1. RFC 959: File Transfer Protocol (FTP) — RFC Editor
  2. draft-ietf-secsh-filexfer-13: SSH File Transfer Protocol — IETF
  3. RFC 4253: The Secure Shell (SSH) Transport Layer Protocol — RFC Editor
  4. RFC 4252: The Secure Shell (SSH) Authentication Protocol — RFC Editor
  5. RFC 4217: Securing FTP with TLS — RFC Editor
  6. OpenSSH Specifications — OpenSSH
  7. Hardening WordPress — WordPress
  8. 常見勒索軟體的入侵管道與防護建議 — TWCERT/CC