使用 SSH 私钥登录时无需密码即可使用 sudo

使用 SSH 私钥登录时无需密码即可使用 sudo

是否可以让 sudo 命令支持 SSH 私钥,以便当用户使用私钥登录时,他/她无需输入密码即可使用 sudo。

这将允许将 UNIX 系统管理员密码存储在加密的冷存储中,并且永远不需要访问它们,假设用户始终使用安全的私有 SSH 密钥登录服务器。

答案1

这种选择至少从2014 年 4 月

您需要安装一个名为 的软件包pam_ssh_agent_auth(适用于 Centos 7,开箱即用,YMMV),然后配置/etc/pam.d/sudo以接受它作为授权方法。最后,您可能需要将其添加SSH_AUTH_SOCK到在 期间持续存在的环境变量列表中sudo

Gentoo wiki 上有这些步骤的详细信息。

答案2

几个答案指向没有单独用户密码的 sudo。您应该意识到这会降低您的安全性。

对于已经使用证书进行强身份验证的用户,这可能不是问题,因为他拥有理论上可以让他成为 root 的证书。

然而,如果您考虑到漏洞会为攻击者提供有限的用户 shell,并且该用户在 sudoers 文件中设置了 NOPASSWD,则攻击者就是 root ,而根本没有任何系统凭据。

如果 sudo 要求用户输入密码,攻击者需要时间和运气才能将其权限升级到 root。

答案3

如果不认真修改 sudo 和 sshd 的代码,这是不可能的。Sudo 不知道登录方法,而 ssh 不会向其他程序发布任何表明是否使用公钥、密码或其他机制进行登录的信息。

正如其他人所说,您可以在 sudoers 中使用 NOPASSWD 选项 - 但这始终适用于指定用户,而不仅仅是当他们使用带有私钥的 ssh 时。

如果您真的想要,您可以使用 suid 程序来执行一些技巧,该程序检查 sshd 日志并锁定/编辑 sudoers 文件以让该用户执行无密码 sudo,并定期执行撤销此权限的任务。

尽管如此,我认为这是个坏主意。要求特权命令输入密码有几个好处,而私钥 SSH 没有。值得注意的是,它允许您设置身份验证超时(必须重新输入密码,而 ssh 会话则不然),它允许您设置密码最小值和轮换(与 ssh 密钥不同,ssh 密钥的密码不受服务器控制)。

相关内容