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?

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.


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.


1
To nie działa w ten sposób. Przynajmniej PATH zostanie zresetowany na moim Ubuntu Trusty test-vm.
— Martijn Heemels,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.