Mam dostęp do sudo na moim serwerze znajomych, działającym w Centos-6.3, ale kiedy próbuję uruchomić niektóre polecenia, tak jak pojawia sudo vim /var/www/html/index.html
się błąd sudo: vim: command not found
, mogę jednak uruchomić sudo su
i wtedy vim /var/www/html/index.html
działa to zgodnie z oczekiwaniami.
echo $PATH
i sudo echo $PATH
oba dają:
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/jared/bin
sudo which vim
jednak daje:
which: no vim in (/sbin:/bin:/usr/sbin:/usr/bin)
Próbowałem dodać
export PATH=$PATH:/usr/local/bin
na /root/.bashrc
które naprawiono problem podczas używania, sudo su
ale nie tylko sudo <command>
.
Jak dostać się sudo <command>
do pracy?
Odpowiedzi:
Podczas działania
sudo
wiele systemów jest skonfigurowanych do usuwania środowiska ze wszystkich wartości nie znajdujących się na białej liście i do resetowania zmiennej PATH do wartości dezynfekowanej.Znajdziesz pierwszy
Defaults env_reset
i kilkaDefaults env_keep += "SOME_VARIABLE_NAME"
w/etc/sudoers
. To ostatnie „bezpieczne”PATH
zastąpienie jest określone jakoDefaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
- usuń ten wiersz, aby usunąć to zachowanie podczassudo
ing.Sposób obsługi zmiennej środowiskowej jest drukowany po uruchomieniu
sudo -V
jakoroot
.Jeśli nie chcesz pozbyć się tych ustawień domyślnych, zawsze możesz określić programy przy użyciu ich pełnej ścieżki (
sudo /usr/local/bin/vim
).Alternatywnie możesz zezwolić swojemu kontu
SETENV
wsudoers
pliku, na przykład:Pozwala to na przesłonięcie domyślnych ustawień środowiska w ten sposób:
sudo PATH=$PATH which vim
ponieważ zmienna jest interpretowana przez powłokę przed wykonaniem polecenia, co powoduje odziedziczeniePATH
(które prawdopodobnie nie będzie zawierać/sbin
itp.).źródło
nie robi tego, co myślisz.
$PATH
zostaje zastąpiony (twoją) powłoką przed wykonaniem polecenia.Aby osiągnąć pożądane zachowanie, możesz użyć
sudo -i
.Od man sudo :
źródło
Dopóki nie rozwiążesz problemu ze ścieżkami, użyj pełnej nazwy ścieżki
źródło