![为什么我可以使用 sudo 启动 root shell,即使其影子条目中有一个“!”?](https://linux22.com/image/997696/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%20sudo%20%E5%90%AF%E5%8A%A8%20root%20shell%EF%BC%8C%E5%8D%B3%E4%BD%BF%E5%85%B6%E5%BD%B1%E5%AD%90%E6%9D%A1%E7%9B%AE%E4%B8%AD%E6%9C%89%E4%B8%80%E4%B8%AA%E2%80%9C%EF%BC%81%E2%80%9D%EF%BC%9F.png)
$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 身份登录,只是充当根事情将会如此。