$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
并在密码锁定时尝试使用密码,runaspw
sudoers
将会失败。
答案2
现在让我们相应地看看命令:
sudo su
:sudo
以 root 权限运行命令su
(替代用户),因此即使/etc/shadow
说或有root:!:17179:0:99999:7:::
它仍然会以 root 权限运行命令。
su -
或者su root
:- 这实际上开关到root 用户该文件中的用户
/etc/shadow
无法登录,因此使用这些命令将不起作用。如果您希望它们起作用,那么根帐户必须输入密码才能解锁。
- 这实际上开关到root 用户该文件中的用户
概括:
su -
0rsu root
切换到用户根,不存在,所以不可能发生,但sudo su
会运行切换命令具有root
权限,因此在这种情况下,如果您属于该sudo
组,它将运行。在这种情况下,您实际上不是以 root 身份登录,只是充当根事情将会如此。