Answers:
实际上,它们都会使您成为超级用户。但是,它们以略有不同的方式执行略有不同的事情。
首先,su -
将您切换到登录外壳,而sudo -s
不会。实际上,这通常意味着您的环境变量不会切换root
为sudo -s
。请注意,您可以仅运行su
以不获取登录Shell或sudo -i
获取登录Shell(并非所有版本)。
其次,su
并su -
切换到新的用户,要求您为新用户进行身份验证。sudo -s
并且sudo -i
(并且只是常规的sudo foo
)使您可以运行已被预先授权的命令(请参见/etc/sudoers
参考资料),可能是要求您确认当前 ID。
如果您想变得非常可爱,还可以运行sudo su -
,它将要求以su -
root用户(sudo
部分)运行的root()登录。
如果root用户被锁定(例如在Ubuntu上),则将无法使用root用户身份登录su
。在这种情况下,您需要使用sudo -s
或sudo -i
su是更改为另一个用户的命令,可以运行shell或执行特定命令。您必须以其他用户身份进行身份验证。如果要su成为root用户,则需要root密码。
sudo是一个命令,用于以其他用户身份执行另一个命令(可选地是shell)。您必须作为自己的用户进行身份验证。管理员在sudoers文件中指定了使用sudo的权限(以及您可以使用它执行的特定操作)。
如果您授予某人访问su的权限(例如,给他们提供root密码),那么他们可以使用su做任何事情-运行其他命令,打开shell,更改密码,通过ssh远程登录,等等。实际上,您是在授予他们访问其他帐户的权限,而“ su”只是他们可以使用的另一项功能。
sudo更细粒度。您可以向用户或组授予特权。您可以允许用户或组在特定时间段(例如,星期一至星期五,上午9点至下午5点)进行sudo。您可以指定允许其运行的命令的特定列表(例如,仅/ usr / local / bin / run_backup),也可以指定允许其运行命令的特定用户(例如,www,backup,staff等) )。
除了灵活性之外,sudo在所有情况下都是更好的解决方案,因为它不需要访问用户尚不具备的任何内容。如果您授予某人sudo访问权限,则可以通过在sudoers文件中删除其行或从sudoers组中删除他们的行来撤销此权限。如果您删除他们的帐户,他们的访问权限将消失。
如果您给他们根密码,即使假设他们没有做任何不愉快的事情,那么他们将永远知道。如果您有多个需要root用户权限来执行管理任务的人员,则这意味着要么在有人离开时更改所有root用户密码,要么假定离开后可以完全访问您的系统。
从维基百科:
su(替代用户或切换用户的缩写)是一个Unix命令,用于运行另一个用户的shell而无需注销。
一个相关的名为sudo 的命令以另一个用户的身份执行一条命令,但遵循一组约束,即哪些用户可以与其他用户一起执行哪些命令(通常在名为/ etc / sudoers的配置文件中,最好通过visudo命令进行编辑)。与su不同,sudo会根据自己的密码而不是目标用户的密码对用户进行身份验证(以允许将特定命令委派给特定主机上的特定用户,而无需在它们之间共享密码,并减轻了无人值守终端的风险)。
尚未完全说明的一件事是:您可以经常使用哪种取决于您使用的发行版以及运行它的人。默认情况下,其中一个(su
或sudo
)可能未设置为完全使用。因此,例如,正如某些人所提到的,OS X和Ubuntu su
默认情况下禁用根帐户()。同样,Debian不会向普通用户授予的任何默认特权sudo
。(在所有这些系统上,您可以更改这些默认值,但前提是您必须具有某种管理特权才能开始使用。我想我们正在谈论的是非服务器情况,并且您要管理计算机,因为我们位于SU而不是比SF,但以防万一。)
最后,如果您想以sudo
更细粒度的方式使用,则应查看man sudoers
如何编辑/ etc / sudoers文件。但是,永远不要手动编辑它。使用visudo程序-除非您的编辑内容至少是理智的,否则它将阻止您保存编辑内容。这是防止可能将您锁定在自己系统的管理员权限之外的简单错误的重要保障。
在禁用了超级用户帐户的系统(例如Mac OS X)上,su
它将无法工作;sudo -s
将。
另外,似乎没有su -s
可用的设备,至少在我的机器上没有。
sudo
(甚至没有始终安装)。
本介绍可能会为您提供帮助。 su
是的简写形式su root
,您可以无限期保留其他用户的权限。如果您在一段时间内执行许多root用户访问命令,则更加危险,但也更加方便。
sudo
,普通用户没有默认权限。在那些系统上,su
是唯一的选择。