/usr/bin/sudo 的访问权限“rws”和“root root”的含义

use*_*443 5 permissions root sudo

在以下访问权限中,我不确定第二个“root”代表什么。

第一个是拥有权限的所有者rws(s 代表什么?),第二个是名为 root 的组。它是一个只有 root 用户是成员的特殊组吗?

$ ls -l /usr/bin/sudo
-rwsr-xr-x 1 root root 157760 Jan 11 2016 /usr/bin/sudo
Run Code Online (Sandbox Code Playgroud)

如果我错了,那么上面的访问权限是什么意思?

Zan*_*nna 9

srws代表setuid意义设置用户ID。这是一个特殊的权限位,允许程序在由任何用户运行时以所有者的有效UID运行,在本例中为 root。因此,当您作为普通用户运行sudo可执行文件时,您实际上是以 root 身份执行的。此权限位存在安全风险,仅应在绝对必要的情况下应用。

William E. Shotts Jr 对The Linux Command Line中的setuid位的解释:

当应用于可执行文件时,它将有效用户 ID 从真实用户(实际运行程序的用户)的有效用户 ID 设置为程序所有者的有效用户 ID。大多数情况下,这会提供给超级用户拥有的一些程序。当普通用户运行“setuid root”程序时,该程序以超级用户的有效权限运行。这允许程序访问普通用户通常被禁止访问的文件和目录。显然,因为这会引起安全问题,所以必须将 setuid 程序的数量保持在绝对最小值。

root列表中的第二个是拥有该文件的,是的,只有用户 root 在组 root 中:

$ getent group root
root:x:0:
Run Code Online (Sandbox Code Playgroud)

以下是具有不同用户和组所有权的文件示例:

-rw-r----- 1 root shadow 1456 Nov 22 20:08 /etc/shadow
Run Code Online (Sandbox Code Playgroud)

这意味着该文件只能由 root 读取和写入,但影子组的成员也可以读取该文件。