为什么我可以使用 sudo 启动 root shell,即使其影子条目中有一个“!”?

为什么我可以使用 sudo 启动 root shell,即使其影子条目中有一个“!”?
$cat /etc/passwd |grep -i root
root:x:0:0:root:/root:/bin/bash

$sudo cat /etc/shadow |grep -i root
root:!:17179:0:99999:7:::

在影子文件的第二个字段中,!意味着root用户无法登录,但是为什么我可以通过登录到root用户sudo su

为什么我不能通过su root或登录到 root 用户su -

答案1

!条目的加密密码字段中的表示shadow没有密码可以对其进行验证。从man shadow

If the password field contains some string that is not a valid
result of crypt(3), for instance ! or *, the user will not be able
to use a unix password to log in (but the user may log in the
system by other means).

正如手册所说,这才不是意味着您无法以 root 身份登录。这只是意味着您无法使用 root 帐户的密码以 root 身份登录。(例如,如果您之前已配置 SSH 密钥,则可以使用 SSH 密钥通过 SSH 以 root 身份登录,即使帐户已被锁定。)

sudo通常使用你的密码,而不是 root 的密码。这可以通过设置 或 中的一个来更改targetpw。如果您设置了其中一个选项,rootpw并在密码锁定时尝试使用密码,runaspwsudoers将会失败

答案2

现在让我们相应地看看命令:

  1. sudo su

    • sudo以 root 权限运行命令su(替代用户),因此即使/etc/shadow说或有root:!:17179:0:99999:7:::它仍然会以 root 权限运行命令。
  2. su -或者su root

    • 这实际上开关root 用户该文件中的用户/etc/shadow无法登录,因此使用这些命令将不起作用。如果您希望它们起作用,那么根帐户必须输入密码才能解锁。

概括:

su -0rsu root切换到用户,不存在,所以不可能发生,但sudo su会运行切换命令具有root权限,因此在这种情况下,如果您属于该sudo组,它将运行。在这种情况下,您实际上不是以 root 身份登录,只是充当事情将会如此。

来源:'su -' 和 'su root' 有什么区别?

相关内容