To jest PATH
zmienna bez sudo:
$ echo 'echo $PATH' | sh
/opt/local/ruby/bin:/usr/bin:/bin
To jest PATH
zmienna z sudo:
$ echo 'echo $PATH' | sudo sh
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
O ile wiem, sudo
ma pozostawiać PATH
nietknięte. Co się dzieje? Jak to zmienić? (To jest na Ubuntu 8.04).
AKTUALIZACJA: o ile widzę, żaden ze skryptów nie rozpoczął się jako zmiana roota PATH
w jakikolwiek sposób.
Od man sudo
:
Aby zapobiec fałszowaniu poleceń, sudo sprawdza ostatnie ``. '' I `` '' (oba oznaczają bieżący katalog) podczas wyszukiwania polecenia w ŚCIEŻCE użytkownika (jeśli jedno lub oba znajdują się w ŚCIEŻCE). Należy jednak pamiętać, że rzeczywista zmienna środowiskowa PATH nie jest modyfikowana i jest przekazywana bez zmian do programu uruchamianego przez sudo.
path
environment-variables
sudo
Michiel de Mare
źródło
źródło
Odpowiedzi:
To jest
irytująca funkcjacecha sudo w wielu dystrybucjach.Aby obejść ten „problem” na Ubuntu, wykonaj następujące czynności w moim ~ / .bashrc
Uwaga: powyższe będzie działać dla poleceń, które same nie resetują zmiennej $ PATH. Jednak `su 'resetuje zmienną $ PATH, więc musisz użyć -p, aby powiedzieć jej, żeby tego nie robiła. TO ZNACZY:
źródło
W przypadku, gdy ktoś inny działa przez to i chce po prostu wyłączyć wszystkie zmiany zmiennych ścieżki dla wszystkich użytkowników.
Dostęp do pliku sudoers za pomocą polecenia:
visudo
. Powinieneś zobaczyć gdzieś następującą linię:które należy dodać w następnym wierszu
ścieżka_bezpieczna jest domyślnie włączona. Ta opcja określa, co zrobić $ PATH podczas sudo. Wykrzyknik wyłącza tę funkcję.
źródło
Defaults env_keep = "PATH"
PATH
jest zmienną środowiskową i jako taka jest domyślnie resetowana przez sudo.Aby to zrobić, potrzebujesz specjalnych uprawnień.
Z
man sudo
Przykład użycia:
aktualizacja
Może więc zajść potrzeba sprawdzenia, czy to nie jest / nie jest skompilowane.
Domyślnie jest w Gentoo
źródło
Wygląda na to, że ten błąd występuje już od dłuższego czasu! Oto kilka odniesień do błędów, które mogą Ci się przydać (i możesz chcieć zasubskrybować / zagłosować, wskazówkę, wskazówkę ...):
Błąd Debiana # 85123 („sudo: SECURE_PATH nadal nie można zastąpić”) (od 2001 roku!)
Wspominają o umieszczeniu czegoś takiego w pliku sudoers:
ale gdy robię to przynajmniej w Ubuntu 8.10, pojawia się następujący błąd:
Błąd Ubuntu # 50797 („Problem z sudo zbudowanym z --with-secure-path jest problematyczny”)
Błąd Ubuntu # 192651 („Ścieżka sudo jest zawsze resetowana”)
Błąd Ubuntu # 226595 („niemożliwe do zachowania / określenia ŚCIEŻKA”)
źródło
Wydawało mi się, że to działa
która bierze na siebie nie sudo
PATH
źródło
Myślę, że w rzeczywistości pożądane jest, aby sudo zresetowało ŚCIEŻKĘ: w przeciwnym razie atakujący, który naruszył twoje konto użytkownika, może umieścić w wersji ŚCIEŻKOWEJ wersje wszelkiego rodzaju narzędzi w ŚCIEŻCE użytkowników i zostaną one wykonane podczas korzystania z sudo.
(oczywiście reset sudo PATH nie jest kompletnym rozwiązaniem tego rodzaju problemów, ale pomaga)
Tak właśnie dzieje się, gdy używasz
w / etc / sudoers bez użycia
exempt_group
lubenv_keep
.Jest to również wygodne, ponieważ możesz dodawać katalogi, które są przydatne tylko dla roota (takie jak
/sbin
i/usr/sbin
) do ścieżki sudo bez dodawania ich do ścieżek użytkowników. Aby określić ścieżkę do użycia przez sudo:źródło
Działa teraz przy użyciu sudo z repozytoriów karmicznych. Szczegóły z mojej konfiguracji:
Wspaniale jest wreszcie rozwiązać ten problem bez użycia hacka.
źródło
źródło
Po prostu skomentuj „Defaults env_reset” w / etc / sudoers
źródło
Po prostu edytuj
env_keep
w/etc/sudoers
Wygląda to mniej więcej tak:
Defaults env_keep = "LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION LC_MEASURE MENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL L ANGUAGE LINGUAS XDG_SESSION_COOKIE"
Po prostu dołącz PATH na końcu, aby po zmianie wyglądało to tak:
Defaults env_keep = "LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION LC_MEASURE MENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL L ANGUAGE LINGUAS XDG_SESSION_COOKIE PATH"
Zamknij terminal, a następnie otwórz ponownie.
źródło
Secure_path jest twoim przyjacielem, ale jeśli chcesz zwolnić się z secure_path, po prostu zrób to
I dołącz
Jeśli chcesz zwolnić grupę użytkowników, stwórz grupę, dodaj do niej wszystkich użytkowników i użyj jej jako grupy_wolnej. man 5 sudoers na więcej.
źródło
zalecane rozwiązanie w komentarzach do dystrybucji OpenSUSE sugeruje zmianę:
do:
a następnie prawdopodobnie skomentować następujący wiersz, który nie jest potrzebny:
źródło
skomentuj zarówno „Default env_reset”, jak i „Default secure_path ...” w pliku / etc / sudores działa dla mnie
źródło
Możesz także przenieść plik do katalogu używanego sudoers:
źródło
Eee, to naprawdę nie jest test, jeśli nie dodasz czegoś do swojej ścieżki:
źródło
ŚCIEŻKA zostanie zresetowana podczas używania su lub sudo zgodnie z definicją ENV_SUPATH i ENV_PATH zdefiniowaną w /etc/login.defs
źródło
$ PATH jest zmienną środowiskową i oznacza, że wartość $ PATH może się różnić dla innych użytkowników.
Gdy logujesz się do swojego systemu, to ustawienie profilu decyduje o wartości $ PATH .
Teraz spójrzmy: -
Załóżmy, że są to wartości $ PATH dla różnych użytkowników. Teraz, gdy wykonujesz dowolne polecenie za pomocą sudo, w rzeczywistości oznacza to, że użytkownik root wykonuje to polecenie.
Możesz potwierdzić, wykonując następujące polecenia na terminalu:
To jest powód. Myślę, że to dla ciebie jasne.
źródło