Linux
使用 pam_exec.so 以 root 身份執行腳本時,腳本無法在登錄時執行
問題
當使用者使用
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
(如類似問題所建議的那樣),它永遠不會執行。編輯
添加
seteuid
到pam_exec.so
命令允許腳本在使用者驗證時執行 (su - robot7
),但不會在 SSH 上執行腳本(這是使用者登錄的主要方法)。
安全上下文阻止腳本執行。日誌表明腳本未能執行,
systemd
即使所有使用者都被允許執行它;一些安全策略不喜歡腳本的路徑。我將腳本移至
/bin
,錯誤立即自行解決。