Jakie środowisko otrzymuję dzięki sudo?

15

Kiedy uruchamiam sudo, co dokładnie dzieje się z moim środowiskiem?

Kiedy uruchamiam sudo command, wydaje się, że nie widzi środowiska mojego lub roota. Na przykład moja ścieżka do obu zawiera /usr/local/bin, ale jeśli spróbuję uruchomić jeden z programów bez pełnej ścieżki, nie powiedzie się.

Myślałem, że sudo działa jako root, a więc mam środowisko roota. Czy istnieje inny sposób, w jaki bash działa w trybie sudo niż w rootie lub moim normalnym użytkowniku?

EDYTOWAĆ:

sudo -iOstatnio używam , ale ostatnio powoduje problemy, ponieważ mój bieżący katalog roboczy jest ustawiony na /root. Jest to zgodne z oczekiwaniami (trochę), ale nadal nie rozumiem, dlaczego sudo nie rozpoznaje moich plików wykonywalnych /usr/local/bin.

EDYTOWAĆ:

Korzystam z Fedory 15.

beatgammit
źródło
Z jakiego systemu operacyjnego korzystasz (jeśli Linux, jakiej dystrybucji)? Istnieje (zbyt) wiele sposobów konfiguracji PATH, a czasem nie jest łatwo ustalić, kto zastąpi go jako ostatni. Może to być jakieś ustawienie systemowe (np. W PAM), samo sudo lub kolejny skrypt profilu.
Gilles „SO- przestań być zły”
@ Gilles- Dobra uwaga. Dodałem mój system operacyjny. Zauważyłem to naprawdę tylko na Fedorze (kiedyś używałem Ubuntu), ale myślałem, że to dlatego, że nie dodali zbyt wielu ustawień wygody.
beatgammit

Odpowiedzi:

6

Nie wiem o domyślnych ustawieniach w Fedorze, ale w sudodomyślnych ustawieniach Debiana jest użycie secure_pathopcji z domyślną wartością /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin.

Oznacza to, że ścieżka jest zmieniana na tę wartość przy każdym użyciu sudo; ale kiedy używasz sudo -i, ścieżka jest później zmieniana przez pliki RC użytkownika root.

Arrowmaster
źródło
Nie wiedziałem o tej secure_pathopcji. Ustawienie domyślne nie obejmowało /usr/local/binmojej instalacji. Dzięki, to naprawdę pomogło wyjaśnić sprawę!
beatgammit
4

Możesz to łatwo sprawdzić za pomocą takich rzeczy

Porównaj dane wyjściowe z

sudo env 
env

I rzeczy takie jak

sudo whoami 
whoami

W ten sposób możesz spróbować dowiedzieć się, czego brakuje w konfiguracji.

Johan
źródło
Fajnie, nie wiedziałem o tym. W każdym razie /usr/local/binnie ma go w mojej sudo env, ale jest w mojej root env i env użytkownika. Dlaczego to?
beatgammit,
sudo whoami powraca root, zgodnie z oczekiwaniami. Co może powodować, że moja sudo env będzie inna niż moja root env?
beatgammit,
Nie wiem, ale gdzieś musi brakować konfiguracji, zwykle dołączany jest / usr / local / bin. Może omyłkowo wyczyściłeś env $ PATH w jakimś pliku konfiguracyjnym?
Johan
Czy sudo pobiera /root/.bashrc? Właśnie tam /usr/local/bindodaję ścieżkę roota (niestety musiałem to zrobić ręcznie)?
beatgammit,
Myślę, że powinieneś zmodyfikować globalną konfigurację powłoki i zobaczyć, co się stanie. Jeśli uruchamiasz bash, byłoby to coś w stylu /etc/bash.bashrc
Johan
2

Przez sudo -iPolecenie symulować początkowy logowania. W moim systemie Debian stwierdza również, że:

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. W przeciwnym razie wykonywana jest interaktywna powłoka. sudo próbuje przejść do katalogu domowego tego użytkownika przed uruchomieniem powłoki. Inicjuje także środowisko, pozostawiając DISPLAY i TERM bez zmian, ustawiając HOME, MAIL, SHELL, USER, LOGNAME i PATH, a także zawartość / etc / environment w systemach Linux i AIX. Wszystkie inne zmienne środowiskowe są usuwane.

M'vy
źródło
0

Można regulować sudo„s env_keepparametr na to PATH, choć należy pamiętać, implikacje zabezpieczeń robić.

visudo

... uruchomi twój $EDITOR, wtedy możesz wprowadzić zmiany w Defaults env_keep =... odpowiednio.

Możesz także dodać / usr / local / bin do ścieżki systemu, dodając pliki /etc/profile.d.

na przykład:

cat <<EOF > /etc/profile.d/tjameson.sh
export PATH=$PATH:/usr/local/bin
EOF
Brian Cain
źródło
sudoma specjalną obsługę, PATHwięc nie powinieneś tego robić.
Arrowmaster