
LWN.net — GNOME, Wayland и переменные среды
Строуд, несмотря на то, что он хочет перейти к «современному» решению для переменных окружения, явно ощущает давление, которое исходит от более широкого раскрытия сломанной системы. Таким образом, его последний комментарий об ошибке на момент написания этой статьи гласит: «Да, я подумываю сдаться». Так что Fedora 25, скорее всего, увидит обновление, которое восстановит оболочку входа в процесс входа; «надлежащее исправление» подождет позже.
Сейчас Fedora 28... где мы находимся на стороне "правильного исправления"? Есть ли уже перспективный способ для пользователей устанавливать переменные среды для своих сеансов?
Т.е. замена, ~/.bash_profile
которая работает в Fedora и, надеюсь, в других местах.
решение1
Для GNOME 3.24, Стродевосстановленный сеанс gnomeдля загрузки переменных среды путем запуска оболочки входа.
В том же комментарии они включили патч для gnome-session, чтобы перенести эти переменные среды сеанса в пользовательские службы systemd. К ним относятся gnome-terminal
, так что это довольно важно :).
Запуск сеанса GDM уже былисправленныйв 3.22, чтобы импортировать среду из systemd --user
. Таким образом, среда systemd импортируется в сеанс, затем изменяется оболочкой входа, а результат также копируется обратно в systemd --user
.
Что должно работать нормально... за исключением тестирования на Fedora 28, это не работает должным образом, например, для PATH, поскольку средство запуска сеанса gdm не позволяет переменным среды systemd перезаписывать уже существующую среду.Я сообщил об этом в системе отслеживания ошибок GNOME..
Это былосогласованныйчто login
(для текстовой консоли)могпринять некоторые исправления для загрузки конфигурации среды перед запуском оболочки пользователя, но пока никаких изменений нетutil-linux v2.32.
Я даже не стал искать патчи для SSH :).
Среда systemd уже была настраиваемой в user.conf
. В рамках этих усилий systemd v233приобрелформат environment.d/
, который теперь поддерживает, например, добавление дополнительного каталога к существующему списку PATH
или LD_LIBRARY_PATH
списку поиска.
Я подумал, что лучшим местом для установки переменных среды для входа пользователей будет модуль PAM — мы даже pam_env
уже это сделали. Логика заключается в том,
просить login, gdm, sshd (этого никогда не произойдет) и т. д. сделать это — действительно плохое решение.
К сожалению, конфигурация pam_env
раздражающе непоследовательна в разных дистрибутивах... и, похоже, на это есть веская причина. ~/.pam_environment
Функциясчитается большим «ножным оружием» для обеспечения безопасности. Смотрите такжеCVE-2010-4708.
Взгляните,
pam_exec
например. Вы можете представить себе системного администратора, использующего его для выполнения какой-то конфигурации после входа в систему или чего-то в этом роде, но пользователь может получить root, установив LD_PRELOAD. Или pam_selinux на самом деле использует pam_getenv напрямую, поэтому пользователь может с ним повозиться. Но я не говорю об этих конкретных примерах, я просто хочу проиллюстрировать, что есть риски, связанные с выполнением этого от имени root, и мы можем полностью обойти эти риски, исключив целый класс потенциальных ошибок безопасности, сделав это немного позже в процессе входа в систему. Как правило, если вам не нужен код для запуска от имени root, он не должен запускаться от имени root! Конечно, я все еще разрываюсь, потому что с точки зрения логистики делать это позже более неудобно, но у меня нет никаких сомнений в том, что делать это от имени root рискованнее, чем от имени пользователя.В руководстве pam_exec прямо указано: «Команды, вызываемые pam_exec, должны учитывать, что пользователь может иметь контроль над средой».
относительно pam_env, обратите внимание, что Fedora помещает его наверх стека pam и отключает ~/.pam_environment по умолчанию.
Размещение его наверху стека является ошибкой и нарушает явное предупреждение не делать этого: «Поскольку настройка переменных среды PAM может иметь побочные эффекты для других модулей, этот модуль должен быть последним в стеке».
[...] Учитывая всю эту путаницу, это, очевидно, ножной пистолет.
Общая идея использования конфигурации оболочки для этого, похоже, также работает, например, в графическом входе Ubuntu Desktop 16.04. Однако есть одно отличие. Fedora создает ~/.bash_profile
по умолчанию, что (для bash) приводит ~/.profile
к игнорированию. Ubuntu и другие дистрибутивы на основе Debian создают ~/.profile
по умолчанию. (Т.е. эти файлы предоставляются при создании нового пользователя, из /etc/skel
).
(Я недавно использовал это в Ubuntu. Ubuntu, похоже, со временем изменился в отношении запуска оболочки входа для сеансов графического интерфейса. Например, см.https://superuser.com/questions/183870/разница-между-bashrc-и-bash-profile/183980#183980,https://askubuntu.com/questions/40287/etc-profile-not-being-sourced,«Почему gnome-terminal не является оболочкой входа в систему», и«Что означает вход в оболочку ('bash -l')»).