题
当用户使用pam_exec.so(或其他方式)登录时,如何以root身份运行脚本?该脚本需要有关用户的信息才能运行.
问题与环境
我希望每次用户登录时都以root身份运行script- / path / script.sh.我还需要知道登录的用户(例如,作为脚本的环境变量或参数).我正在使用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上运行脚本(这是用户登录的主要方法).
解决方法:
安全上下文阻止脚本运行. systemd日志表明即使允许所有用户执行脚本,脚本也无法运行;一些安全策略不喜欢脚本的路径.
我将脚本移动到/ bin,错误立即自行解决.