Я использую Ubuntu 10.04 Server и пытаюсь настроить sudoers, чтобы уважать выбор пользователя EDITOR (в определенных пределах)
В моей sudoers я имею:
Defaults editor=/usr/bin/nano:/usr/bin/vim
Defaults env_reset
А в пользователе .bashrc:
export EDITOR=/usr/bin/vim
$ РЕДАКТОР установлен:
$ echo $EDITOR
/usr/bin/vim
В соответствии с man sudoersэтим должно быть достаточно для $ EDITOR для установки vim:
editor A colon (':') separated list of editors allowed to be used with visudo.
visudo will choose the editor that matches the user's EDITOR environment
variable if possible, or the first editor in the list that exists and is
executable. The default is the path to vi on your system.
Однако nanoвсе еще используется для этого пользователя. Быстрая проверка env:
$ sudo -- env | grep EDITOR
Ничего не возвращает
$ sudo -E -- env | grep EDITOR
Возвращает EDITOR=/usr/bin/vim
Я знаю, что могу сделать следующие вещи, чтобы редактор работал:
- Set
env_editor,env_keep+=EDITORили любой другой вариант , который хранит переменную EDITOR в sudoers: Я не хочу , чтобы это сделать , поскольку это может позволить выполнение произвольного чего - либо (напримерexport EDITOR=~/bad_program_to_run_as_root) - Использование
sudo -Eили дажеalias sudo='sudo -E': победить смысл того, чтоenv_resetи пользователи без SETENV (не то, что я хочу выдать: см. Предыдущий пункт) получитьsudo: sorry, you are not allowed to preserve the environment - Set
editor=/usr/bin/vim: Но есть и другие пользователи, которые не знают vim - Использование
sudo select-editor: Закрыть, ноsudo visudoвсе еще открывается вnano - Просто используйте sudoedit или VIM непосредственно: Но тогда вы теряете безопасность инструментов , таких как
visudo,vipw,crontab -e. - Просто смирись с этим: возможно, но если мне не хватает некоторого понимания, я хотел бы знать
Я также попытался установить VISUALи SUDO_EDITORпеременные (в отчаянии)
Есть ли что-то, что я пропустил, что sudo visudoоткроет в редакторе пользователей по выбору, не делая компромиссы выше?
РЕДАКТИРОВАТЬ:
Я думаю, я понимаю, почему это не работает, как я ожидаю. Я отложу это здесь на тот случай, если кто-то еще будет иметь такое же заблуждение.
В файле sudoers
Defaults editor=/usr/bin/nano:/usr/bin/vim
- Относится только к списку редакторов, которые разрешены при запуске
visudo(не любая другая программа) editorчеки $ EDITOR, но если работаетsudo visudo,sudoне устанавливает $ EDITOR, поэтому , когдаvisudoработает он будет пустым- Поэтому первый редактор используется, в этом случае
nano
Кто-нибудь может подтвердить, что это правильно?
Поэтому я ожидал, что безопасным решением будет добавить:
Defaults!/usr/sbin/visudo env_keep+=EDITOR
т.е. держать редактор, если и только если работает Visudo. Это тогда будет проверено против
Defaults editor=/usr/bin/nano:/usr/bin/vim
И если бы он не совпадал, то использовал бы nano
Как ни странно, это не так:
$ sudo su - root
# export EDITOR=/bin/echo
# visudo
/etc/sudoers.tmp
visudo: /etc/sudoers.tmp unchanged
/bin/echoиспользуется в качестве редактора. Ошибка? Или еще одно заблуждение?
Благодарность
VISUALприоритетEDITOR. Я думал, что мояEDITORпеременная просто игнорируется. Оказывается, в Centos7 обаEDITORиVISUALкажутся по умолчаниюpico.