我之前尝试过配置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
(切勿直接编辑配置)。确保环境变量EDITOR
或VISUAL
设置为您最喜欢的编辑器,否则您可能会得到一个不熟悉的编辑器。这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 点睡眼惺忪做了什么,这是非常有用的。