拥有不带密码的sudo的匿名用户是否不安全?


10

我是Ansible的新手。到目前为止,我见过的大多数VPS设置指南都是这样做的:

  1. 禁止root登录
  2. 创建一个只能使用ssh(不能使用密码)登录的新用户
  3. wheel使用无密码sudo权限将新用户添加到组

我了解(1)和(2),但不了解(3)。

当然,无密码sudo就像登录一样root吗?我了解好处(便利),但这不是很不安全吗?

我意识到管理员以各种方式运行他们的网络,因此可以说这是“主观的”,但这是非常常见的做法,甚至在各种官方的可访问文档以及托管公司发布的指南中都显示了这种情况。这违背了常识。它背后的逻辑是什么?


1
Ansible用于自动执行管理任务,因此通常需要顶级(根)级访问,因此需要“无密码sudo”。但是,如果只需要它来运行系统上可用命令的子集,则可以使用更详细的sudo配置将其锁定为那些命令。无密码的sudo不一定意味着访问root用户可以做的一切(尽管当您意识到用户可以通过sudo修改sudo配置以赋予自​​己更大的控制权时,这变得很难实施)。
David Spillett

@DavidSpillett我对此很疑惑-即定义sudoers文件中允许使用的sudo命令...但是我读到某个地方ansible通过复杂的python命令进行解释来完成所有工作,而且这种方法会很快变得混乱。
lonix

Answers:


18

如果服务帐户可以执行无密码sudo,则必须保护对该帐户的访问。

只要您还可以保持ssh私钥的安全性,那么让该帐户没有密码并仅使用ssh密钥登录即可。


因此,我对这种惯例感到不安,这是“正确的”-但是,出于必要/实用主义的考虑,这是一种可混用的惯例。
lonix

因此,您是说我实质上是将核心安全性从VPS“移动”到我的本地系统,该系统包含ansible帐户的ssh密钥?在这种情况下,弱点不是VPS本身,而是我!而且我需要格外警惕保护该ssh密钥,以换取自动自动化为我带来的便利。
lonix

6
ssh密钥(受ssh-agent保护的密码短语)是一个相当不错的凭据。
John Mahowald

@lonix所有安全系统都需要凭据。受保护的系统最多与您为保护这些凭据所采取的措施一样安全,因为拥有这些凭据可以100%地访问它们。因此,是的,如果您没有正确保护SSH密钥(或root密码或其他任何东西),就不能期望保护VPS。从这个角度来看,您配置无密码sudo的事实没有任何意义,使用密码启用sudo不会改变以下事实:必须保护SSH密钥。
Giacomo Alzetta

@GiacomoAlzetta我知道,我的意思是责任正在从远程机器转移到本地机器。由于sudo升级是在没有密码的情况下完成的,因此薄弱环节就变成了本地。
lonix

4

在(2)中创建的新用户只能使用SSH密钥登录,没有密码。SSH密钥提供间接的根访问权限。因此,这等效于只允许使用密钥进行root登录。

由于该帐户没有密码,因此无法sudo要求输入密码。另外,Ansible还需要能够执行命令。在与密钥相同的位置提供其他密码不会增加安全性。


2

问题在于,ansible是针对管理员和自动化人员的,因此,如果您需要输入密码来运行脚本,那并不是最好的方法。同样,将sudo的密码存储在文件或数据库中也不安全,并且每次运行剧本时都无法获取。因此,无密码的sudo和ssh Keys的身份验证相结合是通过运行剧本来确保安全且没有出现问题的最佳方法。您也是管理员,并且知道您在剧本中编程的内容。因此,剧本无法破坏您的服务器。


剧本可能会破坏您的系统,但如果仅使用单独的测试环境键,则不会破坏生产主机。
John Mahowald

确实,这是在生产系统上工作的前提。
NicoKlaus

1
Ansible具有“ ansible-vault”,以及允许在许多第三方秘密存储系统(例如bitwarden,hashicorp Vault,keepass等)中存储秘密的插件/模块/库。
Zoredache
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.