我正在尝试以非 root 用户身份运行 SSH 守护程序,因为我想在我没有 root 访问权限的服务器上提供对我们 Git 存储库的 SSH 访问权限。我已经使用自定义配置和本地证书运行它,但登录当前无法正常工作。
我正在使用以下版本sshd
:
OpenSSH_7.4p1,OpenSSL 1.0.2k-fips 2017 年 1 月 26 日
在这个阶段,我不寻求有关配置等方面的帮助(如有必要,我将发布单独的问题)。在我投入更多时间之前,我只想知道是否存在硬编码限制,这意味着这是不可能的。
SSH 守护程序中是否有任何硬限制阻止它作为非 root 用户成功使用?
这是我根据大量研究发现的:
从这个版本开始,该
UsePrivilegeSeparation
选项已被删除,并且该功能现在始终处于启用状态。这意味着 SSH 守护进程需要能够以不同的用户身份运行子进程,这需要 root。AuthorizedKeyCommands
选项root 是必需的。当指定的脚本运行时,安全模式检查被配置为始终使用 root 用户(uid = 0),因此如果脚本由 root 以外的人拥有,它会失败。这是设计使然。(我还应该注意,该
StrictModes
标志听起来会禁用这些模式检查,但它不会。)检查普通密码,该系统调用只能由 root 读取。
getpwname()
/etc/shadow
端口 0-1023 具有特权并且只能由 root 用户使用。这意味着您不能在标准 SSH 端口 22 上运行,因此与守护程序的任何连接都需要明确指定端口。
因此,如果出现以下情况,则可以以 root 身份运行它:
UsePrivilegeSeparation
我没有根据我的用例需要进一步调查
AuthorizedKeyCommands
,所以我走到了死胡同。即使满足上述条件,您也可能会遇到对非 root 用户的进一步限制,但是我发现一些证据表明人们在某些情况下能够以非 root 用户身份运行它。几个边缘案例
为了完整起见,上述规则有几个极端情况。我没有测试过这些;它们基于我在调查上述内容时遇到的代码中的推论:
/etc/passwd
可以使用基于密码的身份验证,因为该文件是世界可读的,并且在 OpenSSH 代码中似乎没有任何显式模式检查。但是,以这种方式配置系统真的非常危险,所以永远不要这样做!/etc/shadow
AuthorizedKeyCommands
指向由 root 拥有但可由您的用户帐户执行的脚本,则可以使用这种形式的身份验证。但是,该脚本仍需要为组/其他禁用写访问权限,因此您将无法创建或编辑文件,除非以 root 身份创建或编辑文件,如果您根本没有 root 访问权限,这将阻止此解决方案.