sshd 是否硬编码为需要 root 访问权限?

sshd 是否硬编码为需要 root 访问权限?

我试图以非 root 用户身份运行 SSH 守护程序,因为我想为服务器上的 Git 存储库提供 SSH 访问权限,而我没有 root 访问权限。我已使用自定义配置和本地证书运行它,但登录目前不起作用。

我正在使用以下版本sshd

OpenSSH_7.4p1,OpenSSL 1.0.2k-fips 2017 年 1 月 26 日

目前我不需要配置等方面的帮助(如有必要,我会单独提问)。我只是想知道是否存在硬编码限制,导致我无法完成这项工作,之后我再投入更多时间。

SSH 守护进程中是否存在任何硬性限制,导致非 root 用户无法成功使用它?

答案1

根据大量研究,我发现:

  • 如果使用 OpenSSH v7.5 或更高版本,则需要 root 权限。
    从此版本开始,该UsePrivilegeSeparation选项已被删除,并且此功能现在始终启用。这意味着 SSH 守护进程需要能够以不同的用户身份运行子进程,这需要 root。
  • AuthorizedKeyCommands如果使用选项,则需要 root
    什么时候运行指定脚本safe_mode 检查是否配置为始终使用 root 用户(uid = 0)等等它失败如果脚本的所有者不是 root,则通过设计。(我还应该注意,该StrictModes标志听起来像将禁用这些模式检查,但事实并非如此。)
  • 如果您想使用标准密码验证,则需要 root 身份。
    检查正常密码使用getpwname()系统调用这是硬编码的,/etc/shadow只有 root 才能读取。
  • 如果要在 <1024 的端口上运行,则需要 root 权限
    端口 0-1023 是特权并且只能由 root 用户使用。这意味着您无法在标准 SSH 端口 22 上运行,因此与守护进程的任何连接都需要明确指定端口。

因此,它可能如果满足以下条件,则可以以 root 身份运行:

  1. 您正在使用 OpenSSH < 7.5
  2. 您禁用UsePrivilegeSeparation
  3. 您的身份验证方法是通过公钥
  4. 您乐意在 1024 或更高端口上运行守护进程

我没有根据用例的要求进行进一步调查AuthorizedKeyCommands,因此我陷入了困境。即使满足上述条件,您可能还会遇到非 root 用户的其他限制,但是我已经发现一些证据表明,在某些情况下,人们能够以非 root 身份运行它

一些极端情况

出于完整性考虑,上述规则有几个极端情况。我没有测试过这些情况;它们是基于我在调查上述内容时遇到的代码推断得出的:

  • 如果你的系统将用户密码存储/etc/passwd/etc/shadow可能可以使用基于密码的身份验证,因为该文件是全球可读的,而且 OpenSSH 代码中似乎没有任何明确的模式检查。然而,非常非常危险以这种方式配置您的系统,所以千万不要这么做!
  • 如果你使用AuthorizedKeyCommands指向由 root 拥有但可由你的用户帐户执行的脚本,那么它可能可以使用这种形式的身份验证。但是,脚本仍然需要禁用 group/other 的写访问权限,因此您只能以 root 身份创建或编辑文件,如果您根本没有 root 访问权限,这将阻止此解决方案。

相关内容