使用SSH私钥登录时没有密码的sudo


23

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

这将允许将UNIX sysadmin密码存储在加密的冷存储器中,并且永远不需要访问它们,前提是用户始终使用安全的私有SSH密钥登录服务器。


askubuntu.com/a/135838如果您将这些用户分组,则可以!
罗布

尝试sudo visudo更改您的密码以NOPASSWD: ALL查看是否有效
气动装置

3
@AlanTuring这对于该组中通过密码标识的用户也适用。
Xyon 2012年

@AlanTuring那将有效降低服务器的安全性-我只希望某些用户,而不是全部,sudo
Mikko Ohtamaa 2012年

可以给特定用户特权。看我的答案。
艾萨克·拉比诺维奇

Answers:


10

至少从2014年4月起就存在这样做的选择。

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

Gentoo Wiki提供了有关这些步骤的详细信息。


1
可爱,谢谢利亚姆。太可惜了我好多年没来sysadmin了!
米哈·奥塔玛

1

如果不对sudo和sshd进行一些严重的代码更改,这是不可能的。Sudo不了解登录方法,并且ssh不会向其他程序发布任何表明是否使用公钥,密码或其他机制进行登录的内容。

就像其他人所说的那样,您可以在sudoers中使用NOPASSWD选项-但是,这将始终适用于指定用户,不仅是当他们将ssh与私钥一起使用时。

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

综上所述,我认为这是一个坏主意。特权命令需要密码有两个不错的好处,而私钥SSH则没有。值得注意的是,它使您有auth超时(必须重新输入密码,对于ssh会话不正确),它使您具有最小密码和轮换密码(与ssh密钥不同,后者具有服务器控制范围之外的口令)。


11
“不可能做到”不是答案,尤其是在可以做到的时候。
艾萨克·拉比诺维奇

将答案更改为包含新信息的正确答案。
Mikko Ohtamaa

1

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

对于已经使用证书进行了严格身份验证的用户,这可能不是问题,因为从理论上讲,他可以拥有自己的根证书。

但是,如果您考虑的漏洞将为攻击者提供有限的用户外壳,并且该用户在sudoers文件中设置了NOPASSWD,则攻击者是root用户,而根本没有对系统的任何凭证。

如果sudo要求用户提供密码,则攻击者需要时间和运气才能将其特权提升为root。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.