为什么我不能通过`su`成为root?

dev*_*ead 0 linux root debian su sudo

为什么不su工作,但sudo -i可以?当我想通过成为 root 时su,系统不接受我的密码,但通过sudo -i它可以工作。

su: Authentication failure
Run Code Online (Sandbox Code Playgroud)

小智 7

简短的答案可以在 sudoers 手册页中找到(键入man sudoers以查看完整页面):

Unlike su(1), when sudoers requires authentication, it validates
the invoking user's credentials, not the target user's (or root's)
credentials.
Run Code Online (Sandbox Code Playgroud)

因此sudo要求您提供密码,su是要求root密码。

长答案

su意味着更改用户,例如,以该用户身份启动 shell。您可以指定哪个用户,例如su someuser. 然后会提示您输入someuser的密码。如果不指定用户,则su默认为 root 用户。因此,当您键入 时su,它会要求输入 root 密码。

sudo意味着以另一个用户身份运行命令,并sudo -i意味着以另一个用户身份运行登录 shell。您可以指定哪个用户,但如果不指定,则默认为 root。与期望其他用户的密码不同susudo应用安全策略。默认的安全策略是检查文件/etc/sudoers。该文件的默认版本包括:

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL
Run Code Online (Sandbox Code Playgroud)

这意味着,如果用户在sudo组中,它可以以任何用户身份运行任何命令。如果sudo -i对您有用,那可能是因为您自己的帐户在 sudo 组中。但是在sudo执行命令之前,它会再次询问您的密码——而不是 root 用户的密码。


GAD*_*D3R 5

设置/更改root密码:

sudo passwd root
Run Code Online (Sandbox Code Playgroud)

然后你就可以运行su命令了。