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

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

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

sudo -u user1 -g group1 some_program

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

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

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

因此问题是:是否有一个设置或配置允许root使用sudo任意 UID 和 GID 执行程序哪些不匹配?我只对提供通用机制的解决方案感兴趣所有程序、UID 和 GID。也就是说,将特定程序、UID 或 GID 的列表放入其中/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

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

答案1

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

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

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

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

root        ALL = (ALL) ALL
%wheel      ALL = (ALL) ALL

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

root        ALL = (ALL:ALL) ALL
%wheel      ALL = (ALL:ALL) ALL

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

相关内容