共享 SFTP 入口上的三类隔离痛点
真正危险常是可写的 chroot 根、仍带 Shell 的「SFTP」账号、CI 与人共用密钥。internal-sftp 与 ChrootDirectory 有效的前提是路径属主与权限满足红线,递归乱 chmod 会破坏模型。
痛点 1:chroot 及祖先须 root 拥有且不可被租户写;否则子系统拒入或存在替换链接风险。忌长期 chmod -R 777。
痛点 2:缺 ForceCommand internal-sftp 或 Match 顺序错误时,仍可能拿到 Shell/scp/转发。
痛点 3:密钥与日志无法对应到租户。authorized_keys 若不可读易退回弱密码;众人共用服务账号则审计对不上人。应按信任边界拆账号,密钥注释写明系统/责任人,并与并发指南中的会话上限协同,避免单租户海量小文件拖垮 inode。
仅 SFTP 与 Shell:何时值得上 chroot
小团队同信任域可用「分账号 + 路径前缀」;外包/CI 机器人等跨边界场景更适合 chroot。代价是维护 root 骨架与密钥流程。
仅 SFTP:nologin Shell、ForceCommand internal-sftp、关转发;对外说明禁止 scp。管理 Shell另 Match 或另主机名。
决策矩阵:隔离强度与运维成本
| 方案 | 最适用 | 主要风险 | 最小控制面 |
|---|---|---|---|
| 共享目录无 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 基线,服务多团队交付场景。
