问题

问题

问题

当用户使用(或以其他方式)登录时,如何以 root 身份运行脚本pam_exec.so?该脚本需要有关用户的信息才能运行。

问题与环境

我想/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(这是用户登录的主要方法)上运行脚本。

答案1

安全上下文阻止脚本运行。日志systemd表明该脚本无法运行,即使所有用户都被允许执行它;某些安全策略不喜欢脚本的路径。

我将脚本移至/bin,错误立即自行解决。

相关内容