Users

使用 pam_succeed_if.so 允許給定組的無密碼 su

  • March 26, 2017

我有一個服務使用者srvuser和一個組maintainers。我怎樣才能只允許組成為maintainers命令?我嘗試編輯:srvuser``su``/etc/pam.d/su

auth            sufficient      pam_succeed_if.so use_uid user = maintainers and user ingroup maintainers

and顯然不允許在 conf 文件中。有什麼辦法可以解決這個問題?

的文件中pam_succeed_if似乎沒有任何內容表明它將支持多個連詞,因此您需要在模組之外執行此操作。

如果您正在編寫required規則,通過創建兩個單獨的規則將它們組合起來很簡單:

auth  required  pam_succeed_if.so user = srvuser
auth  required  pam_succeed_if.so use_uid user ingroup maintainers

但是對於一個sufficient規則,例如在返回肯定結果時終止處理的規則,這將不起作用,而是變成一個or條件。但是 PAM 支持一種流控制,允許根據前一個模組的返回值跳過一些規則。請參閱此處的文件

pam_permit只要模組返回 true,這應該流向規則pam_succeed_if,但如果它們返回除 a 之外的任何內容,則跳至以下規則success

auth  [success=ok default=2]  pam_succeed_if.so user = srvuser
auth  [success=ok default=1]  pam_succeed_if.so use_uid user ingroup maintainers
auth  [success=done default=ignore]  pam_permit.so
... # other modules

如您所見,語法很糟糕,我建議在嘗試在任何地方實際使用它之前測試配置。


su當然,要允許某個組的成員以其他使用者的權限執行程序,您不一定需要sudoPAM 或 PAM。使用通常的文件權限,您可以創建一個 setuid 二進製文件,並且只允許給定組的成員執行它:

# chown srvuser.maintainers ls
# chmod 4510 ls
# ls -l ls
-r-s--x--- 1 srvuser maintainers 118280 Mar 26 19:03 ls

這裡的缺點是,與suand不同sudo,執行 setuid 二進製文件不會記錄在任何地方,並且 setuid 二進製文件可以由作為目標使用者執行的程序修改或刪除。要解決此問題,您可以創建一個簡單的固定功能包裝程序,將執行記錄setuid到目標,然後記錄exec實際命令。

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