Назад | Перейти на главную страницу

Почему один и тот же пользователь имеет другое значение PATH на сервере Linux?

Я вошел на свой Linux-сервер (Redhat AS4) через SSH как пользователь 'гость', затем запустил команду echo $PATH, а на выходе /usr/local/bin:/bin:/usr/bin.

Однако когда я запускаю команду su - guest чтобы переключиться на того же пользователя, затем выполните команду echo $PATH, вывод становится /usr/bin:/bin:/usr/local/bin.

Почему один и тот же пользователь имеет другое значение PATH на сервере Linux? Это заставляет меня получать разные версии Python, и я не знаю, что вызывает эту проблему.

В двух случаях используются разные сценарии (выполняющие разные манипуляции с PATH).
Поскольку вы используете - вариант su должен быть источником вашего сценария входа в систему, а ssh не должна.

Я не знаю, какое именно поведение вы хотите, но, возможно, вы могли бы проверить, есть ли su options (например, -m, --preserve-environment: не сбрасывать переменные среды) может помочь?

Проверьте поля ENV_SUPATH и ENV_PATH в /etc/login.def

Для хорошей практики создания сценариев не полагайтесь на переменную PATH для выполнения команды, поскольку она неоднозначна.

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

debug_msg "running ~/.bashrc ($0), PATH = '$PATH'"

и аналогичные для / etc / bashrc, / etc / profile и т. д.

Это происходит так:

В / etc / passwd, где идентификатор пользователя определяется как домашний каталог и оболочка по умолчанию:

auser:!:97:51::/home/user:/usr/bin/ksh

Когда пользователь регистрируется в 'ksh' или bash, или что-то еще, что запускается, он выбирает PATH по умолчанию из файла '/ etc / environment' (а некоторые оболочки запускают файл инициализации всей системы), но он также будет запустите команды из начального сценария в домашнем каталоге, в приведенном выше случае - это файл .kshrc.

Таким образом, PATH может быть установлен с помощью начальной команды, общесистемных настроек для этой начальной команды и «скрытых» файлов .rc в домашнем каталоге пользователя.

«Su -» не запускает тот же набор начальных команд, поскольку при входе в систему используются только настройки по умолчанию из файла «/ etc / environment».

из su manpage

su is used to become another user during a login session. Invoked with-
       out a username, su defaults to becoming the super  user.  The  optional
       argument  -  may be used to provide an environment similiar to what the
       user would expect had the user logged in directly.

поэтому вы всегда будете получать разные настройки env для «su» и «su -»