Dlaczego nie mogę sudo niektórych poleceń? (np. vim)

16

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.htmlsię błąd sudo: vim: command not found, mogę jednak uruchomić sudo sui wtedy vim /var/www/html/index.htmldziała to zgodnie z oczekiwaniami.

echo $PATHi sudo echo $PATHoba 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/.bashrcktóre naprawiono problem podczas używania, sudo suale nie tylko sudo <command>.

Jak dostać się sudo <command>do pracy?

JaredMcAteer
źródło
Czy już dodałeś tego użytkownika do sudoers w Centos OS?
AAlvz

Odpowiedzi:

18

Podczas działania sudowiele 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_reseti kilka Defaults env_keep += "SOME_VARIABLE_NAME"w /etc/sudoers. To ostatnie „bezpieczne” PATHzastąpienie jest określone jako Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin- usuń ten wiersz, aby usunąć to zachowanie podczas sudoing.


Sposób obsługi zmiennej środowiskowej jest drukowany po uruchomieniu  sudo -Vjako root.


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 SETENVw sudoerspliku, na przykład:

%wheel  ALL=(ALL)       SETENV: ALL

Pozwala to na przesłonięcie domyślnych ustawień środowiska w ten sposób: sudo PATH=$PATH which vimponieważ zmienna jest interpretowana przez powłokę przed wykonaniem polecenia, co powoduje odziedziczenie PATH(które prawdopodobnie nie będzie zawierać /sbinitp.).

Daniel Beck
źródło
Dzięki. Użyję pracy Dennisa, dopóki nie pozwolę właścicielowi przyznać się do pliku sudoers.
JaredMcAteer
6
sudo echo $PATH

nie robi tego, co myślisz. $PATHzostaje zastąpiony (twoją) powłoką przed wykonaniem polecenia.

Aby osiągnąć pożądane zachowanie, możesz użyć sudo -i.

Od man sudo :

-i [polecenie]

Opcja -i ( symuluj początkowe logowanie ) uruchamia powłokę określoną we wpisie passwd (5) użytkownika docelowego jako powłokę logowania. Oznacza to, że pliki zasobów specyficzne dla logowania, takie jak .profilelub .loginbędą odczytywane przez powłokę. Jeśli podano polecenie, jest ono przekazywane do powłoki w celu wykonania.

Dennis
źródło
1
Jest to odpowiednie obejście, dopóki nie będę w stanie skłonić właściciela do dostosowania pliku sudoers.
JaredMcAteer
1

Jak dostać się sudo <command>do pracy?

Dopóki nie rozwiążesz problemu ze ścieżkami, użyj pełnej nazwy ścieżki

  sudo /usr/local/bin/vim /var/www/html/index.html
RedGrittyBrick
źródło
5
Nie jadę do downvote cię, ale jestem po prostu nie lubi pracować wokół problemów raczej niż uzyskanie prawa do punktu zastanawianie je i je naprawiać.
Nicole Hamilton,