Я использую Ubuntu 10.04 Server и пытаюсь настроить sudoers в соответствии с выбором редактора пользователя (в определенных пределах)
В моей 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
Я знаю, что мог бы сделать следующие вещи, чтобы заставить РЕДАКТОРА работать:
- Установите
env_editor,env_keep+=EDITORили любую другую опцию, которая хранит переменную EDITOR в sudoers: я не хочу этого делать, так как это может позволить произвольное выполнение чего-либо (например,export EDITOR=~/bad_program_to_run_as_root) - Используйте
sudo -Eили дажеalias sudo='sudo -E': побеждает тот факт, чтоenv_resetи пользователи без SETENV (не то, что я хочу выдать: см. Предыдущий пункт) getsudo: 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 используется в качестве редактора. Ошибка? Или еще одно заблуждение?
Спасибо
