OpenSSH sftp监狱/chroot如何工作?

OpenSSH sftp监狱/chroot如何工作?

其实这个问题太宽泛了……

我真正想知道的是它是否真的 chroot,如果是,如何在该监狱中启动 SSH 用户 deamon[1],尽管 chroot 中明显缺乏所需的二进制文件/lib。

令人惊讶的是,谷歌对此事保持沉默。但有一个很好的参考来解释这一点就足够了(但是我的文化程度不足以阅读和理解他们的 C)。

[1]:我说的是具有用户权限的实际瞬态守护进程,该守护进程在主根 OpenSSH 守护进程连接时启动。

答案1

另一个答案相当模糊(问题也是),所以我会尝试更详细地描述这个现象。我知道这个话题并不适合所有人,但对于那些感兴趣的人来说,了解这个话题是一件很好的事情。

在不同的地方完成chroot,并且您正在研究它们,所以我会尝试协调您的想法:

  1. 特权分离,这是安全机制,部分也是chroot作为网络子的限制。这通常是一些空目录,例如/var/empty.

    原因很简单,如果存在一些漏洞,那就是大概不可利用,因为此进程看不到文件系统,并且在其他方​​面也受到限制(沙箱、用于进一步阅读的 SECCOMP 关键字)。

  2. 稍后您可以将chroot用户会话(不仅是 SFTP)放在特定目录中,以防止访问整个文件系统。根据标题,这可能是您感兴趣的部分。

    魔法关于 sftp 在 chroot 中的一点是你可以指定Subsystem sftp internal-sftp(而不是完整路径Subsystem sftp /usr/lib/openssh/sftp-server)。这意味着sshd已经完整sftp-server编译,而不是exec二进制文件,它只是来电定义服务器行为的函数。这不需要chroot用户提供任何支持文件(与普通会话不同,在普通会话中您需要 shell 及其依赖的共享对象)。如果您对此类信息感兴趣,您可能还需要日志记录套接字。

答案2

我一直在尝试处理权限分离操作模式,向使用远程服务器命令调用的 ssh 附加一些额外的日志记录。正如你所说,你没有找到太多关于它的东西。

明显的关键是选项“UsePrivilegeSeparation”。

在用户身份验证过程中,sshd 分支会放弃权限并使用用户 sshd 在 chroot 中运行。分析源代码,我发现它chroots到/var/empty。

它还进行了一些检查,确保某些操作必须在 chroot 之前和之后的代码之间进行匹配,这是我尚未探索的。

我还会留下一个相关链接:

http://www.openbsd.org/papers/openssh-measures-asiabsdcon2007-slides.pdf

相关内容