共用 SFTP 入口上的三類隔離痛點
真正危險的往往是可寫入的 chroot 根、仍帶互動式 Shell 的「SFTP」帳號、CI 與人員共用同一組金鑰。internal-sftp 與 ChrootDirectory 要能成立,路徑擁有者與權限必須滿足紅線;遞迴亂設 chmod -R 777 會破壞模型。
痛點 1:chroot 及其上層目錄須由 root 擁有且不可被租戶寫入;否則子系統拒入或存在替換連結風險。
痛點 2:缺少 ForceCommand internal-sftp 或 Match 順序錯誤時,仍可能取得 Shell、scp 或轉送通道。
痛點 3:金鑰與記錄無法對應到租戶。authorized_keys 若不可讀,容易退回弱密碼;眾人共用服務帳號則稽核對不上人。應依信任邊界拆分帳號,金鑰註解寫明系統與責任人,並與併發與 keepalive 預算說明中的連線上限協調,避免單一租戶以大量小檔案耗盡 inode。
僅 SFTP 與 Shell:何時值得上 chroot
小團隊若屬同一信任域,可用「分帳號+路徑前綴」;外包、CI 機器人等跨邊界情境較適合 chroot。代價是維護 root 骨架目錄與金鑰流程。
僅 SFTP:nologin Shell、ForceCommand internal-sftp、關閉轉送;對外說明禁止 scp。管理用 Shell另設 Match 或另主機名。
chroot 與原子發佈互補:chroot 限橫向;暫存+符號連結保讀取一致性。並搭配通訊協定層權限稽核與Mac 用戶端與 CI 選型說明。
決策矩陣:隔離強度與維運成本
| 方案 | 最適用 | 主要風險 | 最小控制面 |
|---|---|---|---|
| 共用目錄無 chroot | 單一信任域、小團隊 | 一鑰外洩橫向移動 | 群組權限、獨立 CI 帳號、集中記錄 |
| 僅 SFTP、無 chroot | 內網開發者、IAM 強 | 路徑穿越設定失誤 | 週期 find 稽核、預設 umask |
| chroot + internal-sftp | 外包、合規分區 | 擁有者錯誤導致無法登入 | root 擁有鏈、僅葉節點可寫 |
| 每租戶獨立主機 | 強合規或吵鄰問題 | 成本與修補面 | 映像基線、自動修補、備份金鑰 |
五步落地:OpenSSH Match 設定骨架
變更前備份設定與 sshd -T;macOS 大版本升級後重新 diff。
- 建立 chroot 父路徑,祖先全為 root、755,不可群組寫入。
- jail 內
upload/屬租戶,chroot 根本身不可寫。 Match:ForceCommand internal-sftp、ChrootDirectory、關轉送;可選 jail 外AuthorizedKeysFile。sshd -t、reload、sftp -vvv測試;ssh執行應被拒。- 暫開詳細認證記錄後收回。
第三步後做反向測試(scp、遠端執行、轉送)均應失敗;預期寫入供應商說明。第五步對接監控:認證失敗、子系統錯誤、磁碟與 inode。
# 片段示例 —— 用户名/路径/组请按实际替换;改前 sshd -t
Match Group sftponly
ChrootDirectory /srv/sftp/%u
ForceCommand internal-sftp
AllowTCPForwarding no
X11Forwarding no
PermitTunnel no
AuthorizedKeysFile /etc/ssh/authorized_keys/%u
# 宿主机侧(jail 外)示意:
# mkdir -p /srv/sftp/vendorA/upload
# chown root:wheel /srv/sftp /srv/sftp/vendorA
# chmod 755 /srv/sftp /srv/sftp/vendorA
# chown vendorA:vendorA /srv/sftp/vendorA/upload
# chmod 750 /srv/sftp/vendorA/upload
將 chown/chmod 寫入 Runbook;臨時放寬須設回收提醒。演練回滾與 reload。
可引用數字與不變量
chroot 上層目錄常見基線為 755,租戶資料目錄可用 750 限制群組讀取中繼資料。禁止對 chroot 根授予群組寫入或其他寫入——OpenSSH 文件對此有明確要求。若合規要求目錄內某 subtree 世界可讀,應限於子目錄,而非放寬整條指向根檔案系統的路徑鏈。
磁碟配額不能替代連線配額;單一租戶上傳大量小檔可能在仍有「剩餘 GB」時先耗盡 inode,應雙指標監控。單一物件超過約 5 GiB 時,應結合校驗與暫存策略(見原子發佈文)而非一味拉長單次 SFTP 逾時。
對外部租戶建議約 90 天輪換金鑰,筆電遺失立即撤銷。CI 使用短生命週期、單一流水線專用金鑰,公開金鑰變更走程式碼審查。
認證與子系統記錄至少保留 30 天以利關聯事件;受監管產業按需延長。在 authorized_keys 註解欄位寫明責任人/系統,便於記錄對齊。
FAQ、限制與託管遠端 Mac
- 一啟用 chroot 就立刻斷線?逐層檢查路徑擁有者/權限、是否強制 internal-sftp、金鑰檔 sshd 是否可讀。
- CI 與人能共用同一 chroot 帳號嗎?盡量避免,拆分後金鑰輪換與併發限制較單純。
- chroot 能防用戶端勒索軟體嗎?不能,它主要限制伺服器端在憑證外洩後的橫向面。
小結:internal-sftp+ChrootDirectory+root 擁有鏈+僅葉可寫+SFTP-only Match,構成可重複的多租戶邊界;與連線預算、原子發佈、金鑰稽核配套使用。
限制:自建遠端 Mac 常累積手改 sshd、臨時帳號與共用密碼;缺乏 IaC 與週期稽核時,chroot 設定會漂移成「文件與現網不一致」。
SFTPMAC:託管遠端 Mac 提供可重複的 SFTP 隔離與 sshd 基線,利於多團隊交付;工程上仍建議配合原子發佈與併發傳輸策略。
macOS chroot 與 bind?
多用 FUSE/ACL;大版本升級須預發複測。
了解 SFTPMAC 託管遠端 Mac 的 SFTP 路徑隔離與可重複 sshd 基線,服務多團隊交付情境。
