Linux
如何使用 pam_exec 和 PAM_TYPE 創建條件行為?
我想為 PAM_TYPE open_session 和 close_session 實現條件。有了這個,我可以在不同的時間觸發不同的登錄和註銷操作。
我有一個腳本,它測試變數 PAM_TYPE 並給出適當的退出程式碼:exit 0 表示成功,exit 1 否則。
但是我在組裝時遇到了奇怪的問題;pam_exec 沒有從腳本中獲得正確的退出程式碼。
這是我的測試實現:
在
/etc/pam.d/common-session
我添加了:session [success=ignore default=1] pam_exec.so debug seteuid /usr/sbin/test.sh logout session optional pam_exec.so debug log=/tmp/test_pam.txt /bin/echo "logout reached" session [success=1 default=ignore] pam_exec.so debug seteuid /usr/sbin/test.sh logout session optional pam_exec.so debug log=/tmp/test_pam.txt /bin/echo "login reached"
腳本
/usr/sbin/test.sh
是#!/bin/bash # some actions # invocted by pam_exec.so echo $PAM_TYPE case $1 in logout) if [ $PAM_TYPE == "close_session" ]; then echo $PAM_TYPE; exit 0; else exit 1; fi ;; esac
當我向使用者發出 su 並立即註銷時,我會進入日誌文件
$ cat /tmp/test_pam.txt *** Mon Jun 3 12:14:07 2019 "login reached" *** Mon Jun 3 12:15:00 2019 "login reached"
這種行為很奇怪。最後一行必須登出到達。
所以 Pam 每次都將條件設為假。但是對於測試,我已將其置於
echo $PAM_TYPE;
真實條件下,並且此迴聲通過註銷顯示在終端中。因此 if 語句導致true withexit 0
但 pam_exec 將其視為 false。有人知道出了什麼問題嗎?
提前致謝,
黑爾格
我從另一個網站得到這個答案:
您不能在 close_session 呼叫中依賴 PAM 堆棧中的跳轉。pam 模組堆棧在 open_session 中被“凍結”,並且在 close_session 呼叫中以相同順序呼叫相同的模組。
我的腳本的行為現在很清楚:我的方法是不可能的!
在 /etc/pam.d/sshd
需要會話 pam_exec.so /etc/pam_scripts/pam_exec.sh
pam_exec.sh 有類似的東西
如果
$$ “$PAM_TYPE” == “open_session” $$&& $$ “$PAM_USER” != “root” $$; 然後 ..做點什麼
別的
..做點別的
是
出口 0