使用 pam_exec.so 以 root 身份运行脚本时,脚本无法在登录时运行

sky*_*ket 6 linux authentication pam centos shell-script

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

问题与环境

我想在/path/script.sh每次用户登录时以 root身份运行一个脚本。我还需要知道登录的用户(例如作为环境变量或脚本的参数)。我使用的是最新版本的 CentOS 7。

我目前正在编辑/etc/pam.d/system-auth并添加以下行:

session     optional     pam_exec.so /path/script.sh
Run Code Online (Sandbox Code Playgroud)

当我成为具有 的用户时sudo su,这工作正常,但如果我对用户进行身份验证,则不起作用(脚本必须以 root 身份运行)。换句话说,

$ su - robot7
Password: 
/path/script.sh failed: exit code 1
-bash-4.2$
Run Code Online (Sandbox Code Playgroud)

失败而

$ sudo su - robot7
Last login: Thu Jun 14 09:33:56 MDT 2018 on pts/5
-bash-4.2$
Run Code Online (Sandbox Code Playgroud)

工作并按预期运行脚本,但有一个警告:当用户断开连接时,脚本也会运行。$PAM_USER第二种情况下的变量是正确的用户名(robot7,而不是 root)。

该脚本将用于生产环境中,用户不能禁用它并且可能有不同的外壳;我无法使用类似.bashrc或其他脚本来运行它。


如果我将命令设置/etc/pam.d/system-auth为运行auth而不是session(如类似问题所建议的那样),它永远不会运行。

编辑

添加seteuidpam_exec.so命令允许脚本在用户进行身份验证 ( su - robot7) 时运行,但不会在 SSH 上运行脚本(这是用户登录的主要方法)。

sky*_*ket 4

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

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