使用 sudo,是否可以使用目標使用者不在的目標組執行程序?
請考慮使用標準安裝和配置的 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
。只要不使用 -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
,而不是 ofsudo -g
,除了有限的使用-g
來指定使用者已經擁有的組中的主要組。要允許提升組權限以及使用者權限,請將這些規則(或系統上的任何等效規則,例如使用%admin
or%sudo
或binarus
等)更改為root ALL = (ALL:ALL) ALL %wheel ALL = (ALL:ALL) ALL
這是某些發行版的預設設置,例如 Debian。