请考虑采用标准安装和配置的 Linux 系统sudo
;即root
可以以其他用户的身份执行所有命令,请考虑以下命令:
sudo -u user1 -g group1 some_program
Run Code Online (Sandbox Code Playgroud)
当然,我希望使用 EUID和EGIDsome_program
执行。然而,我经过惨痛的教训才知道,只有当实际上是;的成员时,这才有效。我真的应该更深入地研究一下。从命令行选项的解释来看:user1
group1
user1
group1
man 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
没有解释清楚,但这句话指的是 sudo 让你开箱即用的功能,这不是使用 sudo 的意义。Sudo 对于附加策略很有用sudoers
,这些策略可以允许任意组的用户和组。
Root 没有获得任何特殊权限。如果您可以sudo -u user1
以 root 或 \xe2\x80\x9csudoer\xe2\x80\x9d 用户身份运行,那是因为 sudoers 文件中有一条规则允许这样做。由于某种原因(也许是因为维护者从来没有想过更新它),在示例sudoers
文件中,这条规则是
root ALL = (ALL) ALL\n%wheel ALL = (ALL) ALL\n
Run Code Online (Sandbox Code Playgroud)\n这只允许使用sudo -u
,而不允许使用sudo -g
,但有限地使用-g
来指定用户已经属于的组中的主要组。要允许提升组权限以及用户权限,请将这些规则(或系统上的任何等效项,例如使用%admin
或%sudo
等binarus
)更改为
root ALL = (ALL:ALL) ALL\n%wheel ALL = (ALL:ALL) ALL\n
Run Code Online (Sandbox Code Playgroud)\n这是某些发行版的默认设置,例如 Debian。
\n 归档时间: |
|
查看次数: |
1402 次 |
最近记录: |