sudo и переменные окружения

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
shau-kote
Сообщения: 417
Статус: злобный хоббит
ОС: Arch

sudo и переменные окружения

Сообщение shau-kote »

Никак не пойму, почему sudo работает вразнос с переменными окружения.

Во-первых, $PATH. Как сделать так, что бы при выполнении

Код: Выделить всё

% sudo command
command искалась в рутовском $PATH, а не в пользовательском?

Во-вторых:

Код: Выделить всё

[shau-kote:~]% type vi                                              22:27 pts/0
vi is an alias for vim
[shau-kote:~]% su -                                                 22:27 pts/0
Пароль:
[root:~]# type vi                                                   22:27 pts/0
vi is an alias for vim
[root:~]# out                                                       22:27 pts/0
[shau-kote:~]% vi -h                                                22:27 pts/0
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Sep  4 2010 16:26:46)
<...>
[shau-kote:~]% sudo vim -h                                          22:29 pts/0
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Sep  4 2010 16:26:46)
<...>
[shau-kote:~]% sudo vi -h                                           22:29 pts/0
vi: illegal option -- h
Usage: vi [- | -s] [-l] [-L] [-R] [-r [file]] [-t tag]
       [-v] [-V] [-w size] [+cmd | -c cmd] file...

Как сделать так, чтобы sudo vi вызывала vim, а не vi?.. :huh:
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4471
Статус: GNU generation
ОС: Debian GNU/Linux

Re: sudo и переменные окружения

Сообщение Rootlexx »

shau-kote писал(а):
22.10.2010 22:33
Никак не пойму, почему sudo работает вразнос с переменными окружения.

Во-первых, $PATH. Как сделать так, что бы при выполнении

Код: Выделить всё

% sudo command
command искалась в рутовском $PATH, а не в пользовательском?

Почитайте man sudoers на предмет опций env_keep, env_delete и env_reset.
shau-kote писал(а):
22.10.2010 22:33
Во-вторых:

Код: Выделить всё

[shau-kote:~]% type vi                                              22:27 pts/0
vi is an alias for vim
[shau-kote:~]% su -                                                 22:27 pts/0
Пароль:
[root:~]# type vi                                                   22:27 pts/0
vi is an alias for vim
[root:~]# out                                                       22:27 pts/0
[shau-kote:~]% vi -h                                                22:27 pts/0
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Sep  4 2010 16:26:46)
<...>
[shau-kote:~]% sudo vim -h                                          22:29 pts/0
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Sep  4 2010 16:26:46)
<...>
[shau-kote:~]% sudo vi -h                                           22:29 pts/0
vi: illegal option -- h
Usage: vi [- | -s] [-l] [-L] [-R] [-r [file]] [-t tag]
       [-v] [-V] [-w size] [+cmd | -c cmd] file...

Как сделать так, чтобы sudo vi вызывала vim, а не vi?.. :huh:

Псевдоним - это функция оболочки, а так как команда передаётся sudo как параметр, то для неё не подставляется псевдоним.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5498
ОС: Gentoo

Re: sudo и переменные окружения

Сообщение /dev/random »

shau-kote писал(а):
22.10.2010 22:33
Во-первых, $PATH. Как сделать так, что бы при выполнении

Код: Выделить всё

% sudo command
command искалась в рутовском $PATH, а не в пользовательском?

sudo должен найти полный путь к команде прежде чем сможет найти правило в sudoers и определить, можно ли выходить под рута. Поэтому он не может к этому времени выполнить никаких скриптов рута, в которых может быть прописан рутовский PATH. Продублируйте его в sudoers, опция secure_path.

shau-kote писал(а):
22.10.2010 22:33
Во-вторых:

sudo не работает с алиасами. Даже оболочка с ними работает только если запущена в интерактивном режиме. Т.е. алиасы работают только если вы их напрямую ввели в командной строке шелла. Во всех остальных случаях они игнорируются.

И ещё: в большинстве случаев не стоит запускать редактор от рута. Почитайте man sudo на предмет опции -e.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: sudo и переменные окружения

