Как задать путь для неинтерактивного пользователя, аутентифицированного с помощью LDAP?

Как задать путь для неинтерактивного пользователя, аутентифицированного с помощью LDAP?

На Mac с OSX 10.7.5 мне нужно задать PATH для неинтерактивных пользователей, которые подключаются через ssh и аутентифицируются с помощью LDAP. Это тот же вопрос, который был задан (и на который был дан ответ) здесь:

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. Если я затем войду на МАШИНУ и добавлю эту строку в /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-как-принудительно-выполнить-скрипт-и т. д.-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/bashrcдля OS/X произойдет выход сразу после оценки первых нескольких строк (поскольку PS1 не установлен для неинтерактивных оболочек):

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

Поэтому либо закомментируйте эти строки, либо поместите перед ними все, что вы хотите оценить для неинтерактивных входов по SSH.

Связанный контент