Muszę uruchomić program zainstalowany na / opt / godi / sbin (katalog niestandardowy). Jeśli dodam ten katalog do mojej ŚCIEŻKI, dodając następujący wiersz do mojego pliku .bashrc
export PATH=$PATH:/opt/godi/bin:/opt/godi/sbin
wtedy mogę spróbować uruchomić polecenie w porządku (z wyjątkiem tego, że nie powiedzie się, ponieważ wymaga sudo). Jednak gdy próbuję użyć sudo:
sudo godi_console
Pojawia się następujący błąd
sudo: godi_console: command not found
Sprawdzanie zmiennej PATH po użyciu sudo ujawnia, że nie zawiera ona tej samej PATH, którą mam jako zwykły użytkownik:
$ sudo sh
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Dlaczego ŚCIEŻKA nie jest taka sama? czy robię coś źle? Jestem na Debianie Jessie i niestety nie mogę obejść tego problemu, przekazując sudo absolutny link do godi_console, ponieważ sama godi_console zależy również od prawidłowego ustawienia PATH.
sudo -E godi_console
.-E
oznacza „chronić środowisko”.secure_path
i / lub env_reset są skonfigurowane tak jak ma to miejsce w wielusudo
wdrożeniach, takich jak Debian.su
niesudo
jest: unix.stackexchange.com/questions/460478 .Odpowiedzi:
Zawsze możesz zrobić:
Ze względów bezpieczeństwa na Debianie,
/etc/sudoers
posiadasecure_path
zestaw opcji do bezpiecznej wartości.Uwaga:
W przypadku gdy
sudo
traktuje wiodące argumenty zawierające=
znaki jako przypisania zmiennych środowiskowych, działałoby to również przy pracygodi_console
z twoim$PATH
(w przeciwieństwie dosecure_path
) w jego środowisku, ale nie wpływałoby nasudo
ścieżkę wyszukiwania plików wykonywalnych, więc nie pomogłoby tosudo
znaleźćgodi_console
.źródło
sudo "PATH=$PATH" godi_console
Nawiasem mówiąc, nie działał w CentOs7. Potrzebował envsudo "PATH=$PATH" godi_console
kiedykolwiek naprawdę działa?sudo
przyjmujeVAR=value
argumentów, mających wpływ na środowisko polecenia to działa, ale w przeciwieństwie doenv
lubbash
,sudo
nie wydaje się, aby to miało wpływ, jak to wygląda w górę komendę. Testowałem to (ostatnio) na Ubuntu 16.04. Ale próbowałem dodaćexempt_group
opcjęsudoers
(tylko do testów - nie uważam tego za rozwiązanie!), A wyniki były olśniewające. Polecenia formularzaPATH="$PATH" sudo some-command
zaczęły działać, ale polecenia formularzasudo PATH="$PATH" some-command
nadal nie działały .Możesz także ustawić domyślną ŚCIEŻKĘ na
/etc/sudoers
edytować plik za pomocą
visudo
i zaktualizuj linię do tego, co chcesz:
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
źródło
SUDO domyślnie resetuje zmienne env.
Sprawdź jego instrukcję i opcję o nazwie env_reset.
Musisz go tylko wyłączyć w / etc / sudoers.
źródło
env_reset
wydaje się nie wpływać nasudo
zachowanie w / r / t ŚCIEŻKA.To działa :
Przykład wywołania mojego
gps
skryptu, który wyświetla procesy GPU Nvidii:Objaśnienie:
źródło
to przecina bezpieczną ścieżkę na moim końcu
źródło
To działało:
Nie zmieniaj $ PATH z wartością ścieżki, po prostu napisz to w ten sposób
przykład:
$ sudo env "PATH=$PATH" ant -f webAppConfig.xml regenWebAppConf....
źródło
Może nie dokładnie to, o co prosi OP, ale może to pomóc:
Zmienia ŚCIEŻKA wewnątrz polecenia sudoed.
Edycja: Nie jestem pewien, co miałam na myśli, ponieważ powyższe jest w zasadzie nonsensem. Zamiast tego użyj następujących opcji:
źródło