Почему моя переменная окружения не устанавливается?

Почему моя переменная окружения не устанавливается?

Мне нужно установить переменную окружения, GDK_NATIVE_WINDOWSчтобы исправитьпроблема с кнопками Eclipse в Ubuntu. Чтобы задать переменную окружения, я добавил следующую строку в ~/.pam_environment.

GDK_NATIVE_WINDOWS ПО УМОЛЧАНИЮ=истина

Удивительно, но переменная окружения не устанавливается, когда я echo $GDK_NATIVE_WINDOWSв терминале. Однако все остальные переменные окружения, которые я перечислил в , ~/.pam_environmentустановлены правильно. Кроме того, когда я переключаюсь на tty, например Alt+Ctrl+F1, переменная окружения устанавливается правильно. Что не так с установкой этой переменной окружения в ~/.pam_environment?

решение1

Придерживайтесь простого синтаксиса "ключ=значение" в файле ~/.pam_environment. Никаких DEFAULT, OVERRIDE, ${HOME}, ничего. Просто ключ=значение. Страница руководства, на которую вы ссылаетесь, предназначена только для pam_env.conf. Смотрите "man 8 pam_env", который не обещает ничего другого "Этот модуль также может анализировать файл с простыми парами KEY=VAL на отдельных строках".

Кстати, указание чего-то вроде PATH=${PATH}:more/paths в ./pam_environment — это отличный способ прервать практически любую попытку входа в систему, поскольку PATH устанавливается в ${PATH}:more/pathsбуквально(там не так уж много всего можно найти). Чтобы спасти, "/bin/mv .pam_environment out_of_the_way" и перелогиньтесь.

решение2

Как вы определили, ваши переменные среды должны быть установлены ~/.pam_environmentв соответствии с рекомендациямиhttps://help.ubuntu.com/community/EnvironmentVariables. Легче сказать, чем сделать ;)

Возможно, вы столкнулись с тем же пробелом в конфигурации, что и я. Ниже приведено решение для зашифрованного дома.

Мой ~/.pam_environment:

PATH            DEFAULT=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:${HOME}/bin
IDEA_JDK        DEFAULT=${HOME}/Applications/jdk

Почему уродливый статический путь? ${PATH}Мне бы не подошёл. Я несколько раз блокировал свой вход, пытаясь обойти это, поэтому я придерживаюсь уродливой статической копии значений по умолчанию :)

Обходной путь для зашифрованных домашних папок

В релизах Ubuntu вплоть доУбунту 12.04(Precise Pangolin) Beta 2, если вы используете зашифрованный домашний каталог, вам нужно будет изменить /etc/pam.d/common-sessionего, чтобы загрузить ~/.pam_environment. Это решение, по-видимому, работает для более ранних выпусков, но я его не тестировал.

Гюнтер Монтаг (g-montag) написал 19 августа 2010 г.:

Похоже, это проблема с зашифрованными домашними каталогами. Я добавил

требуется сеанс pam_env.so

в конце /etc/pam.d/common-session и теперь ~/.pam_environment читается. В другой системе без зашифрованных домашних каталогов (также 10.04) обходной путь не нужен. Возможно, в моем случае система пытается прочитать ~/.pam_environment до того, как он будет расшифрован.

решение3

У вас есть пробел между GDK_NATIVE_WINDOWS и DEFAULT=true . Это отличается от примера, на который вы ссылались.

Пытаться:

GDK_NATIVE_WINDOWS=истина

решение4

В Debian bullseye (вероятно, еще в 2013 году) и Ubuntu до версии не ниже 14.04 (проверено в контейнере docker) ~/.pam_environment не читается через user_endir по умолчанию выключено для pam_env (см. man 7 pam_env). Если вы хотите включить его снова:

echo 'session optional pam_env.so user_readenv=1' >> /etc/pam.d/common-session

то есть, установите для интерактивного сеанса (CLI или графический вход, например su) pam_env с user_reader на 1.

Я считаю, что он был отключен по следующим причинам:

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2010-4708" Модуль pam_env в Linux-PAM (он же pam) 1.1.2 и более ранних версиях считывает файл .pam_environment в домашнем каталоге пользователя, что может позволить локальным пользователям запускать программы с непреднамеренной средой путем выполнения программы, которая полагается на проверку PAM pam_env. "

Хотя приведенное выше описание мне не совсем понятно. Если это означает, что ~/.pam_environment позволяет изменять среду программы без ведома пользователя, то любая опция в домашней папке будет такой же (например, ~/.profile, ~/.zprofile). Помните, что ~/.profile должен быть прочитан графическими менеджерами входа... так зачем удалять ~/.pam_environment и оставлять ~/.profile?

Правильным способом было бы иметь возможность устанавливать переменные среды для каждого пользователя в /etc/security/pam_env.conf. Хотя пока не запрошено вышестоящим. Или любая опция, редактируемая только с правами администратора.

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