Users
使用 pam_succeed_if.so 允許給定組的無密碼 su
我有一個服務使用者
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
當然,要允許某個組的成員以其他使用者的權限執行程序,您不一定需要sudo
PAM 或 PAM。使用通常的文件權限,您可以創建一個 setuid 二進製文件,並且只允許給定組的成員執行它:# chown srvuser.maintainers ls # chmod 4510 ls # ls -l ls -r-s--x--- 1 srvuser maintainers 118280 Mar 26 19:03 ls
這裡的缺點是,與
su
and不同sudo
,執行 setuid 二進製文件不會記錄在任何地方,並且 setuid 二進製文件可以由作為目標使用者執行的程序修改或刪除。要解決此問題,您可以創建一個簡單的固定功能包裝程序,將執行記錄setuid
到目標,然後記錄exec
實際命令。