Linux

使用 pam_exec.so 以 root 身份執行腳本時,腳本無法在登錄時執行

  • January 18, 2021

問題

當使用者使用pam_exec.so(或以其他方式)登錄時,如何以 root 身份執行腳本?該腳本需要有關使用者的資訊才能執行。

問題與環境

我想在/path/script.sh每次使用者登錄時以 root 身份執行一個腳本。我還需要知道登錄的使用者(例如,作為環境變數或腳本的參數)。我使用的是最新版本的 CentOS 7。

我目前正在編輯/etc/pam.d/system-auth並添加以下行:

session     optional     pam_exec.so /path/script.sh

當我成為具有 的使用者時,這可以正常sudo su工作,但如果我以其他方式對使用者進行身份驗證則不起作用(腳本必須以 root 身份執行)。換句話說,

$ su - robot7
Password: 
/path/script.sh failed: exit code 1
-bash-4.2$

失敗而

$ sudo su - robot7
Last login: Thu Jun 14 09:33:56 MDT 2018 on pts/5
-bash-4.2$

工作並按預期執行腳本,但有一點需要注意:當使用者斷開連接時,腳本也會執行。第二種情況下的變數$PAM_USER是正確的使用者名(robot7,而不是 root)。

該腳本將用於生產環境,使用者不能禁用它並且可能有不同的 shell;我不能使用類似.bashrc或其他腳本來執行它。


如果我將命令設置/etc/pam.d/system-auth為執行auth而不是session(如類似問題所建議的那樣),它永遠不會執行。

編輯

添加seteuidpam_exec.so命令允許腳本在使用者驗證時執行 ( su - robot7),但不會在 SSH 上執行腳本(這是使用者登錄的主要方法)。

安全上下文阻止腳本執行。日誌表明腳本未能執行,systemd即使所有使用者都被允許執行它;一些安全策略不喜歡腳本的路徑。

我將腳本移至/bin,錯誤立即自行解決。

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