如何在pam_exec脚本中访问ssh UserEnvironment var

如何在pam_exec脚本中访问ssh UserEnvironment var,ssh,debian,pam,Ssh,Debian,Pam,我正在使用sshd_config变量PermitUserEnvironment #/etc/ssh/sshd_config PermitUserEnvironment yes 在/root/.ssh/authorized_keys文件中的每个密钥上设置类似“REALUSERNAME”的内容 #/root/.ssh/authorized_keys environment="REALUSER=custom_value" ssh-rsa AAAAB3.... 但是我在访问/etc/pam.d/s

我正在使用sshd_config变量PermitUserEnvironment

#/etc/ssh/sshd_config
PermitUserEnvironment yes
在/root/.ssh/authorized_keys文件中的每个密钥上设置类似“REALUSERNAME”的内容

#/root/.ssh/authorized_keys 
environment="REALUSER=custom_value" ssh-rsa AAAAB3....
但是我在访问/etc/pam.d/sshd中由pam_exec触发的脚本中的值时遇到问题

我最好的猜测是pam脚本是在设置环境变量之前执行的?那么我有什么选择呢

我试过pam_env

#/etc/security/pam_env.conf
PAM_REALUSER    DEFAULT="unkonwn" OVERRIDE=${REALUSER}
这是我的pam.d/ssh文件的自定义部分

#/etc/pam.d/sshd
session    required     pam_env.so readenv=1
session    optional     pam_exec.so seteuid /usr/local/bin/scripts/my_script
甚至像SSH_连接这样的变量似乎也不可用,这让我感到奇怪。该信息必须在脚本执行时可用,但变量没有设置,或者我做得不对

我曾经(成功地)在/etc/profile中触发脚本,因此我非常确信这个问题不在我的自定义脚本中

但是我无法访问脚本中由
/etc/pam.d/sshd
中的
pam_exec
触发的值

我最好的猜测是pam脚本是在设置环境变量之前执行的?那么我有什么选择呢

是的,你说得对。来自授权密钥的环境变量在函数中设置,该函数在
pam\u会话之后调用

如果您想访问这些变量,我建议您为用户设置
ForceCommand
或特殊shell,在评估变量后,它将作为普通shell的包装


但请注意,为root用户设置此选项(不受限制)将允许用户做任何他们想做的事情(甚至更改密钥、环境变量),而不管您的设置如何。

允许用户将环境变量注入PAM环境将带来安全隐患。我怀疑OpenSSH人员会在没有令人信服的理由的情况下允许这样做。@Kenster as
permiturenvironment yes
本身就有安全隐患,我不确定这会有什么不同。但是我真的没有足够的知识来判断我希望我可以省略使用
ForceCommand
,谢谢你的回答但是注销怎么办?当然,到那时所有信息都可用了,以后有没有办法重新阅读pam_env.conf?注销是什么意思?如果在包装器脚本中退出
,它会将用户注销.sry,因为用户不清楚。我还在谈论pam,特别是关于
pam\u TYPE=close\u session
为什么需要它<当shell/命令退出时,code>sshd将负责关闭会话。如果在此期间需要在中执行更多操作,则仍然可以在包装器脚本中执行。