.png)
У меня есть доступ sudo на сервере моего друга, работающем под управлением centos-6.3, но когда я пытаюсь выполнить некоторые команды, sudo vim /var/www/html/index.html
я получаю сообщение об ошибке sudo: vim: command not found
, однако я могу запустить sudo su
и затем , vim /var/www/html/index.html
и все работает так, как и ожидалось.
echo $PATH
и sudo echo $PATH
оба результата:
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/jared/bin
sudo which vim
однако дает:
which: no vim in (/sbin:/bin:/usr/sbin:/usr/bin)
Я пробовал добавлять
export PATH=$PATH:/usr/local/bin
к /root/.bashrc
которому как исправлена проблема при использовании, sudo su
но не только sudo <command>
.
Как мне добраться sudo <command>
до работы?
решение1
При запуске sudo
многие системы настроены на очистку среды от всех значений, не входящих в белый список, и сброс переменной PATH до очищенного значения.
Первый вариант вы найдете как Defaults env_reset
и несколько Defaults env_keep += "SOME_VARIABLE_NAME"
в /etc/sudoers
. Последний вариант «безопасного» PATH
переопределения указан как Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
– удалите эту строку, чтобы удалить это поведение при sudo
ing.
То, какая переменная среды обрабатывается, отображается при sudo -V
запуске root
.
Если вы не хотите избавляться от этих значений по умолчанию, вы всегда можете указать программы, используя их полный путь ( sudo /usr/local/bin/vim
).
В качестве альтернативы вы можете разрешить своей учетной записи находиться SETENV
в sudoers
файле, например:
%wheel ALL=(ALL) SETENV: ALL
Это позволяет вам переопределять значения среды по умолчанию следующим образом: sudo PATH=$PATH which vim
, поскольку переменная интерпретируется вашей оболочкой до выполнения команды, что приводит к унаследованному значению PATH
(которое, скорее всего, не будет включать /sbin
и т. д.).
решение2
sudo echo $PATH
не делает то, что вы думаете. $PATH
заменяется (вашей) оболочкойдовыполнение команды.
Чтобы добиться желаемого поведения, вы можете использовать sudo -i
.
Отчеловек судо:
-i [команда]
The-я(имитировать первоначальный вход в систему) опция запускает оболочку, указанную впароль(5) запись целевого пользователя как оболочки входа. Это означает, что файлы ресурсов, специфичные для входа, такие как
.profile
или.login
будут прочитаны оболочкой. Если указана команда, она передается оболочке для выполнения.
решение3
Как мне добраться
sudo <command>
до работы?
Пока вы не решите проблему с путями, используйте полный путь.
sudo /usr/local/bin/vim /var/www/html/index.html