W skrócie : jak sprawić, by sudo nie spuszczało PATH za każdym razem?
Mam kilka stron internetowych wdrożonych na moim serwerze (testy Debiana) napisane przy użyciu Ruby on Rails. Używam Mongrel + Nginx do ich hostowania, ale jest jeden problem, który pojawia się, gdy muszę zrestartować Mongrel (np. Po wprowadzeniu pewnych zmian).
Wszystkie strony są sprawdzane w VCS (git, ale to nie jest ważne) i mają właściciela i grupę ustawioną dla mojego użytkownika, podczas gdy Mongrel działa w ramach użytkownika huh, kundla, który jest poważnie ograniczony w swoich prawach. Tak więc kundel musi zostać uruchomiony pod rootem (może automatycznie zmienić UID) lub kundlem.
Do zarządzania kundlem używam klejnotu mongrel_cluster, ponieważ pozwala on uruchamiać lub zatrzymywać dowolną liczbę serwerów Mongrel za pomocą jednego polecenia. Ale potrzebuje katalogu /var/lib/gems/1.8/bin, aby znajdował się w PATH: to nie wystarczy, aby uruchomić go z bezwzględną ścieżką .
Modyfikacja ŚCIEŻKI w katalogu głównym .bashrc nic nie zmieniła, poprawianie env_reset sudo i env_keep również nie zmieniły.
Więc pytanie: jak dodać katalog do PATH lub zachować PATH użytkownika w sudo?
Aktualizacja: kilka przykładów
$ env | grep PATH
PATH=/usr/local/bin:/usr/bin:/bin:/usr/games:/var/lib/gems/1.8/bin
$ sudo cat /etc/sudoers | egrep -v '^$|^#'
Defaults env_keep = "PATH"
root ALL=(ALL) ALL
%sudo ALL=NOPASSWD: ALL
$ sudo env | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
Mogę też powiedzieć, że działa dokładnie w ten sposób również w stabilnej wersji Debiana (lenny).
Odpowiedzi:
Walczyłem z tym samym problemem przez kilka godzin. W debian lenny możesz to naprawić, dodając
do pliku sudoers.
Jest to jedyny sposób na obejście skompilowanej opcji --secure-path (o ile mi wiadomo).
Warto zauważyć, że będzie to również zwalniają użytkowników z konieczności wprowadzić swoje hasło gdy sudo.
źródło
Jeśli się
secure_path
włączyłeś/etc/sudoers
, możesz grać zenv_reset
/env_keep
wszystkim, co lubisz i nie będzie to miało żadnego wpływu na ścieżkę. Jeśli widzisz coś takiego, skomentuj to.źródło
Powiedziałbym: spójrz na opcje env_reset i env_keep w man sudo . Ale wygląda na to, że już to zrobiłeś (po prostu omyłkowo nazywasz env_keep „keepenv”). Jeśli wyłączysz opcję env_reset (domyślnie jest włączona), myślę, że nie powinno to usuwać żadnych zmiennych env. Ale to jest mniej bezpieczne.
Istnieje również opcja bezpiecznej ścieżki do sudo; Myślę, że jest to domyślnie włączone. Możesz spróbować go wyłączyć.
Powyższe opcje są ustawione w pliku / etc / sudoers. Istnieje również
-i
opcja wiersza polecenia do sudo. Spowoduje to, że sudo uruchomi /root/.profile lub /root/.login. Możesz tam ustawić żądaną ścieżkę.źródło
Robisz coś złego. Ponadto nie określiłeś, co zrobiłeś z plikiem / etc / sudoers. Oto, co powinieneś zrobić - to jest system CentOS, BTW:
Po pierwsze, jest to z właściwym ustawieniem env_keep (zauważ, że PATH tam jest):
Wygląda dobrze. Teraz usuńmy ustawienie env_keep i spróbuj ponownie:
Co za smutna ŚCIEŻKA:
źródło