据称,如果您以非 root 身份登录并 write sudo passwd -d root
,root 登录将被禁用,这意味着您必须以另一个用户身份登录并使用su
切换到 root (或者只是坚持使用sudo
)。
然而,当我尝试这样做时,它并没有禁用root登录,而只是删除了对密码的要求,本质上使任何人都能够访问我的计算机上的root(很坏)。
告诉我使用的书sudo passwd -d root
是为CentOS 6.5编写的。我的版本是7.2。这是最近的变化还是我误解了什么?
答案1
在本地 PC 上限制 root 登录是没有意义的,因为本地用户始终可以以 root 权限以单用户模式加载系统。如果您需要通过 ssh 阻止 root 登录 - 可以在 /etc/ssh/sshd_config 中添加以下内容来完成 PermitRootLogin no
答案2
阻止 root 登录的最简单方法是破坏/etc/shadow
.正常的线条/etc/shadow
看起来像这样:
- 用户名:这是您的登录名。
- 密码:这是您的加密密码。密码长度应至少为 6-8 个字符,包括特殊字符/数字等。
- 上次密码更改 (lastchanged):自 1970 年 1 月 1 日以来上次更改密码的天数
- 最小值:密码更改之间所需的最短天数,即允许用户更改密码之前剩余的天数
- 最大值:密码有效的最大天数(在用户被迫更改密码之后)
- 警告:密码到期前警告用户必须更改其密码的天数
- Inactive :密码过期后该帐户被禁用的天数
- 过期:自 1970 年 1 月 1 日起该帐户被禁用的天数,即指定不再使用登录名的绝对日期。
(引用自这里)您可以添加一个! (感叹号)不会从 root 行中密码部分的哈希函数生成/etc/shadow
,这会阻止使用所有可能的密码登录。既然你已经取消了 root 的密码登录方法,那么就没有人可以以 root 的身份从任何地方登录了使用密码。 (不过可能存在其他登录方式)
更安全的方法是通过usermod
实用程序: sudo usermod -L root 这可以防止您把事情搞砸。详细usermod
用法请参见usermod(8)
。
当你想用 root 登录时,删除它!一切都会好起来的。
答案3
虽然前面的答案提到了我关于使用usermod -L
或阻止 rootpasswd -l
并有效地将密码字段设置为 ! 的评论,但它们并没有解释您的困境。
我一直在想为什么书上说删除可以passwd -d
阻止访问。当你将密码设置为空白时,加上-d,你将阻止所有非root用户访问root帐户远程,因为非 root 用户无法移动到另一个没有密码的帐户。由于现在 ssh 默认情况下也会阻止 root,因此从远程和非 root 用户的角度来看,root 帐户将被有效阻止。 (例如,以 root 身份工作的唯一方法是 sudo)
尽管如此,本书应该提到本地控制台中的任何用户都可以以 root 身份登录而无需密码。虽然现在大多数控制台对于虚拟环境中的普通用户来说是遥不可及的,但有一种控制 root 密码的方法总是明智的。
更明智的策略是使用usermod -L
或阻止 root passwd -L
,但不是在建立明智的用户策略并对其进行测试之前进行。
另一种方法是建立一个非常安全的 root 密码,定期更改,无人知道(makepasswd
例如随机生成并将其保存在信封中),以应对紧急情况(例如单启动,或者当有人错误地弄乱了 sudo 时)这样,root 密码就可以派上用场了,否则,在 root 锁定的情况下,可以通过虚拟或真实的 CD 或笔启动。