sudo 是如何使用的?

sudo 是如何使用的?

我之前尝试过配置sudo,但运气不太好。它与 有何不同su -l -c "x"?似乎可以通过配置文件使用户只能访问某些命令等。我一直认为sudo这是一种以另一个用户或组的身份执行命令的方法。由于像 Ubuntu 和 Mint 这样的发行版本质上是让主用户通过密码轻松访问 root,从而使操作变得简单,所以我不太确定它的预期用途是什么。

如何将用户添加到 sudo 文件,赋予他们仅在根目录下运行某些命令的权限?我也不想打开任何安全漏洞。

答案1

对于基本操作(以 root 身份运行命令),sudo 和 su 之间最明显的区别是 sudo 需要调用用户的密码(即您的密码),而 su 需要目标用户的密码(即 root 密码)。安全隐患已在上一个问题中进行了广泛讨论:获得root权限最安全的方法是:sudo、su还是login?

Sudo 具有 su 之外的附加功能。特别是,一旦您拥有用户的密码,您就可以以该用户身份运行任何命令。另一方面,可以配置 sudo,以便调用它的用户只能以其他用户的身份运行特定命令。这是可能的,因为 sudo 不需要任何身份验证(除了可能通过键入密码来确认您的身份之外,但这与为任务验证用户身份略有不同)。

您可以通过以 root 身份运行命令来更改 sudo 配置visudo(切勿直接编辑配置)。确保环境变量EDITORVISUAL设置为您最喜欢的编辑器,否则您可能会得到一个不熟悉的编辑器。这sudoers手册页有点简洁,但有例子。要允许用户bob运行/bin/foo(使用任意数量的参数) and /bin/bar --safe(但不使用任何其他参数) as root,请使用以下行:

bob ALL = (root) /bin/foo
bob ALL = (root) /bin/bar --safe

答案2

最大的区别是,sudo您不需要 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。这会检查文件是否合法,并有助于防止您意外破坏它。

答案3

除了其他答案之外,sudo 还提供日志记录功能,以便您可以跟踪运行了哪些命令以及由谁运行。这不是出于安全目的,因为获得 sudo 访问权限的恶意用户可以清除日志。不过,要弄清楚您或其他管理员上周凌晨 2 点睡眼惺忪做了什么,这是非常有用的。

相关内容