在 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+。