您能为用户分配 Linux 功能吗?

您能为用户分配 Linux 功能吗?

在 Solaris 中,我相信您可以为用户分配权限。

我知道在Linux中你可以为可执行文件分配能力,但是你也可以为用户分配能力吗?

答案1

是的,可以为 Linux 中以非 root 用户身份运行的进程提供附加功能,这对于允许这些用户运行非 setuidping二进制文件或运行绑定到特权端口 (< 1024) 的服务器非常有用。

在许多情况下,您将需要环境能力支持此功能才能正常工作,因此您可能需要使用最新的内核和库来解锁使非 root 用户的功能有用所需的所有功能。

(您还可以使用可继承的功能,但这需要您使用匹配的文件功能来标记要执行的二进制文件setcap。)

使用示例卡普什(1)以非 root 用户身份运行非 setuid ping 将是:

sudo capsh --caps="cap_net_raw+eip cap_setpcap,cap_setuid,cap_setgid+ep" \
    --keep=1 --user=nobody --addamb=cap_net_raw -- \
    -c "./ping -c1 127.0.0.1"

请注意,您需要 capsh 和 libcap 版本 2.25+(适用于--addamb)以及 Linux 内核 4.3+ 来支持环境功能。看这个问题了解更多详细信息(上述命令的来源。)

请注意,您需要sudo上面的命令(因为只有 root 可以添加功能),但在ping执行时,用户已被删除为“nobody”,因此ping它本身永远无法以完全 root 权限运行,只能使用 cap_net_raw。

功能有用的另一种情况是启动守护程序。例如,在端口 80 上运行 HTTP 服务器,而不必以 root 身份启动它,并且仅在绑定到该端口后才删除权限。

systemd 提供配置功能的指令User=在服务单元上,它还可以通过为服务配置 an 来以非 root 身份运行进程。对于以具有额外功能的非 root 用户身份运行进程的情况,您可能还需要环境功能支持,这将需要 Linux 内核 4.3+。

相关内容