我想在 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_RUSER
PAM_SERVICE
PAM_TTY
PAM_USER
PAM_TYPE
account
auth
password
open_session
close_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
用户名实际上在环境变量中可用