【问题标题】:how to access ssh UserEnvironment var in pam_exec script如何在 pam_exec 脚本中访问 ssh UserEnvironment var
【发布时间】:2016-02-17 17:36:17
【问题描述】:

我正在使用 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_CONNECTION 这样的变量似乎都不可用,这让我感觉很奇怪。这些信息在脚本执行时肯定是可用的,但变量没有设置或者我做错了。

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

【问题讨论】:

  • 允许用户将环境变量注入 PAM 环境会产生安全隐患。我怀疑 OpenSSH 的人会在没有令人信服的理由的情况下允许这样做。
  • @Kenster as PermitUserEnvironment yes 本身就有安全隐患,我不确定这会有什么不同。但是话说回来我真的没有足够的知识来判断

标签: ssh debian pam


【解决方案1】:

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

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

是的,你是对的。授权密钥的环境变量在do_setup_env()函数中设置,在pam_session之后调用。

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

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

【讨论】:

  • 我希望我可以省略使用ForceCommand,谢谢您的回答
  • 但是注销呢?肯定到那时所有信息都可用,以后有什么方法可以重新阅读 pam_env.conf 吗?
  • 注销是什么意思?如果您在包装脚本中exit,它将注销用户。
  • 抱歉不清楚。我还在谈论 pam ,特别是关于 PAM_TYPE=close_session
  • 你为什么需要那个? sshd 将在 shell/命令退出时负责关闭会话。如果您需要在此期间采取更多操作,您仍然可以在包装脚本中执行此操作。
猜你喜欢
  • 1970-01-01
  • 2022-07-29
  • 1970-01-01
  • 2011-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-03
  • 1970-01-01
相关资源
最近更新 更多