2026 安全SFTPChroot多租戶

2026 年遠端 Mac SFTP 多租戶隔離實戰:ChrootDirectory、internal-sftp 與「僅上傳帳號」決策矩陣

僅改密碼無法形成信任邊界。當外包、CI 與內部同仁共用同一遠端 Mac SFTP 入口,真正致命的是可寫入的 chroot 根、仍帶互動式 Shell 的帳號、以及無法對應稽核的共用金鑰。本文說明 internal-sftpChrootDirectory 的紅線,並與併發與 keepalive原子發布權限稽核Mac 工具一併設計。

遠端 MacSFTPChrootDirectoryinternal-sftp最小權限
示意遠端 Mac 上依租戶隔離 SFTP 目錄

共用 SFTP 入口上的三類隔離痛點

真正危險的往往是可寫入的 chroot 根仍帶互動式 Shell 的「SFTP」帳號CI 與人員共用同一組金鑰internal-sftpChrootDirectory 要能成立,路徑擁有者與權限必須滿足紅線;遞迴亂設 chmod -R 777 會破壞模型。

痛點 1:chroot 及其上層目錄須由 root 擁有且不可被租戶寫入;否則子系統拒入或存在替換連結風險。

痛點 2:缺少 ForceCommand internal-sftpMatch 順序錯誤時,仍可能取得 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。

  1. 建立 chroot 父路徑,祖先全為 root、755,不可群組寫入。
  2. jail 內 upload/ 屬租戶,chroot 根本身不可寫。
  3. MatchForceCommand internal-sftpChrootDirectory、關轉送;可選 jail 外 AuthorizedKeysFile
  4. sshd -t、reload、sftp -vvv 測試;ssh 執行應被拒。
  5. 暫開詳細認證記錄後收回。

第三步後做反向測試(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

chownchmod 寫入 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-sftpChrootDirectory+root 擁有鏈+僅葉可寫+SFTP-only Match,構成可重複的多租戶邊界;與連線預算、原子發佈、金鑰稽核配套使用。

限制:自建遠端 Mac 常累積手改 sshd、臨時帳號與共用密碼;缺乏 IaC 與週期稽核時,chroot 設定會漂移成「文件與現網不一致」。

SFTPMAC:託管遠端 Mac 提供可重複的 SFTP 隔離與 sshd 基線,利於多團隊交付;工程上仍建議配合原子發佈併發傳輸策略。

macOS chroot 與 bind?

多用 FUSE/ACL;大版本升級須預發複測。

了解 SFTPMAC 託管遠端 Mac 的 SFTP 路徑隔離與可重複 sshd 基線,服務多團隊交付情境。