13

У меня есть доступ 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, который, однако, 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> работать?

3 ответа3

17

При запуске 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 , например:

%wheel  ALL=(ALL)       SETENV: ALL

Это позволяет вам переопределить значения по умолчанию среды следующим образом: sudo PATH=$PATH which vim , поскольку переменная интерпретируется вашей оболочкой до выполнения команды, что приводит к наследуемому PATH (который, вероятно, не будет включать /sbin и т.д.).

6
sudo echo $PATH

не делает то, что ты думаешь. $PATH заменяется (вашей) оболочкой перед выполнением команды.

Для достижения желаемого поведения вы можете использовать sudo -i .

От человека Судо:

-i [команда]

Опция -i (имитация начального входа в систему) запускает оболочку, указанную в записи passwd (5) целевого пользователя, в качестве оболочки входа в систему. Это означает, что специфичные для входа файлы ресурсов, такие как .profile или .login будут прочитаны оболочкой. Если указана команда, она передается в оболочку для выполнения.

1

Как заставить sudo <command> работать?

Пока вы не решите проблему с путями, используйте полное имя пути

  sudo /usr/local/bin/vim /var/www/html/index.html

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .