su -s
两个超级用户命令和有什么区别sudo -s
?
它们都提供了一个可以访问超级用户帐户的 shell。
答案1
实际上,它们都会让你成为超级用户。但它们做的事情和方式略有不同。
首先,su -
会将您切换到登录 shell,而 则sudo -s
不会。实际上,这通常意味着您的环境变量不会切换到root
。sudo -s
请注意,您可以su
运行不是获取登录 shell,或者sudo -i
获取登录 shell [并非所有版本都有]。
其次,su
通过su -
要求您以新用户身份进行身份验证来切换到新用户。sudo -s
并sudo -i
(和常规一样sudo foo
)让您运行您已获得预授权的命令[参见/etc/sudoers
],可能要求您确认您的当前的ID。
如果您想要更加可爱,您还可以运行sudo su -
,它将请求以 root 用户身份登录(su -
)由 root 用户运行(sudo
部分)。
如果 root 用户被锁定(例如在 Ubuntu 上),您将无法使用 以 root 身份登录su
。在这种情况下,您需要使用sudo -s
或sudo -i
答案2
su -s
将切换到用户(在本例中为 root)并启动您指定的 shell,或者确定 shell 的其他几种方法之一。如果您想快速以 root 身份使用 zsh 或其他 shell,而由于某种原因您没有使用 sudo,这将非常有用。
sudo -s
只需使用 sudo 执行 shell,即可获得 root shell。您也可以将 shell 传递给它。
su -s 比较老,比 sudo -s 命令老得多。我猜开发人员正在尝试让切换到使用 sudo 变得尽可能简单。
答案3
su 是切换到另一个用户的命令,可以运行 shell 或执行特定命令。您必须以其他用户的身份进行身份验证。如果您想通过 su 切换到 root,则需要 root 密码。
sudo 是用于以不同用户身份执行另一条命令(可选 shell)的命令。您必须进行身份验证作为您自己的用户。使用 sudo 的权限(以及您可以使用它执行的具体操作)由管理员在 sudoers 文件中指定。
如果您授予某人 su 访问权限(例如,向他们提供 root 密码),那么他们就可以用它做任何事情 - 运行其他命令、打开 shell、更改密码、通过 ssh 远程登录等等。您实际上是授予他们访问其他帐户的权限,而“su”只是他们可以用它做的事情之一。
sudo 更加细粒度。您可以向用户或组授予权限。您可以允许用户或组在特定时间范围内(例如周一至周五,上午 9 点至下午 5 点)使用 sudo。您可以指定允许他们运行的特定命令列表(例如,仅 /usr/local/bin/run_backup),也可以指定允许他们以特定用户身份运行命令(例如 www、backup、staff 等)。
除了灵活性之外,sudo 在所有情况下都是更好的解决方案,因为它不需要访问用户尚未拥有的任何内容。如果您授予某人 sudo 访问权限,您可以通过在 sudoers 文件中删除他们的行或将其从 sudoers 组中删除来撤销该访问权限。如果您删除他们的帐户,他们的访问权限就消失了。
如果您将 root 密码告诉他们,即使假设他们没有用该密码做任何不愉快的事情,他们也会永远知道该密码。如果您有多个需要 root 访问权限来执行管理任务的人,这意味着要么在有人离开时更改所有 root 密码,要么假设在您离开后他们可以完全访问您的系统。
答案4
从维基百科:
苏(替代用户或切换用户的缩写)是一个 Unix 命令,用于在不注销的情况下运行另一个用户的 shell。
相关命令称为须藤 以另一个用户的身份执行命令,但会遵守一组约束,即哪些用户可以以其他用户的身份执行哪些命令(通常在名为 /etc/sudoers 的配置文件中,最好使用命令 visudo 进行编辑)。与 su 不同,sudo 根据用户自己的密码而不是目标用户的密码来验证用户身份(允许将特定命令委托给特定主机上的特定用户,而无需在他们之间共享密码,同时降低任何无人值守终端的风险)。