linux – 使用pam_exec.so在用户登录时以root身份运行脚本(同时提取用户信息)?

当用户使用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,错误立即自行解决.

上一篇:物理覆盖linux凭据


下一篇:linux – 当运行’su – username’时,pam_group不会从/etc/security/group.conf添加其他组,但是sshd login会这样做吗?