我必须承认,在某些情况下,我喜欢没有密码的服务器。典型的服务器容易受到任何具有物理访问权限的人的攻击。因此,在某些情况下,将其物理锁定是可行的,此后再信任任何物理访问。
基本概念
从理论上讲,当我物理上到达这样的服务器时,只需键入root
登录名就可以执行无需密码的管理任务,并且不需要输入密码。这可能适用于用户帐户,但实际上并不能真正访问它们。因此,(偶尔)本地访问不需要系统密码。
远程访问服务器(用于管理或用户帐户)时,我希望始终使用SSH私钥。为刚创建的帐户设置SSH密钥非常容易,因此(常规)远程访问不需要系统密码。
# user=...
#
# useradd -m "$user"
# sudo -i -u "$user"
$ keyurl=...
$
$ mkdir -p .ssh
$ curl -o .ssh/authorized_keys "$keyurl"
结论是,从理论上讲,我们不会为此类用例使用任何系统密码。所以问题是,我们如何配置系统和用户帐户,以使其以一致且安全的方式发生。
本地访问详细信息
我们如何确保无需密码即可在本地访问root帐户?我认为我们不能使用passwd -d
它,因为这会使root用户访问权限太宽容,并且没有特权的用户可以免费切换到root 用户,这是错误的。我们无法使用,passwd -l
因为它阻止我们登录。
请注意,本地访问专门涉及使用本地键盘的访问。因此,有效的解决方案不得允许任何用户切换(无论使用su
还是sudo
)。
远程访问详细信息
直到最近,上述解决方案仍然有效,但现在SSH开始检查锁定的用户帐户。passwd -d
由于相同的原因,我们可能无法使用。我们不能使用passwd -u
它,因为它只是抱怨它将导致什么passwd -d
。
有一种解决方法,该部分使用虚拟密码。
user=...
echo -ne "$user:`pwgen 16`\n" | chpasswd
也可以完全关闭SSH中的锁定帐户检查功能,但是保留锁定帐户的支持并能够对其进行解锁会更好。
最后的笔记
我感兴趣的是一个解决方案,该解决方案使您无需任何密码即可本地登录root帐户以及包括root在内的所有帐户。另一方面,除非明确说明,否则解决方案不得影响安全性,尤其是不允许远程用户访问根帐户或其他用户的帐户时。该解决方案应足够健壮,以免间接引起安全问题。
公认的答案可能会或可能不会描述单个工具的详细配置,但必须包含要达到既定目标的关键点。请注意,这可能无法通过常规使用的一样的工具来解决passwd
,ssh
,su
,sudo
等。
阅读第一个答案后有更多想法
只是一个想法–本地root访问可以通过启动root shell而不是登录过程来实现。但是仍然需要仅锁定密码身份验证,而不是公钥身份验证。