LINUX.ORG.RU

Проблемы с $PATH при использовании sudo


0

0

При выполнении команд через sudo переменная окружения $PATH остаётся такой же, как у пользователя, вызвавшего sudo. В результате например для запуска программ из s-директорий (/sbin/ и т.д.) приходится их вызывать через полный путь, что неудобно. Можно как-то сделать, чтобы при выполнении команд через sudo $PATH и остальные переменные окружения (их не проверял, но есть подозрение, что они тоже остаются как у рядового пользователя, вызвавшего sudo) выставлялись как у root-а? В man sudo и man sudoers смотрел, гуглил, но решения так и не нашёл.

>В man sudo и man sudoers смотрел, гуглил, но решения так и не нашёл.

Врет и не краснеет. Добавить env_reset в секцию Defaults в /etc/sudoers

gotf
()
Ответ на: комментарий от gotf

Вы правы, не краснею, и вы ошиблись, не вру =) Ибо в man sudoers про env_reset написано:

env_reset If set, sudo will reset the environment to only contain the following variables: HOME, LOGNAME, PATH, SHELL, TERM, and USER (in addition to the SUDO_* variables). Of these, only TERM is copied unaltered from the old environment. The other variables are set to default values (possibly modified by the value of the set_logname option). If sudo was compiled with the SECURE_PATH option, its value will be used for the PATH environment variable. Other variables may be preserved with the env_keep option.

Из чего следует, что sudo сбросит в дефолт все переменные окружения, кроме $TERM, но вовсе не следует, что будут браться дефолтные значения для суперюзера. По крайней мере я так понял. Поправьте пожалуйста, если ошибаюсь. Собственно, эксперимент это подтвердил:

...
Defaults env_reset
...

someuser@somehost:~$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/games:/usr/lib/java/bin:/usr/lib/java/jre/bin :.
someuser@somehost:~$ sudo echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/games:/usr/lib/java/bin:/usr/lib/java/jre/bin :.

Betanuzir
() автор топика
Ответ на: комментарий от dexpl

Т.е. вы предлагаете через env_keep вручную прописать в sudoers нужный $PATH? ИМХО, это не совсем кошерный путь. Мне бы как-нибудь так сделать, чтобы sudo сам брал пути от суперюзера, без копипасты этих путей в sudoers =)

Betanuzir
() автор топика
Ответ на: комментарий от Betanuzir

при выполнении команды sudo echo $PATH , подстановка значения переменной производится до собственно выполнения команды. Так что эксперимен проведён неправильно. И env_reset таки работает, sudo sh -c 'echo $PATH' это подтверждает.

Laz ★★★★★
()
Ответ на: комментарий от Betanuzir

Может, сделать, чтоб было как-то так:

[halomachine[jobs:0]----------------------------------------------[gotf][14:29]

[~]$ echo $PATH

/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/bin:/sbin:

/usr/local/sbin:/usr/sbin:/home/gotf/.bin

?

Таким образом, sudo пользовать удобнее. Не думаю, что юзеру повредит расширение $PATH. Алсо, я часто запускаю команды из /sbin и /usr/sbin от простого пользователя(ifconfig, например)

gotf
()

(задумчиво)... Все это фигня, по сравнению с игнорированием LD_LIBRARY_PATH

svu ★★★★★
()
Ответ на: комментарий от gotf

А у меня вот ситуация прямо противоположная: ни так, ни так не работает =(

Betanuzir
() автор топика
Ответ на: комментарий от dexpl

Попробовал вариант с env_keep (хотя из man sudoers следует едва ли не обратное):

...
Defaults env_reset,env_keep=PATH
...

$PATH и ныне там =(

Betanuzir
() автор топика
Ответ на: комментарий от Betanuzir

Блин, так в чем проблема прописать в ~/.bashrc или ~/.zshrc команду export PATH="/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/bin:/sbin:/usr/loca l/sbin:/usr/sbin:/home/user/.bin" ? Проще некуда же :-)

gotf
()
Ответ на: комментарий от gotf

Вариант конечно заманчив своей простотой. Но ИМХО всё же некошерен, ибо решает проблему только с PATH. С остальными переменными окружения подобные проблемы в будущем всё равно могут возникнуть. И не факт, что их удастся решить тем же путём - не делать же пользователю полностью окружение суперюзера.

Betanuzir
() автор топика
Ответ на: комментарий от Betanuzir

>С остальными переменными окружения подобные проблемы в будущем всё равно могут возникнуть.

Например?

//У меня не возникало.

gotf
()

Внезапно, а ты не sudo-ldap часом используешь? А то там действительно было косячье с путем.

sabonez ★☆☆☆
()
Ответ на: комментарий от gotf

>Да, а при $ sudo -i или $ sudo bash[sh|zsh|csh|нужное_подставить] переменные встают как надо?

Нет

Betanuzir
() автор топика
Ответ на: комментарий от sabonez

>Внезапно, а ты не sudo-ldap часом используешь? А то там действительно было косячье с путем.

Вроде нет. Юзаю sudo, которое в дистрибутиве Slackware 12.2 идёт. Там вроде не оно.

Betanuzir
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.