问题
当用户使用(或以其他方式)登录时,如何以 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
,错误立即自行解决。