在不使用密码的服务器上设置 sudo 身份验证的最佳方法?

在不使用密码的服务器上设置 sudo 身份验证的最佳方法?

使用 sudo,您可以将其设置为要求输入密码或不要求输入密码。

从历史上看,一切都受密码保护,这是我习惯的模式。然而,如今加密似乎越来越有利于公钥/私钥身份验证。

当我在 GCP、AWS 或 DigitalOcean 上启动服务器时,我没有收到密码,这一事实很明显。相反,我得到了一个用于登录的密钥。

现在,如果我想sudo在登录时执行操作,它不会要求我输入密码。这显然是因为从未给过我密码,只给过我一把钥匙。由于以下规则, sudo 不会要求输入密码/etc/sudoers.d/90-cloud-init-users

ubuntu ALL=(全部) NOPASSWD:全部

这对于一个用户来说很好。但是,如果服务器有 3-4 个用户,所有用户都需要 sudo 访问权限,并且所有用户都使用密钥而不是密码登录,会发生什么情况呢?您想要确保一个用户无法做到这一点

sudo su - <someone else's username>
sudo <command>

是否鼓励在连接 sshd 时不允许密码身份验证,而是为所有用户提供用于sudo身份验证的密码?或者使用 pam_ssh_agent_auth 允许 sudo 使用另一组具有密码的私钥/公钥进行身份验证?或者还有其他事情应该做吗?

答案1

访问 sudo 的密码身份验证不会限制可以运行的命令。

例如

myuser ALL=(ALL) NOPASSWD: ALL
youruser ALL=(ALL) ALL

让两个用户运行完全相同的命令,只是你需要输入密码,而我不需要。

相反,我们的想法是只授予用户他们需要的特权命令,而不是“所有”命令。因此,如果 user1 只需要重新启动服务器,您可以给他们

user1 ALL=(root) NOPASSWD: /usr/sbin/reboot

现在他们所能做的就是重新启动服务器。

这遵循最小特权原则;只给人们他们需要的命令。

进一步阅读: https://www.sweharris.org/post/2018-08-26-minimal-sudo/

相关内容