我已经像这样配置了 sudo:
joe ALL=(root) NOPASSWD: /bin/su - steve
它到底起什么作用?
我很困惑。
我猜有三种不同的方法来执行该命令:
su - steve
sudo su - steve
sudo -u root su - steve
在哪些情况下它不会要求输入密码?命令 2 和命令 3 之间有什么区别?
当joe运行命令2时,它将以用户joe还是root身份运行?
答案1
您可能对 sudo 和 su 的用途有些困惑。两者都允许用户像具有不同权限的另一个用户一样执行命令,但存在明显差异。
过于概括的话就是:
- su - 获取具有其他用户的 uid/gid 的 shell,并使用该用户的密码进行身份验证。
- sudo-使用其他用户的 uid/gid 运行命令,并使用您的密码进行身份验证。
苏
一般情况下,大多数人使用 su 来启动具有(替代)用户 ID 和/或组 ID 的 shell。这通常用于获取 root 权限,但也可以用于任何系统用户。
如果运行 su 的用户不是 root,那么它将要求您输入尝试以 su 身份执行的用户的密码。
su -
使用登录 shell 以 root 身份登录,该 shell 的环境与真实登录类似。需要 root 密码。su - alice
使用登录 shell 以 alice 身份登录,该登录 shell 的环境与真实登录类似。需要 alice 的密码。su
或者su alice
像上面的例子一样,不同之处在于除了环境变量 USER、SHELL 和 HOME 之外,初始用户环境保持不变。这可能会产生意想不到的后果。例如,由于 PATH 没有改变,当尝试更改密码时,您可能不是在运行命令 /usr/bin/passwd,而是运行 /usr/local/bin/passwd 甚至 /home/{$ORIGUSER}/bin/passwd。su -c command -
使用登录 shell 以 root 身份执行命令并退出到原始用户 shell。su -c command - alice
以登录 shell 的身份 alice 执行命令并退出到原始用户 shell。
参考
- 男人苏
须藤
Sudo 比 su 具有更大的灵活性。对最终用户来说,最明显的是他们使用自己的密码进行身份验证,如果这样配置,甚至可以不使用密码进行身份验证。
通过利用配置文件 visudo,可以更好地控制用户允许的权限。
举例来说,您可以允许用户执行某些命令而不需要密码,而其他命令可能需要密码。
请参阅相关的手册页来了解所有可以进行的变体。
参考
sudo 与 su 最明显的两个优点
- 能够为特定用户组授予仅部分命令的 root 权限,而无需向他们提供 root 密码。这样可以限制管理员级别的用户,让他们仅能访问完成工作所需的命令。
- 由于您仅以 root 身份执行一个命令,因此降低了意外损害的风险。例如,您认为自己在用户目录 /home/user/myjunkdocs 中并运行,
rm -rf
但实际上您是在根目录中并删除了系统软件。
答案2
su 默认登录超级用户(或指定用户),但需要目标的密码(即 su root 需要 root 密码)。它与 sudo 无关。
sudo su 将使用 joe 的密码以 root 身份登录。它会提示您输入 joe 的密码,然后以 root 身份运行命令 su,这不需要超级用户 (root) 的密码。这意味着,它将使用 joe 的密码将您登录到 root shell。
第三个命令执行相同的操作,它只是明确指定您要以 root 身份运行命令 su,这无论如何都是默认设置,只是更明确。
答案3
“我猜有三种不同的方法来执行这个命令:
su - steve
sudo su - steve
sudo -u root su - steve"
如果成功,这三个命令都会为您带来 ID 为“steve”的命令提示符,然后您可以以“steve”的身份运行任何您想要的命令。第一个命令将提示您输入 steve 的密码,并且根本不使用 sudo 条目。后两个命令“完全相同”,您将成为“steve”,而无需输入密码。
如果您编码:joe ALL=(root) /bin/su - steve 您必须输入您自己的(joes')密码,然后您将变成“steve”。
答案4
su(切换用户)命令用于切换到特定用户。
For eg: su tom ----------> to login as tom
sudo su 将切换到 root 用户。
sudo 用于赋予普通用户特殊权限,但前提是必须在 sudoers 文件中启用 sudo 用户。