如何使用 pam_exec 和 PAM_TYPE 创建条件行为?
How to create conditional behaviour with pam_exec and PAM_TYPE?
我想实现 PAM_TYPE open_session 和 close_session 的条件。有了这个,我可以在不同的时间触发不同的操作来登录和注销。
我有一个测试变量 PAM_TYPE 并给出适当退出代码的脚本:成功时退出 0,否则退出 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 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"
这种行为很奇怪。最后一行必须是 logout reached.
所以 Pam 每次都将条件设为假。但是为了测试,我将 echo $PAM_TYPE;
置于真实条件下,并且此回显通过注销显示在终端中。所以 if 语句导致 true with exit 0
但 pam_exec 将其视为 false.
有人知道出了什么问题吗?
提前致谢,
赫尔格
我从另一个网站得到这个答案:
You cannot depend on jumps in PAM stack in the close_session calls. The pam module stack is "frozen" in the open_session and identical modules in the same order are invoked in the close_session call.
我的脚本的行为现在很清楚了:我的方法是不可能的!
我想实现 PAM_TYPE open_session 和 close_session 的条件。有了这个,我可以在不同的时间触发不同的操作来登录和注销。
我有一个测试变量 PAM_TYPE 并给出适当退出代码的脚本:成功时退出 0,否则退出 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 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"
这种行为很奇怪。最后一行必须是 logout reached.
所以 Pam 每次都将条件设为假。但是为了测试,我将 echo $PAM_TYPE;
置于真实条件下,并且此回显通过注销显示在终端中。所以 if 语句导致 true with exit 0
但 pam_exec 将其视为 false.
有人知道出了什么问题吗?
提前致谢,
赫尔格
我从另一个网站得到这个答案:
You cannot depend on jumps in PAM stack in the close_session calls. The pam module stack is "frozen" in the open_session and identical modules in the same order are invoked in the close_session call.
我的脚本的行为现在很清楚了:我的方法是不可能的!