如何为使用 LDAP 进行身份验证的非交互式用户设置路径?

如何为使用 LDAP 进行身份验证的非交互式用户设置路径?

在运行 OSX 10.7.5 的 Mac 上,我需要为通过 ssh 连接并使用 LDAP 进行身份验证的非交互式用户设置 PATH。这是此处提出(并回答)的同一个问题:

https://serverfault.com/questions/139426/updating-the-path-for-running-an-command-through-ssh-with-ldap-user-account

但我对 PAM 或 LDAP 不够熟悉,无法完全理解答案。

看起来我需要:

add a line to /etc/pam.d/sshd saying "auth      required    pam_env.so"
create a file named /etc/security/pam_env.conf

但是 pam_env.conf 的文档确实令人困惑,我不知道是否需要 DEFAULT 或 OVERRIDE 值。

我说的这些步骤对吗?我应该在 pam_env.conf 中输入哪一行?

谢谢,克里斯

ps 我尝试将行“auth required pam_env.so debug”放入 /etc/pam.d/sshd,但在 /var/log/system.log 中没有看到任何看起来像是来自 pam_env.so 的内容。我还创建了 /etc/security/pam_env.conf,并在其中放入行“PATH DEFAULT=/usr/fred OVERRIDE=/usr/george”,但它对 PATH 没有明显影响。

pps 如果我执行:

ssh USER@MACHINE echo \$SHELL

它显示 /bin/bash。如果我登录到 MACHINE 并将此行添加到 /etc/bashrc:

export Test=Fred

然后返回我的机器并执行:

ssh USER@MACHINE echo \$Test

它什么也没有返回。当我使用 LDAP 以这种方式登录时,它不会执行 /etc/bashrc。

ppps 一些可能很重要的附加信息:在 MACHINE 上没有名为 USER 的本地用户。MACHINE 已设置为进行 LDAP 身份验证,因此当我 ssh USER@MACHINE 时,我的 $HOME 设置为 /Network/Servers/blah/blah/Users/USER。如果我编辑 /Network/Servers/blah/blah/Users/USER/.bashrc 来设置 PATH,它对我来说可以正常工作,但这不是一个很好的解决方案,因为这意味着每个希望访问此服务器的人都必须编辑他们的网络 .bashrc。

答案1

这是https://askubuntu.com/questions/382485/ssh-how-to-force-execution-of-a-script-etc-sshrc-forcecommand-on

使用以下命令,您可以强制/etc/bashrc所有 SSH 登录(无论是否交互)都进行源操作。这可能会给那些依赖于/etc/bashrc非交互式登录不被执行的用户带来一些问题,因此请谨慎行事(尽管这正是您所要求的,因此您可能知道其含义)。

首先添加ForceCommand /usr/local/bin/sshd_envs/etc/sshd_config。然后将以下内容放入/usr/local/bin/sshd_envs

#!/bin/bash

source /etc/bashrc

if [ -n "$SSH_ORIGINAL_COMMAND" ]; then
  eval $SSH_ORIGINAL_COMMAND
else
  exec $SHELL
fi

无论您输入什么环境设置,/etc/bashrc每次 SSH 登录时都会进入环境。

请注意,/etc/bashrcOS/X 的默认设置将在评估前几行后立即退出(因为非交互式 shell 没有设置 PS1):

if [ -z "$PS1" ]; then
  return
fi

因此,请注释掉这些行,或者将您想要对非交互式 SSH 登录进行评估的所有内容放在这些行之前。

相关内容