PAM:如何将 UID 传递给 sshd 的 pam_exec

PAM:如何将 UID 传递给 sshd 的 pam_exec

我想在 CentOS 7 上使用 PAM pam-1.1.8-23.el7.x86_64 的用户通过 ssh 登录时执行一个脚本

因此,我在 sshd 的 pam 模块中添加了一条规则来执行脚本

/etc/pam.d/sshd
...
session    required     pam_exec.so {debug,seteuid} /usr/local/bin/foo.sh
...

但是,脚本始终在 root 下执行。此外,不传递任何参数,即$@在脚本上下文中为空。

我也尝试过使用login其他方法,但同样没有成功。我坚持使用 sshd,以避免服务出现问题,并将脚本限制为真正的 ssh 登录。

是否可以通过 pam_exec 在通过 ssh 登录的用户的 UID 下运行脚本?

答案1

根据pam_exec手册页:

子项的环境设置为当前 PAM 环境列表,如返回的 此外,以下 PAM 项作为环境变量导出:、、、、和,pam_getenvlist(3)其中 包含PAM_RHOST以下模块类型之一:、、、和。PAM_RUSERPAM_SERVICEPAM_TTYPAM_USERPAM_TYPEaccountauthpasswordopen_sessionclose_session

我们可以在环境变量中找到用户的名称PAM_USER,并且可以使用它在适当的 UID 下运行脚本。

例如,如果我的 pam 配置中有这个:

auth required pam_exec.so /usr/local/bin/pam_exec_stage_1

pam_exec_stage_1有:

#!/bin/sh

exec /usr/sbin/runuser -u $PAM_USER /usr/local/bin/pam_exec_stage_2

然后/usr/local/bin/pam_exec_stage_2将使用登录用户的 UID 运行。

答案2

$PAM_USER用户名实际上在环境变量中可用

相关内容