root 账户和模拟 root 有什么区别?

root 账户和模拟 root 有什么区别?

所以如果我禁用我的根帐户sudo passwd -dl root仍然可以访问,sudo {su,bash}或者sudo -{s,i}从概念上讲,提升的权限与根帐户有何不同?

我知道各个海拔高度之间的差异,或者 shell,我正在寻找帐户和提升的权限之间的深入区别?

答案1

没有区别。 sudo将您的用户 ID 更改为 root,而不管 root 帐户是否有密码。

sudo -s和之间的区别sudo -i在于环境变量(例如 $HOME )是否保留为您当前的值(因此~仍然指向您的主目录)或者重置为 root 正常登录时会获得的值。

答案2

passwd -dl root不会禁用 root 用户。它会删除并“锁定”密码,即设置一个无意义的密码哈希值。

拥有一个密码锁定的帐户意味着您无法使用密码登录用户。 su、login 和 lightdm 不允许您以 root 身份登录,因为,默认情况下,他们会询问你用户的密码。

但是 sudo 的工作方式不同:大致来说,它有一个允许运行 sudo 的用户列表(此列表中的用户称为sudoers) 和,默认情况下,要求输入已启动 sudo 的用户的密码。

这就是为什么使用 sudo,即使 root 没有密码,你也可以登录到 root。如果你尝试该命令su root,你会发现你无法登录,因为它会要求输入你无法提供的密码。

su、login、lightdm、sudo、ssh 和其他程序都是可用于以用户身份登录系统的程序,但它们处理身份验证的方式不同。重要的是不要混淆身份验证方法通过在登录

正如您所料,身份验证这个话题相当长而且可能很棘手。在这里解释所有可用的身份验证方法以及如何使用它们会非常困难。幸运的是,有一个工具可以为您提供更详尽的答案:man,您肯定已经知道了。您可能有兴趣阅读:

  • man passwd
  • man su
  • man sudo
  • man login

特别是,其中man passwd包含以下一段您可能会感兴趣的话:

   -l, --lock
       Lock the password of the named account. This option disables a password by
       changing it to a value which matches no possible encrypted value (it adds a
       ´!´ at the beginning of the password).

       Note that this does not disable the account. The user may still be able to
       login using another authentication token (e.g. an SSH key). To disable the
       account, administrators should use usermod --expiredate 1 (this set the
       account's expire date to Jan 2, 1970).

       Users with a locked password are not allowed to change their password.

因此,要真正禁用 root 用户,您应该运行usermod --expiredate 1 root。虽然尝试总是一件好事,但请记住,此命令可能非常危险,并且会使您的机器无法使用。因此,如果您想尝试它,请务必知道如何恢复您的系统或(最好)使用 chroot/linux 容器/虚拟机/live CD/live USB。

也就是说,您会注意到有时会收到这样的消息:

Your account has expired; please contact your system administrator
su: Authentication failure

但是,还有其他方法可以使用过期帐户。例如,sudo 会忽略目标用户的过期日期(但会检查 sudoer 的过期日期)。su 也会忽略它,但仅当以 root 身份运行时:

Your account has expired; please contact your system administrator
su: Authentication failure
(Ignored)

要真正使用户无法访问,您应该处理 PAM。请参阅man 7 pam及其也可以看看部分了解更多信息。

相关内容