Den PATH so einstellen, dass er für alle Benutzer gilt, einschließlich root / sudo

41

Die Anweisungen unter Wie lege ich PATH-Variablen für alle Benutzer auf einem Server fest? arbeiten, um den Pfad für alle "normalen" Benutzer festzulegen. Allerdings, wenn ich tun sudo -sund dann printenv PATHdie aktualisierte Weg ist nicht gezeigt. Ich habe mir zum Beispiel das Festlegen des TeX Live-Pfades für root angesehen , aber das scheint mir nicht sinnvoll zu sein, vielleicht weil ich einen Windows-Hintergrund habe. Gibt es eine Möglichkeit, den wirklich systemweiten Pfad so festzulegen, dass die Einträge von absolut jedem auf dem System ausgeführten Prozess geerbt werden?

Joseph Wright
quelle

Antworten:

43

Aktualisieren:

Das Festlegen globaler Umgebungsvariablen sollte weiterhin in durchgeführt werden /etc/environment, aber wie Sie bereits betont haben, sudo -shat die Verwendung die Wirkung, dass diese Variablen "verschwunden" sind.

Der Grund dafür ist sudoeine Richtlinie zum Zurücksetzen der Umgebung und zum Festlegen eines sicheren Pfads . Es ist standardmäßig aktiviert:

/etc/sudoers:

Defaults  env_reset
Defaults  secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

Somit wird alles, was im /etc/environmentPfad angegeben ist, von überschrieben sudo.

Die Handbuchseite für sudoersStaaten:

   env_reset       If set, sudo will reset the environment to only contain
                   the LOGNAME, MAIL, SHELL, USER, USERNAME and the SUDO_*
                   variables.  Any variables in the caller's environment
                   that match the env_keep and env_check lists are then
                   added.  The default contents of the env_keep and
                   env_check lists are displayed when sudo is run by root
                   with the -V option.  If the secure_path option is set,
                   its value will be used for the PATH environment
                   variable.  This flag is on by default.

Als Workaround können Sie verwenden, sudo sudass eine Shell mit Root-Rechten versehen wird, aber den richtigen PATH enthält.


Ursprüngliche Antwort

Sie sollten es einstellen /etc/environment.

Versuchen Sie es sudo YOUR_TEXT_EDITOR /etc/environment(stellen Sie sicher, dass Sie zuerst ein Backup erstellen).

Weitere Informationen finden Sie unter EnvironmentVariables

Systemweite Umgebungsvariablen

Einstellungen für Umgebungsvariablen, die sich auf das gesamte System (und nicht nur auf einen bestimmten Benutzer) auswirken, sollten nicht in einem der vielen Skripts auf Systemebene abgelegt werden, die ausgeführt werden, wenn das System oder die Desktopsitzung geladen werden, sondern in

/etc/environment- Diese Datei ist speziell für systemweite Einstellungen von Umgebungsvariablen gedacht. Es ist keine Skriptdatei, sondern besteht aus Zuweisungsausdrücken, einer pro Zeile. Insbesondere werden in dieser Datei die systemweiten Einstellungen für das Gebietsschema und den Pfad gespeichert.

Nicht empfohlen:

/etc/profile- Diese Datei wird ausgeführt, wenn eine Bash-Anmeldeshell eingegeben wird (z. B. beim Anmelden über die Konsole oder über ssh) sowie vom DisplayManager, wenn die Desktopsitzung geladen wird. Dies ist wahrscheinlich die Datei, auf die Sie verwiesen werden, wenn erfahrene UNIX-Systemadministratoren nach Umgebungsvariablen gefragt werden. In Ubuntu reicht diese Datei jedoch nicht aus, um die Datei /etc/bash.bashrc aufzurufen.

/etc/bash.bashrc- Dies ist die systemweite Version der Datei ~ / .bashrc. Ubuntu ist standardmäßig so konfiguriert, dass diese Datei ausgeführt wird, wenn ein Benutzer eine Shell oder die Desktop-Umgebung betritt.

lgarzo
quelle
Nun gut: Für mich ist das alles falsch herum (jeder sollte den gleichen Pfad erben, Punkt), aber ich denke, das ist einfach so.
Joseph Wright
Sie können die visudoEinstellungen für den sicheren Pfad mit (benötigt Root-Berechtigungen) bearbeiten. Dies ist keine empfohlene Vorgehensweise. Es ist nur hier für die Bildung.
Elliot Labs LLC
2

sudo -isimuliert ein Login (ähnlich wie sudo su -) und gibt Ihnen somit diese Umgebungsvariablen.

ℝaphink
quelle
1
So funktioniert es nicht. Zumindest PATH wird auf meinem Ubuntu Trusty-Test-vm zurückgesetzt.
Martijn Heemels