请考虑使用标准安装和配置的 Linux 系统sudo
;即root
可以执行所有命令,以其他用户的身份,请考虑以下命令:
sudo -u user1 -g group1 some_program
当然,我希望some_program
使用 EUIDuser1
和EGID执行group1
。但是,我已经了解到只有当user1
它实际上是group1
;的成员时才有效。我真的应该man sudo
更彻底地学习。-g
从命令行选项的解释:
[...] 只要不使用 -P 选项,sudoers 策略就允许通过 -g 选项指定任何目标用户组。
这是非常不方便的。我经常将sudo
其用于测试目的,尤其是当服务或程序在任意 UID 和 GID 下运行时,相应的用户不是相应组的成员。在这种情况下,在我可以使用 进行测试之前sudo
,我必须让相应的用户成为相应组的成员,并且一定不要忘记在测试完成后恢复该操作。
因此问题是:是否有允许使用不匹配的任意 UID 和 GID 执行程序的root
设置或sudo
配置?我只对为所有程序、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
我目前认为最后一行与问题无关,我可能应该删除它以尽量减少分心。另一方面,我了解到,有时只是看似不重要的“为清楚起见而删除”的部分实际上导致了相应的错误。
在不同的目标组中执行程序是
-g
选项的重点。-u
并且与结合没有限制-g
。没有解释清楚,但这句话指的是sudo让你开箱即用的东西,这不是使用sudo的重点。Sudo 对文件中的其他策略很有用
sudoers
,这些策略可以允许任意组的用户和组。Root 没有任何特殊权限。如果您可以
sudo -u user1
以 root 或“sudoer”用户身份运行,那是因为 sudoers 文件中有一条允许它的规则。出于某种原因(可能是因为维护者从未想过更新它),在示例sudoers
文件中,这条规则是这只允许使用
sudo -u
,而不是 ofsudo -g
,除了有限的使用-g
来指定用户已经拥有的组中的主要组。要允许提升组权限以及用户权限,请将这些规则(或系统上的任何等效规则,例如使用%admin
or%sudo
或binarus
等)更改为这是某些发行版的默认设置,例如 Debian。