Jak ustawić ścieżkę dla poleceń sudo

37

Jeśli wydam

sudo my-command

jak Linux na to wygląda my-command?

my-commandJest w moim PATH. Mogę przywołać to bez żadnego problemu. Kiedy jednak go przywołam sudo, dostanę command not found. Ciekawe, nigdy wcześniej tego nie doświadczaj. Jak przezwyciężyć?

EDIT: To „Możliwy duplikat” jest wybrana odpowiedź jest źle, dobrze, przynajmniej nie do tego stopnia. Ta odpowiedź Terdona jest poprawna.

xpt
źródło

Odpowiedzi:

48

Zwykle jest to ustawiane przez secure_pathopcję w /etc/sudoers. Od man sudoers:

 secure_path   Path used for every command run from sudo.  If you don't
               trust the people running sudo to have a sane PATH environ‐
               ment variable you may want to use this.  Another use is if
               you want to have the “root path” be separate from the “user
               path”.  Users in the group specified by the exempt_group
               option are not affected by secure_path.  This option is not
               set by default.

Aby uruchomić polecenia, które nie są ustawione domyślnie $PATH, możesz albo

  1. Użyj pełnej ścieżki sudo ~/bin/my-command:; lub

  2. Dodaj katalog zawierający polecenie do secure_path. Uruchom sudo visudoi edytuj bezpieczną linię ścieżki:

    Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/youruser/bin/"
    

    Zapisz plik, a przy następnym uruchomieniu sudokatalog ~/binbędzie w nim $PATH.

terdon
źródło
2
Lub po prostu skomentuj całą linię, jeśli nie jest to maszyna produkcyjna, a nas to nie obchodzi. Następnie użyje ŚCIEŻKI użytkownika. Mówi, że nie jest ustawione domyślnie, ale nie zawsze może to być prawda ...
Nagev
2

Oto, czego użyłem do obejścia:

sudo cp $(which my-command) /usr/bin
...

whichPolecenie jest wykonywane w podpowłoce, który jest non-korzeń, dzięki czemu jest w stanie znaleźć my-command, a potem sudo kopii pliku wykonywalnego na ścieżkę, że rootdostęp może użytkownik. Nie jest to świetne ze względu na bezpieczeństwo, ale dla mnie było w porządku uruchomienie obrazu dokera, który był niszczony zaraz po uruchomieniu polecenia.

Brenden Smith
źródło