Мне нужно запустить программу, установленную в / opt / godi / sbin (пользовательский каталог). Если я добавлю этот каталог в мой путь, добавив следующую строку в мой файл .bashrc
export PATH=$PATH:/opt/godi/bin:/opt/godi/sbin
тогда я могу попытаться выполнить команду просто отлично (за исключением того, что она терпит неудачу, потому что она нуждается в sudo). Однако, когда я пытаюсь использовать sudo:
sudo godi_console
Я получаю следующую ошибку
sudo: godi_console: command not found
Проверка переменной PATH после использования sudo показывает, что она не включает ту же переменную PATH, что и у обычного пользователя:
$ sudo sh
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Почему ПУТЬ не то же самое? Я делаю что-то неправильно? Я работаю в Debian Jessie и, к сожалению, я не могу обойти эту проблему, передав sudo абсолютную ссылку на godi_console, потому что сама godi_console также зависит от правильной установки PATH.
sudo -E godi_console
.-E
означает «сохранить окружающую среду».secure_path
и / или env_reset сконфигурированы, как это имеет место во многихsudo
развертываниях, как в Debian.su
нетsudo
, является unix.stackexchange.com/questions/460478 .Ответы:
Вы всегда можете сделать:
В качестве меры безопасности на Debian,
/etc/sudoers
имеетsecure_path
опцию установить безопасное значение.Обратите внимание, что:
Где
sudo
трактует ведущие аргументы, содержащие=
символы, как присваивания переменных среды, также будет работать при работеgodi_console
с вашим$PATH
(в отличие отsecure_path
) в его среде, но не повлияетsudo
на путь поиска исполняемого файла, поэтому не поможетsudo
в его поискеgodi_console
.источник
sudo "PATH=$PATH" godi_console
не работал в CentOs7 кстати. Нужен envsudo "PATH=$PATH" godi_console
нибудь действительно работает?sudo
принимаетVAR=value
аргументы, влияющие на среду запускаемой команды, но в отличие отenv
илиbash
,sudo
похоже, не позволяет этому влиять на то, как выглядит команда. Я только что протестировал это (недавно) на Ubuntu 16.04. Но я попытался добавить этуexempt_group
опцию вsudoers
(просто для тестирования - я не считаю это решением!), И результаты оказались поразительными. Команды формPATH="$PATH" sudo some-command
начали работать, но те формы доsudo PATH="$PATH" some-command
сих пор не сделали.Вы также можете установить PATH по умолчанию в
/etc/sudoers
отредактируйте файл используя
visudo
и обновите строку так, как вы хотите:
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
источник
SUDO выполняет сброс переменных env по умолчанию.
Ознакомьтесь с его руководством и опцией env_reset.
Вам просто нужно отключить его в / etc / sudoers.
источник
env_reset
похоже, не влияетsudo
на поведение w / r / t PATH.Это работает :
Пример вызова моего
gps
скрипта, в котором перечислены процессы графического процессора Nvidia:Пояснение:
источник
это ovverrides secure_path на моем конце
источник
Это сработало:
Не меняйте $ PATH со своим значением пути, вы просто пишете это так
пример:
$ sudo env "PATH=$PATH" ant -f webAppConfig.xml regenWebAppConf....
источник
Может быть, не совсем то, что запрашивает OP, но это может помочь:
Это изменяет PATH внутри команды sudoed.
Редактировать: я не уверен, что я имел в виду под этим, так как вышесказанное в значительной степени глупость. Вместо этого используйте следующее:
источник