我目前必須使用非常有限的 FTP 用戶端/適配器將一些檔案上傳到遠端伺服器。我說有限,是因為生成的檔案最終以權限 000 儲存在遠端伺服器上,並且與其他一些客戶端不同,似乎無法配置權限應該是什麼。 (我知道 WinSCP 可以做到這一點。)
一位同事告訴我,FTP 與檔案權限完全無關,只是傳輸檔案資料。假設這是正確的,那麼像 WinSCP 這樣的客戶端如何設定遠端伺服器上檔案的權限?有人向我建議,客戶端可能透過 SSH 執行 chmod,即事後設定權限。
答案1
你的同事是對的,從某種意義上說,1985 年 10 月RFC 959似乎沒有提供專門為權限更改設計的命令。 RFC 959 確實提供了上傳檔案的指令規範(RFC 959 第 30 頁有「STOR」指令來儲存檔案),下載檔案(第30頁有「RETR」指令來檢索檔案),以及可選的副檔名,例如MKD(建立目錄)和RMD(刪除目錄)。 RFC 指出,「呼叫存取」「控制是伺服器 FTP 程序的特權」。 (但是,從我對 RFC 的閱讀來看,我認為所提到的「存取控制」更多的是支援使用使用者名稱登入的能力,而不是指使用 FTP 來更改權限的想法檔案。)
RFC 959 第 47 頁包含 RFC 959 的 FTP 規範中內建的命令清單。我也瀏覽過IANA「FTP 命令與擴充」註冊表,2010 年 3 月的RFC 5797。我不記得任何這些命令提供了更改權限的方法,除了一個:
RFC 959 第 33 頁有“SITE”指令。 (有些FTP 用戶端有一個名為「QUOT」或「quote」的本機命令,最終會向FTP 伺服器發送SITE 命令。)基本上,SITE 命令的標準是將文字傳送到FTP 伺服器,然後將文字傳送到FTP 伺服器。使用此命令可以執行更改檔案權限、搜尋網站中的檔案或重新啟動 FTP 伺服器等操作。理論上,發送命令「HELP SITE」將顯示透過網站命令提供的某些功能的詳細資訊。 RFC 959 第 33 頁甚至指定了這一點:
“這些服務的性質及其語法規範可以在對 HELP SITE 命令
的回覆中說明。”
這個理論面臨的挑戰在於,「HELP SITE」命令實際上會顯示來自 FTP 伺服器的文本,並且不完整的文檔實際上可能無法記錄所有可用的可能性。
基於Jonathan Leffler 對 Knoni99 關於「FTP 中的 chmod 文法」問題的回答,我們可以看到經典的「ncftp」程式確實使用了「SITE CHMOD」指令來實作ncftp的「chmod」指令,並不是所有的FTP伺服器都支援該功能。
當我完成這個答案的 FTP 部分時,還有一個附註:FTP 非常容易嗅探。基本上,我的意思是 FTP 使用“明文”執行操作。如果您使用「封包嗅探」(「封包擷取」)軟體,例如 tcpdump 或 Wireshark,您可以看到 FTP 發生了什麼。如果您嘗試傳輸一個小文字文件,並查看發生的網路流量,結果可能很容易理解。使用這種方法,您可以更改權限並查看軟體實際使用的命令。我知道這可能會比較耗時,這就是為什麼這個答案提供了許多更容易獲得的詳細信息,但如果您開始想知道有關 FTP 期間發生的任何其他詳細信息,了解此過程可能會有所幫助通訊。
(我編輯了這個答案以添加對問題另一部分的答案。)
有人向我建議,客戶端可能透過 SSH 執行 chmod,即事後設定權限。
我認為這是一個不錯的猜測,儘管我認為對於 FTP 來說這並不準確。實際上,這個猜測可能準確地描述了使用 SFTP 和 SCP 協定時所使用的精確過程。由於這兩個協定都基於 SSH,因此可以使用與其餘加密連線相同的 SSH 連線來發送「chmod」命令。根據我對這些協議的閱讀,我確實相信這實際上正是使用 SFTP(以及 SCP,如果也支援設定檔案權限)時通常設定檔案權限的方式。
然而,正如我之前所描述的,FTP 協定通常處理此問題的方式是完全不同的。如果您使用的是純文字的 FTP 協議,那麼技術上是可行的,但不太可能使用 SSH 來跟進。 (如果軟體有足夠的能力支持 SSH,那麼它通常也支援 SFTP 或 SCP 或兩者都支援。因此,通常設計對舊 FTP 協定的支持,以便加密通訊的複雜性不會被用作過程。)