Ustawienie ŚCIEŻKI, aby dotyczyło wszystkich użytkowników, w tym root / sudo

41

Instrukcje w Jak ustawić zmienne PATH dla wszystkich użytkowników na serwerze? pracuj nad ustawieniem ŚCIEŻKI dla wszystkich „normalnych” użytkowników. Jednakże, jeśli to zrobię sudo -s, a następnie printenv PATHzaktualizowana ścieżka nie jest wyświetlany. Przyjrzałem się na przykład ustawianiu ścieżki TeX Live dla roota , ale wydaje mi się, że to nie ma sensu, być może, ponieważ jestem z systemu Windows. Czy jest jakiś sposób, aby ustawić prawdziwie ogólnosystemową ścieżkę, tak aby wpisy były dziedziczone przez absolutnie każdy proces uruchomiony w systemie?

Joseph Wright
źródło

Odpowiedzi:

43

Aktualizacja:

Ustawianie globalnych zmiennych środowiskowych powinno być nadal wykonywane /etc/environment, ale, jak wskazałeś, użycie sudo -spowoduje, że zmienne te są „znikane”.

Powodem tego jest sudopolityka resetowania środowiska i ustawiania bezpiecznej ścieżki . Jest on domyślnie włączony:

/etc/sudoers:

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

Zatem wszystko, co jest ustawione /etc/environmentna ścieżce, jest zastępowane przez sudo.

Strona podręcznika dla sudoersstanów:

   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.

W celu obejścia tego problemu można użyć sudo supowłoki zapewniającej uprawnienia roota, ale zawierające odpowiednią ŚCIEŻKĘ.


Oryginalna odpowiedź

Powinieneś to ustawić /etc/environment.

Spróbuj sudo YOUR_TEXT_EDITOR /etc/environment(najpierw utwórz kopię zapasową).

Aby uzyskać więcej informacji: EnvironmentVariables

Zmienne środowiskowe dla całego systemu

Ustawienia zmiennych środowiskowych, które wpływają na system jako całość (a nie tylko na konkretnego użytkownika), nie powinny być umieszczane w żadnym z wielu skryptów na poziomie systemu, które są wykonywane po załadowaniu systemu lub sesji pulpitu, ale w

/etc/environment- Ten plik jest przeznaczony specjalnie dla ogólnosystemowych ustawień zmiennych środowiskowych. To nie jest plik skryptu, ale raczej składa się z wyrażeń przypisania, po jednym w wierszu. W szczególności ten plik przechowuje ustawienia regionalne i ustawienia ścieżki w całym systemie.

Niepolecane:

/etc/profile- Plik ten jest wykonywany za każdym razem, gdy wprowadzana jest powłoka logowania bash (np. Podczas logowania z konsoli lub przez ssh), a także przez DisplayManager podczas ładowania sesji pulpitu. Jest to prawdopodobnie plik, do którego będziesz się odnosił, pytając doświadczonych administratorów systemu UNIX o zmienne środowiskowe. W Ubuntu ten plik robi jednak niewiele więcej niż wywoływanie pliku /etc/bash.bashrc.

/etc/bash.bashrc- To jest ogólnosystemowa wersja pliku ~ / .bashrc. System Ubuntu jest domyślnie skonfigurowany do uruchamiania tego pliku za każdym razem, gdy użytkownik wejdzie do powłoki lub środowiska pulpitu.

lgarzo
źródło
Ach cóż: dla mnie jest to całkowicie niewłaściwe (wszyscy powinni odziedziczyć tę samą ścieżkę, kropka), ale myślę, że tak właśnie jest.
Joseph Wright
Możesz użyć visudo(wymaga uprawnień roota), aby edytować ustawienia bezpiecznej ścieżki. nie jest to zalecana praktyka. Jest tu tylko dla edukacji.
Elliot Labs LLC,
2

sudo -isymuluje logowanie (w podobny sposób jak sudo su -) i daje ci te zmienne środowiskowe.

Inkaphink
źródło
1
To nie działa w ten sposób. Przynajmniej PATH zostanie zresetowany na moim Ubuntu Trusty test-vm.
Martijn Heemels,