使用sudo,是否可以使用目标用户不在的目标组来执行程序?

Bin*_*rus 8 sudo group

请考虑采用标准安装和配置的 Linux 系统sudo;即root可以以其他用户的身份执行所有命令,请考虑以下命令:

sudo -u user1 -g group1 some_program
Run Code Online (Sandbox Code Playgroud)

当然,我希望使用 EUIDEGIDsome_program执行。然而,我经过惨痛的教训才知道,只有当实际上是;的成员时,这才有效。我真的应该更深入地研究一下。从命令行选项的解释来看:user1 group1user1group1man sudo-g

[...] 只要未使用 -P 选项,sudoers 策略就允许通过 -g 选项指定任何目标用户组。

这是非常不方便的。我经常用于sudo测试目的,特别是当服务或程序在任意 UID 和 GID 下运行时,相应的用户不是相应组的成员。在这种情况下,在使用 进行测试之前sudo,我必须使相应的用户成为相应组的成员,并且一定不要忘记在测试完成后恢复该操作。

因此问题是:是否存在允许使用不匹配的任意 UID 和 GID 执行程序的root设置或配置?我只对为所有程序、UID 和 GID提供通用机制的解决方案感兴趣。也就是说,将特定程序、UID 或 GID 的列表放入其中不是一个选项。sudo/etc/sudoers

一种可能的解决方案可能是替代政策提供者,以sudo实现这一点。然而,学习如何安装和配置它可能会非常困难,而且我不确定我是否会采取这条路线,即使没有其他解决方案。而且,到目前为止我还没有发现这样的事情。

更新1 (2022-01-27)

相关系统运行 Debian buster,在撰写本文时已更新了所有可用补丁。安装SELinux 。这是我的文件(/etc/sudoers留下注释和空行):

Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
root    ALL=(ALL:ALL) ALL
%sudo   ALL=(ALL:ALL) ALL
ipupdate ALL = (root) NOPASSWD: /root/scripts/asterisk-external-ip
Run Code Online (Sandbox Code Playgroud)

我目前认为最后一行与问题无关,我可能应该删除它以尽量减少干扰。另一方面,我了解到有时只是看似不重要的“为了清晰起见而删除”的部分实际上导致了相应的错误。

Gil*_*il' 10

在不同的目标组中执行程序是该-g选项的全部要点。-u并且与结合没有任何限制-g

\n
\n

只要未使用 -P 选项,sudoers 策略就允许通过 -g 选项指定任何目标用户组。

\n
\n

没有解释清楚,但这句话指的是 sudo 让你开箱即用的功能,这不是使用 sudo 的意义。Sudo 对于附加策略很有用sudoers,这些策略可以允许任意组的用户和组。

\n

Root 没有获得任何特殊权限。如果您可以sudo -u user1以 root 或 \xe2\x80\x9csudoer\xe2\x80\x9d 用户身份运行,那是因为 sudoers 文件中有一条规则允许这样做。由于某种原因(也许是因为维护者从来没有想过更新它),在示例sudoers文件中,这条规则是

\n
root        ALL = (ALL) ALL\n%wheel      ALL = (ALL) ALL\n
Run Code Online (Sandbox Code Playgroud)\n

这只允许使用sudo -u,而不允许使用sudo -g,但有限地使用-g来指定用户已经属于的组中的主要组。要允许提升组权限以及用户权限,请将这些规则(或系统上的任何等效项,例如使用%admin%sudobinarus)更改为

\n
root        ALL = (ALL:ALL) ALL\n%wheel      ALL = (ALL:ALL) ALL\n
Run Code Online (Sandbox Code Playgroud)\n

这是某些发行版的默认设置,例如 Debian。

\n