Answers:
对于基本操作(以root用户身份运行命令),sudo和su之间最明显的区别是sudo需要主叫用户的密码(即您的密码),而su需要目标用户的密码(即root密码)。在上一个问题中已经对安全性隐患进行了广泛讨论:哪一种获得root特权的最安全方法是sudo,su或login?。
Sudo具有su之外的其他功能。特别是,一旦有了用户密码,就可以以该用户身份运行任何命令。另一方面,可以配置sudo,以便调用它的用户只能像其他用户一样运行特定命令。这是可能的,因为sudo不需要任何身份验证(除了可以通过键入密码来确认您是您的身份,但这与为任务进行用户身份验证有细微的区别)。
您可以通过以超级用户visudo
身份运行命令来更改sudo配置(切勿直接编辑配置)。确保将环境变量EDITOR
或VISUAL
设置为您喜欢的编辑器,否则您可能会得到不熟悉的编辑器。该sudoers
手册页是有点简洁,但有例子。为了允许用户bob
运行/bin/foo
(与任何数量的参数)和/bin/bar --safe
(但不与任何其他参数)为root
,使用下面的行:
bob ALL = (root) /bin/foo
bob ALL = (root) /bin/bar --safe
apache2ctl graceful
我认为我不愿意做/ anything /以外,不要做任何其他事情,我宁愿张开手腕并付诸实践。
最大的区别是,sudo
您不需要root密码即可像root那样以root身份运行命令su
。您确实需要root密码才能将某人添加到sudoers
文件中,但是此后该人可以以root 身份运行全部或部分(如果您已对其进行限制),而无需其他密码。
正如您已经指出的,另一个区别是sudo
可以对可以运行的命令进行更精细的控制。
有关sudoers
文件格式的详细信息,请运行man sudoers
。您会在其中找到仅允许某些命令以root身份运行的示例。每行的基本结构是:
user_list host_list = cmd_list
cmd_list可以包含允许真实用户切换到哪个用户的详细信息。例如,您可以允许网站站长切换到wwwroot来重新启动apache,而不是root。它还可以包括其他选项,例如在切换之前是否需要用户密码(这是默认设置)。
示例行可能是:
joe ALL=(ALL) ALL
这意味着:让joe以任何用户的身份在任何主机上运行任何命令。更严格的做法可能是:
joe ALL=(operator) /usr/local/ops/
这意味着:让joe以用户“ operator”的身份运行/ usr / local / ops目录中的任何命令。
sudoers手册页末尾有很多示例。
您应该/etc/sudoers
使用命令进行编辑visudo
。这将检查文件是否合法,并有助于防止意外损坏文件。
sudoers
文件的设置方式。可以将其设置为需要密码,也可以将其设置为不需要密码。
除了其他答案外,sudo还提供了日志记录功能,因此您可以跟踪运行了哪些命令以及由谁执行。这不是出于安全目的,因为获得sudo访问权限的恶意用户可以清除日志。不过,要弄清您或其他管理员上周凌晨2点的眼神,这非常有用。
sudo
是一项了不起的发明