Warum wird meine Umgebungsvariable nicht festgelegt?

Warum wird meine Umgebungsvariable nicht festgelegt?

Ich muss eine Umgebungsvariable festlegen, um das GDK_NATIVE_WINDOWSProblem zu behebendas Problem mit Eclipse-Schaltflächen in Ubuntu. Um die Umgebungsvariable festzulegen, habe ich die folgende Zeile hinzugefügt ~/.pam_environment.

GDK_NATIVE_WINDOWS DEFAULT=true

Überraschenderweise wird die Umgebungsvariable nicht gesetzt, wenn ich mich echo $GDK_NATIVE_WINDOWSin einem Terminal befinde. Alle anderen Umgebungsvariablen, die ich in aufgelistet habe, ~/.pam_environmentwerden jedoch richtig gesetzt. Außerdem wird die Umgebungsvariable richtig gesetzt, wenn ich z. B. zu einem TTY wechsle Alt+Ctrl+F1. Was ist falsch daran, diese Umgebungsvariable in zu setzen ~/.pam_environment?

Antwort1

Halten Sie sich in der Datei ~/.pam_environment an die einfache Syntax „Schlüssel=Wert“. Kein DEFAULT, OVERRIDE, ${HOME}, nichts. Nur Schlüssel=Wert. Die Manpage, auf die Sie verlinkt haben, ist nur für pam_env.conf. Siehe „man 8 pam_env“, wo nichts anderes versprochen wird: „Dieses Modul kann eine Datei auch mit einfachen KEY=VAL-Paaren in separaten Zeilen analysieren.“.

Übrigens ist die Eingabe von etwas wie PATH=${PATH}:more/paths in ./pam_environment eine gute Möglichkeit, fast jeden Anmeldeversuch abzubrechen, da der PATH auf ${PATH}:more/paths gesetzt wird.buchstäblich(dort ist nicht viel zu finden). Zur Rettung "/bin/mv .pam_environment out_of_the_way" und erneut anmelden.

Antwort2

Wie Sie festgestellt haben, sollten Ihre Umgebungsvariablen ~/.pam_environmentwie empfohlen eingestellt werden unterhttps://help.ubuntu.com/community/EnvironmentVariables. Leichter gesagt als getan ;)

Möglicherweise sind Sie auf dieselbe Konfigurationslücke gestoßen wie ich. Unten finden Sie die Problemumgehung für verschlüsseltes Home.

Mein ~/.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

Warum der hässliche statische Pfad? ${PATH}würde bei mir nicht funktionieren. Ich habe meinen Login mehrmals blockiert, als ich versucht habe, das Problem zu umgehen, also bleibe ich bei der hässlichen statischen Kopie der Standardeinstellungen :)

Workaround für verschlüsselte Home-Ordner

In Ubuntu-Versionen bis einschließlichUbuntu 12.04(Precise Pangolin) Beta 2, wenn Sie ein verschlüsseltes Home-Verzeichnis verwenden, müssen Sie es ändern, /etc/pam.d/common-sessiondamit es geladen wird ~/.pam_environment. Diese Lösung funktioniert anscheinend für frühere Versionen, aber ich habe sie nicht getestet.

Guenther Montag (g-montag) schrieb am 19.08.2010:

Dies scheint ein Problem mit verschlüsselten Home-Verzeichnissen zu sein. Ich habe hinzugefügt

Sitzung erforderlich pam_env.so

am Ende von /etc/pam.d/common-session und jetzt wird ~/.pam_environment gelesen. Auf einem anderen System ohne verschlüsselte Home-Verzeichnisse (auch 10.04) ist der Workaround nicht nötig. Vielleicht versucht das System in meinem Fall, ~/.pam_environment zu lesen, bevor es entschlüsselt wird.

Antwort3

Sie haben ein Leerzeichen zwischen GDK_NATIVE_WINDOWS und DEFAULT=true . Dies unterscheidet sich von dem von Ihnen verlinkten Beispiel.

Versuchen:

GDK_NATIVE_WINDOWS=true

Antwort4

In Debian Bullseye (wahrscheinlich seit etwa 2013) und Ubuntu seit mindestens 14.04 (getestet in einem Docker-Container) wird ~/.pam_environment nicht gelesen, da user_endir für pam_env standardmäßig deaktiviert ist (siehe man 7 pam_env). Wenn Sie es wieder aktivieren möchten:

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

Das heißt, für eine interaktive Sitzung (CLI oder grafische Anmeldungen wie su) wird die pam_env mit user_reader auf 1 gesetzt.

Ich glaube, es wurde upstream deaktiviert, weil:

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2010-4708„Das Modul pam_env in Linux-PAM (auch bekannt als pam) 1.1.2 und früher liest die Datei .pam_environment im Home-Verzeichnis eines Benutzers, was es lokalen Benutzern ermöglichen könnte, Programme in einer unbeabsichtigten Umgebung auszuführen, indem sie ein Programm ausführen, das auf der PAM-Prüfung pam_env basiert.“

Die obige Beschreibung ist mir allerdings nicht klar. Wenn es bedeutet, dass ~/.pam_environment es dem Benutzer ermöglicht, die Programmumgebung zu ändern, ohne dass dieser davon erfährt, dann sind alle Optionen im Home-Ordner gleich (also ~/.profile, ~/.zprofile). Beachten Sie, dass ~/.profile von grafischen Anmeldemanagern gelesen werden soll ... warum also ~/.pam_environment entfernen und ~/.profile behalten?

Eine geeignete Möglichkeit wäre, die Möglichkeit zu haben, Umgebungsvariablen pro Benutzer in /etc/security/pam_env.conf festzulegen. Dies wurde jedoch noch nicht von Upstream angefordert. Oder eine Option, die nur mit Administratorrechten bearbeitet werden kann.

verwandte Informationen