Używanie sudo 1.7.4p4 na Solarisie 5.10 i sudo 1.6.7p5 na RHEL4 u6 Nie widzę, jak zachować moje zmienne środowiskowe, na przykład $ PYTHONPATH. Dodałem tę linię do sudoers, ale to nie robi żadnej różnicy:
Defaults !env_reset
Czy robię coś źle, czy też instalacja sudo po prostu nie przestrzega flagi env_reset?
Edycja: Przynajmniej w systemie Solaris odkryliśmy, że ten problem zależy od powłoki! Standardową powłoką root jest Bourne, jeśli uruchomimy bash w sudo ( sudo bash
), z drugiej strony!! Env_preset zachowa środowisko (w tym PATH i LD_LIBRARY_PATH). Jest to dość mylące zachowanie, które muszę powiedzieć.
Odpowiedzi:
Używaj ostrożnie, występują problemy z bezpieczeństwem sudo i zmiennych.
Od
man sudoers
znalazłem, że powinieneś użyćW Ubuntu
sudo
zachowuje niektóre zmienne.sudo -i
przypomina bardziej logowanie się jako root, a następnie uruchomienie polecenia. Oba mogą być niewygodne, pierwszy z nichsudo nano myfile
pozostawia pliki root w twoim domu, a drugisudo -i nano myfile
próbuje spróbować otworzyć / root / myfile.Biegać
i zobacz co daje. Tutaj daje
na przykład. Teraz uruchom
sudo visudo
i dodaj linięzastępując to, co znalazłeś przed chwilą. W razie potrzeby dodaj do niego nową ścieżkę.
O bibliotekach:
Dystrybucje Linuksa zachowują dużą ostrożność
PATH
i naprawdę powinieneś być ostrożny przed rozpoczęciem gry. Zachowaj szczególną ostrożność, dodając ścieżki takie jak „.
” lub/home/username
, ponieważ nie jest to bezpieczne.Jednym z niebezpieczeństw dodawania ścieżek jest to, że otwiera się możliwość wykonania plików na tych ścieżkach
root
, otwierając okna w systemie bezpieczeństwa, które mogą być wykorzystane przez złośliwe oprogramowanie. Mogą istnieć inne niebezpieczeństwa. Upewnij się tylko, że wiesz, co robisz. Ominięciesudo
środków bezpieczeństwa może uczynić system Solaris tak bezpiecznym, jak system Windows XP.źródło
sudo
pisarze starali się ci to uniemożliwić. Nie chcesz, aby złośliwa biblioteka była ładowana, ponieważ zostały znalezione na ścieżce używanej przez sudo. Dlatego jest resetowany. Jeśli kodujesz rzeczy, które mają być uruchamiane przez root, skopiuj je do odpowiedniego katalogu systemowego.sudoers
Jak już powiedzieli inni, bawiąc się należy postępować ostrożnie.Prostszym podejściem do prostszych przypadków, w których istnieją określone zmienne środowiskowe, które chcesz zachować, jest po prostu przekazanie żądanej zmiennej środowiskowej bezpośrednio przez sudo (jest to pokazane jak
[VAR=value]
w pomocy sudo cmdline).Zobacz ten mały przykład, w którym pokazałem go również dla więcej niż jednej zmiennej.
W oryginalnym
PYTHONPATH
przykładzie w pytaniu wystarczy użyć następującego:Przydatne jest utworzenie aliasu dla tego typu rzeczy. Tak jak:
źródło
Twoje
Defaults !env_reset
wygląda OK, zakładając, że nie jesteś również wywołanie sudo z-E
opcją.Możesz spróbować całkowicie usunąć ten wpis.
Czy sprawdziłeś, że edytujesz prawidłowy plik sudoers? Zgaduję, że może być
/etc/sudoers
lub w/usr/local/etc/sudoers
zależności od tego, jak został zainstalowany. Czy edytowałeś go za pomocąvisudo
?Jak leci sudo?
sudo python
,sudo su
,sudo su -
,sudo -s
, Coś innego? Tylkosudo python
isudo su
chroniłoby twoje środowisko.Co
env | grep PYTHONPATH
mówi Jeśli nic, upewnij się, że PYTHONPATH jest eksportowany, uruchamiającexport PYTHONPATH
i spróbuj ponownie.Co
sudo env | grep PYTHONPATH
mówi Jeśli wypisze oczekiwaną wartość, coś innego zastępuje wartość PYTHONPATH. Może root .bashrc lub .bash_profile lub systemowe pliki konfiguracyjne.źródło
editor
lub,passprompt
aby sprawdzić, czy masz poprawny plik. Lub użyj strace, dtrace, kratownicy lub podobnego i zobacz, jakie pliki otworzy.Zgodnie z dokumentacją Ubuntu dla LD_LIBRARY_PATH :
Następnie:
Dodaj
ld.so
plik konfiguracyjny/etc/ld.so.conf.d/
ze swoją ścieżkąLD_LIBRARY_PATH
Zaktualizuj pamięć podręczną za pomocą:
źródło