Zależy to w dużej mierze od sposobu wywołania programu za pomocą sudo
lub su
.
Np. W systemie, w którym aktualnie jestem:
.bashrc
COMMAND $HOME $USER Env. $PATH
1. sudo -i (root) root root [1]
2. sudo -s (USER) root USER /home/${USER}/bin:[1]
3. sudo /bin/bash (USER) root USER /home/${USER}/bin:[1]
4. sudo su (root) root USER [1]:/usr/games:/usr/local/games
5. sudo su - (root) root root [1]
Gdzie [1] = / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin
Env = Zmienne środowiskowe są resetowane dla 1 i 5, wzięte z $ USER w 2,3,4.
Więc skrypt lub program, który zostanie uruchomiony z innej opcji można zobaczyć różne $PATH
, $HOME
jego powłoka może odczytać inny .bashrc
, .profile
i zmiennych środowiskowych. Czyta plik związany z $HOME
. Każdy użytkownik może modyfikować swoje środowisko w inny sposób (zmienne $PATH
, .bashrc, .profile, .bash_profile, alias ...). W szczególności użytkownik może mieć w swojej książce inną kolejność katalogów $PATH
, w wyniku czego skrypt może wykonać polecenie, np. /home/$USER/bin
Zamiast w ścieżce oczekiwanej od roota.
Możesz uruchomić program pod, sudo -i
gdy jesteś zalogowany jako root su -
, ale możesz mieć inne zachowanie, jeśli uruchomisz go z sudo MyCommand
lub z su -c MyCommand
.
Od man su
:
W części opisowej:
Bieżące środowisko jest przekazywane do nowej powłoki . Wartość $ PATH jest resetowana do / bin: / usr / bin dla zwykłych użytkowników lub / sbin: / bin: / usr / sbin: / usr / bin dla superużytkownika
...
W części opcji:
- , -l , --login
Zapewnij środowisko podobne do oczekiwań użytkownika, gdyby użytkownik zalogował się bezpośrednio .
Od człowieka sudo
-i , --login
Uruchom powłokę określoną przez wpis bazy danych haseł użytkownika docelowego jako powłokę logowania. Oznacza to, że pliki zasobów specyficzne dla logowania, takie jak .profile lub .login, zostaną odczytane przez powłokę. Jeśli podano polecenie, jest ono przekazywane do powłoki w celu wykonania za pomocą opcji -c powłoki. Jeśli nie podano polecenia, wykonywana jest powłoka interaktywna. sudo
próbuje przejść do katalogu domowego tego użytkownika przed uruchomieniem powłoki. Polecenie jest uruchamiane w środowisku podobnym do środowiska, które użytkownik otrzyma podczas logowania . Sekcja Środowisko poleceń w podręczniku sudoers (5) dokumentuje, w jaki sposób opcja -i wpływa na środowisko, w którym polecenie jest uruchamiane, gdy używana jest zasada sudoers.