Сообщение sash-kan »

Rootlexx писал(а):
22.10.2010 23:19
shau-kote писал(а):
22.10.2010 22:33
Никак не пойму, почему sudo работает вразнос с переменными окружения.

Во-первых, $PATH. Как сделать так, что бы при выполнении

Код: Выделить всё

% sudo command
command искалась в рутовском $PATH, а не в пользовательском?

Почитайте man sudoers на предмет опций env_keep, env_delete и env_reset.
а до этого рекомендую почитать о SECURE_PATH build option
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
shau-kote
Сообщения: 417
Статус: злобный хоббит
ОС: Arch

Re: sudo и переменные окружения

Сообщение shau-kote »

/dev/random писал(а):
22.10.2010 23:28
sudo не работает с алиасами. Даже оболочка с ними работает только если запущена в интерактивном режиме. Т.е. алиасы работают только если вы их напрямую ввели в командной строке шелла. Во всех остальных случаях они игнорируются.

То есть заставить sudo вызывать команды через алиасы не представляется возможным?

/dev/random писал(а):
22.10.2010 23:28
И ещё: в большинстве случаев не стоит запускать редактор от рута.

Эмм... А кроме наличия опции -e на это есть какие-то причины?

/dev/random писал(а):
22.10.2010 23:28
Почитайте man sudo на предмет опции -e.

Спасибо, понял.

sash-kan писал(а):
23.10.2010 13:34
а до этого рекомендую почитать о SECURE_PATH build option

Хм. А это откуда?.. Из числа опций, передаваемых ./configure?..
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5498
ОС: Gentoo

Re: sudo и переменные окружения

Сообщение /dev/random »

shau-kote писал(а):
26.10.2010 02:41
Эмм... А кроме наличия опции -e на это есть какие-то причины?

Да. Если позволить кому-то запускать редактор от имени рута, это позволит ему делать всё, т.к. большинство редакторов позволяют открывать другие файлы, когда редактор уже запущен. Опция -e позволяет выдать права на редактирование строго определённых файлов.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: sudo и переменные окружения

Сообщение sash-kan »

shau-kote писал(а):
26.10.2010 02:41
Из числа опций, передаваемых ./configure?..
совершенно верно. насколько я в курсе, традиционным невключением этой опции страдает redhat и его derivatives.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
shau-kote
Сообщения: 417
Статус: злобный хоббит
ОС: Arch

Re: sudo и переменные окружения

Сообщение shau-kote »

sash-kan писал(а):
26.10.2010 16:27
совершенно верно. насколько я в курсе, традиционным невключением этой опции страдает redhat и его derivatives.

Эмм... А как посмотреть список build options для уже собранной дистростроителями программы?
Спасибо сказали:
Аватара пользователя
sgfault
Сообщения: 586
Статус: -

Re: sudo и переменные окружения

Сообщение sgfault »

shau-kote писал(а):
26.10.2010 02:41
То есть заставить sudo вызывать команды через алиасы не представляется возможным?


Из info bash (6.6 Aliases):
Aliases allow a string to be substituted for a word when it is used as the first word of a simple command.


В вашем случае алиас не является первым словом 'simple command' (3.2 Shell Commands).

(это все относится только к баш, впрочем)

UPD.
/dev/random писал(а):
22.10.2010 23:28
Даже оболочка с ними работает только если запущена в интерактивном режиме.

Что, впрочем, в скрипте можно исправить с помощью (в баше)

Код: Выделить всё

shopt -s expand_aliases

Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: sudo и переменные окружения

Сообщение sash-kan »

shau-kote писал(а):
26.10.2010 16:53
А как посмотреть список build options для уже собранной дистростроителями программы?
спросите у дистростроителей.
а в вашем случае смотреть не на что.
$ sudo fdisk
не находит путь к /sbin/fdisk? значит, sudo собран без SECURE_PATH
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
shau-kote
Сообщения: 417
Статус: злобный хоббит
ОС: Arch

