为什么即使使用 '! ' 在它的影子条目中?

Sin*_*osh 9 permissions sudo passwd shadow

$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:::
Run Code Online (Sandbox Code Playgroud)

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

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

mur*_*uru 15

一个!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).
Run Code Online (Sandbox Code Playgroud)

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

sudo通常使用您的密码进行身份验证,而不是 root 的。这可以通过设置之一来改变targetpwrootpwrunaspwsudoers。如果您设置了这些选项之一,并在密码被锁定时尝试使用密码,那将会失败