2

На 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?

Спасибо Крис

п.с. Я попытался поместить строку «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 ответ1

0

Это модификация 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/bashrc для OS/X завершится сразу после оценки первых нескольких строк (поскольку PS1 не установлен для неинтерактивных оболочек):

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .