Sudo

使用 sudo,是否可以使用目標使用者不在的目標組執行程序?

  • January 27, 2022

請考慮使用標準安裝和配置的 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,而不是 of sudo -g,除了有限的使用-g來指定使用者已經擁有的組中的主要組。要允許提升組權限以及使用者權限,請將這些規則(或系統上的任何等效規則,例如使用%adminor%sudobinarus等)更改為

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

這是某些發行版的預設設置,例如 Debian。

引用自:https://unix.stackexchange.com/questions/687744