Re: sudo и переменные окружения

Сообщение shau-kote »

sash-kan писал(а):
26.10.2010 22:50
$ sudo fdisk
не находит путь к /sbin/fdisk? значит, sudo собран без SECURE_PATH

Не находит. :(
Непременно нужно пересобирать?..

sgfault, у меня zsh, но сути дела это в данном случае не меняет... :(
Спасибо сказали:
Аватара пользователя
shau-kote
Сообщения: 417
Статус: злобный хоббит
ОС: Arch

Re: sudo и переменные окружения

Сообщение shau-kote »

:( Пока вкуривал man, совсем запутался...

Код: Выделить всё

Пароль:
[shau-kote:~]% sudo echo $UID                                        0:26 pts/1
1000
[shau-kote:~]% sudo echo $USER                                       0:27 pts/1
shau-kote
[shau-kote:~]% sudo -H echo $HOME                                    0:27 pts/1
/home/shau-kote

Разве sudo не должен менять эти переменные на root'овские?.. :huh:
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: sudo и переменные окружения

Сообщение watashiwa_daredeska »

В том виде, как Вы их привели, они не доходят до sudo. Их подставляет шелл, в котором Вы запускаете эти команды.

P.S. Попробуйте запускать под судо так: sudo [options] sh -c 'echo $VAR'.
Спасибо сказали:
Аватара пользователя
shau-kote
Сообщения: 417
Статус: злобный хоббит
ОС: Arch

Re: sudo и переменные окружения

Сообщение shau-kote »

Ага, понятно...
Но почему-то

Код: Выделить всё

[shau-kote:~]% sudo sh -c 'echo $HOME'                              18:55 pts/0
/root

Хотя нет ни аргумента -H в команде, ни опции "always_set_home" в конфиге нет... :huh:
Спасибо сказали:
Аватара пользователя
shau-kote
Сообщения: 417
Статус: злобный хоббит
ОС: Arch

Re: sudo и переменные окружения

Сообщение shau-kote »

Пересобрал sudo c --with-secure-path, проблема с PATH решилась. :) Непонятно только, какой смысл в сборке sudo без этой опции?..
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5498
ОС: Gentoo

Re: sudo и переменные окружения

Сообщение /dev/random »

Задайте вопрос дистростроителям.
Спасибо сказали:
Аватара пользователя
shau-kote
Сообщения: 417
Статус: злобный хоббит
ОС: Arch

Re: sudo и переменные окружения

Сообщение shau-kote »

Нет, в смысле, какие вообще потенциальные преимущества даёт отключение этой опции?.. Её же зачем-то сделали, так?..
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: sudo и переменные окружения

Сообщение sash-kan »

shau-kote писал(а):
08.11.2010 17:53
Ага, понятно...
Но почему-то

Код: Выделить всё

[shau-kote:~]% sudo sh -c 'echo $HOME'                              18:55 pts/0
/root

Хотя нет ни аргумента -H в команде, ни опции "always_set_home" в конфиге нет... :huh:
смотрите на дефолтное поведение, которое можно узнать командой
$ sudo sudo -V
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
shau-kote
Сообщения: 417
Статус: злобный хоббит
ОС: Arch

Re: sudo и переменные окружения

Сообщение shau-kote »

Эмм... А как понимать фразу
Environment variables to check for sanity
?..
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: sudo и переменные окружения

Сообщение sash-kan »

<google translate>переменные среды для проверки вменяемости</google translate>
переменные среды, содержимое которых проверяется.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5498
ОС: Gentoo

Re: sudo и переменные окружения

Сообщение /dev/random »

В информационной безопасности sanity ("вменяемость") - это отсутствие потенциально вредоносного содержимого.
Спасибо сказали:
Аватара пользователя
shau-kote
Сообщения: 417
Статус: злобный хоббит
ОС: Arch

Re: sudo и переменные окружения

Сообщение shau-kote »

Ясно... Но вот у меня в выводе

Код: Выделить всё

sudo sudo -V
HOME не упоминается. Когда тогда понимать "дефолтное поведение" sudo касательно переменной HOME?.. :huh:
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: sudo и переменные окружения

Сообщение sash-kan »

shau-kote писал(а):
09.11.2010 00:42
HOME не упоминается
не упоминается в секции preserve, значит, не передаётся по умолчанию. что ж тут непонятного?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
shau-kote
Сообщения: 417
Статус: злобный хоббит
ОС: Arch

Re: sudo и переменные окружения

Сообщение shau-kote »

Теперь ничего, спасибо. :)
Спасибо сказали:
Аватара пользователя
shau-kote
Сообщения: 417
Статус: злобный хоббит
ОС: Arch

Re: sudo и переменные окружения

Сообщение shau-kote »

А автодополнение команды, как я понимаю, работает только в том случае, если вводимая команда есть в PATH юзера?.. Или можно настроить и так, чтобы и для команд, которые есть только в PATH root'а шелл дополнял команду?
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: sudo и переменные окружения

Сообщение sash-kan »

shau-kote писал(а):
09.11.2010 21:47
А автодополнение команды, как я понимаю, работает только в том случае, если вводимая команда есть в PATH юзера?.. Или можно настроить и так, чтобы и для команд, которые есть только в PATH root'а шелл дополнял команду?
речь про bash-completion?
поставьте человеческую (менее урезанную или более новую) версию.
в debian (например), прекрасно работает дополнение имён программ, находящихся в /sbin:/usr/sbin:/usr/local/sbin, после ввода "sudo ".
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
shau-kote
Сообщения: 417
Статус: злобный хоббит
ОС: Arch

Re: sudo и переменные окружения

Сообщение shau-kote »

Нет, речь про zsh. В смысле шелл имеет потенциальную возможность производить поиск команды для дополнения в PATH root'а?..
По идее-то в момент набирания пользователем команды шелл про PATH root'а не знает и доступа к нему не имет...
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5498
ОС: Gentoo

Re: sudo и переменные окружения

Сообщение /dev/random »

shau-kote писал(а):
10.11.2010 09:33
По идее-то в момент набирания пользователем команды шелл про PATH root'а не знает и доступа к нему не имет...

В bash-completion он, если команда начинается с sudo, просто добавляет к PATH его же, но заменив "/bin/" на "/sbin/". Как правило, этого хватает.
Можно ли аналогичным образом запрограммировать автодополнение в zsh - не знаю.
Спасибо сказали:
Аватара пользователя
shau-kote
Сообщения: 417
Статус: злобный хоббит
ОС: Arch

Re: sudo и переменные окружения

Сообщение shau-kote »

/dev/random писал(а):
10.11.2010 09:57
В bash-completion он, если команда начинается с sudo, просто добавляет к PATH его же, но заменив "/bin/" на "/sbin/". Как правило, этого хватает.
Можно ли аналогичным образом запрограммировать автодополнение в zsh - не знаю.

Понял, спасибо.
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: sudo и переменные окружения

Сообщение ZyX »

/dev/random писал(а):
10.11.2010 09:57
shau-kote писал(а):
10.11.2010 09:33
По идее-то в момент набирания пользователем команды шелл про PATH root'а не знает и доступа к нему не имет...

В bash-completion он, если команда начинается с sudo, просто добавляет к PATH его же, но заменив "/bin/" на "/sbin/". Как правило, этого хватает.
Можно ли аналогичным образом запрограммировать автодополнение в zsh - не знаю.

Разумеется. Вот, например:

(Created by format.vim)

# Написание $path маленькими буквами сделано намеренно и не является ошибкой. # См. «man zshparam» (второй абзац в секции «PARAMETERS USED BY THE SHELL») zstyle ':completion:*:sudo:*' command-path $path /sbin /usr/sbin /usr/local/sbin




Ответ найден здесь: http://lists.debian.org/debian-russian/2009/06/msg00544.html.
Спасибо сказали: