Linux Mint 中的 pam_exec 不起作用

Linux Mint 中的 pam_exec 不起作用

我尝试在用户使用 pam_exe.so 登录时运行脚本。

/etc/pam.d/common-sesion是:

session required    pam_unix.so 
session optional    pam_sss.so 
session optional    pam_systemd.so 
session optional    pam_ecryptfs.so unwrap
session optional    pam_ck_connector.so nox11

session required    pam_oddjob_mkhomedir.so umask=0077 

# end of pam-auth-update config

session optional    pam_exec.so   debug seteuid log=/tmp/pam_exec.log /usr/local/createlink

createlink 脚本是:

#!/bin/bash

if [ ! -L /home/$PAM_RUSER/zdrive ]; then
    ln -s /mnt/dcs/home/$PAM_RUSER /home/$PAM_RUSER/zdrive
fi

$ ls -l /usr/local/createlink
-rwxr-xr-x 1 root root 200 Apr 18 15:10 createlink*

但是这样用户就不能登录了。图形登录时显示身份验证失败

当我从命令行执行 su - 时,出现“su:权限被拒绝错误”。未创建日志文件 /tmp/pam_exec.log。

运行 Linux Mint 18

我为此失去了理智...欢迎任何帮助!!!

感谢大家的时间

答案1

现在所有登录都失败的一个可能原因是脚本的退出状态。如果脚本返回非零,则视为失败,并且会话设置可能会中止。(实际中止的决定并不明显;这似乎与堆栈中涉及的模块pam_exec数量有关。)optional

查看您的代码,您正在使用$PAM_RUSER而不是$PAM_USER识别正在登录的用户帐户。$PAM_RUSER通常为空,因此您的代码等同于此

if [ ! -L /home/zdrive ]; then
    ln -s /mnt/dcs/home/ /home/zdrive
fi

如果链接才不是最初存在,它被创建,并且脚本的退出状态为良好。第二次及后续调用脚本时,链接将要最初存在,因此测试失败,这是脚本的隐含退出状态。

您可以通过稍微修改代码来解决这个问题:

#!/bin/bash

if [ ! -L "/home/$PAM_USER/zdrive" ]; then
    ln -s "/mnt/dcs/home/$PAM_USER" /home/$PAM_USER/zdrive"
fi
exit 0

另一个有用的调试工具是系统记录器。不要低估它。例如,将这一行放在该#!行后面,将为您提供信息/var/log/user.log或您的发行版的等效信息:

logger -t "${0/*\/}" "id=$(id); PAM_RHOST=$PAM_RHOST, PAM_RUSER=$PAM_RUSER, PAM_SERVICE=$PAM_SERVICE, PAM_TTY=$PAM_TTY, PAM_USER=$PAM_USER, PAM_TYPE=$PAM_TYPE."

输出示例ssh roaima@localhost whoami

Jul  4 22:48:56 vml1 pam_exec_test.sh: id=uid=0(root) gid=0(root) groups=0(root); PAM_RHOST=localhost, PAM_RUSER=, PAM_SERVICE=sshd, PAM_TTY=ssh, PAM_USER=roaima, PAM_TYPE=open_session.
Jul  4 22:48:56 vml1 pam_exec_test.sh: id=uid=0(root) gid=0(root) groups=0(root); PAM_RHOST=localhost, PAM_RUSER=, PAM_SERVICE=sshd, PAM_TTY=ssh, PAM_USER=roaima, PAM_TYPE=close_session.

相关内容