У меня есть доступ 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>
до работы?
Ответы:
Во время работы
sudo
многие системы настраиваются для очистки среды от всех значений, не входящих в белый список, и для сброса переменной PATH в очищенное значение.Вы найдете первый, как
Defaults env_reset
и несколькоDefaults env_keep += "SOME_VARIABLE_NAME"
в/etc/sudoers
. Последнее «безопасное»PATH
переопределение указывается какDefaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
- удалите эту строку, чтобы удалить это поведение при использованииsudo
.Как обрабатывается переменная окружения, печатается при запуске
sudo -V
от имениroot
.Если вы не хотите избавляться от этих значений по умолчанию, вы всегда можете указать программы, используя их полный путь (
sudo /usr/local/bin/vim
).Кроме того, вы можете разрешить свою учетную запись
SETENV
вsudoers
файле, например:Это позволяет вам переопределить параметры среды по умолчанию следующим образом:
sudo PATH=$PATH which vim
переменная интерпретируется вашей оболочкой до выполнения команды, что приводит к наследованиюPATH
(которое, вероятно, не будет включать/sbin
и т. Д.).источник
не делает то, что ты думаешь.
$PATH
заменяется (вашей) оболочкой перед выполнением команды.Чтобы достичь желаемого поведения, вы можете использовать
sudo -i
.От человека Судо :
источник
Пока вы не решите проблему с путями, используйте полный путь
источник