是否可以让 sudo 命令支持 SSH 私钥,以便当用户使用私钥登录时,他/她无需输入密码即可使用 sudo。
这将允许将 UNIX 系统管理员密码存储在加密的冷存储中,并且永远不需要访问它们,假设用户始终使用安全的私有 SSH 密钥登录服务器。
答案1
这种选择至少从2014 年 4 月。
您需要安装一个名为 的软件包pam_ssh_agent_auth
(适用于 Centos 7,开箱即用,YMMV),然后配置/etc/pam.d/sudo
以接受它作为授权方法。最后,您可能需要将其添加SSH_AUTH_SOCK
到在 期间持续存在的环境变量列表中sudo
。
答案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 密钥的密码不受服务器控制)。