Linux

如何使用 pam_exec 和 PAM_TYPE 創建條件行為?

  • November 2, 2021

我想為 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

引用自:https://serverfault.com/questions/969982