Как правильно настроить редактор sudo/visudo?
Я использую 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
Я знаю, что могу сделать следующие вещи, чтобы редактор работал:
- Задавать
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
- Задавать
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
используется в качестве редактора. Ошибка? Или еще одно заблуждение?
Спасибо
4 ответа
Вы правы, что установка EDITOR
переменная должна изменить редактор, используемый для sudo
, Однако есть две другие переменные с приоритетом над EDITOR
: SUDO_EDITOR
а также VISUAL
, Убедитесь, что ни один из них не указывает на какой-либо другой редактор, например nano
,
Есть другое решение, как описано здесь:
sudo update-alternatives --config editor
Но это не так дружелюбно в многопользовательской системе, поскольку обновляет только символическую ссылку в /usr/bin/
:
$ ls -l `which editor`
lrwxrwxrwx 1 root root 24 lip 4 19:37 /usr/bin/editor -> /etc/alternatives/editor
$ ls -l /etc/alternatives/editor
lrwxrwxrwx 1 root root 18 Jul 5 01:39 /etc/alternatives/editor -> /usr/bin/vim.basic
Что случилось с select-editor
тем не мение? Когда я запускаю его, он создает файл:
$ ls -l .selected_editor
-rw-r--r-- 1 rld rld 75 Jul 5 01:54 .selected_editor
$ cat .selected_editor
# Generated by /usr/bin/select-editor
SELECTED_EDITOR="/usr/bin/vim.basic"
Но sudo visudo
продолжает использовать нано.
В Debian 7 установка EDITOR в среде не работала.
Чтобы использовать Nano, я добавил следующую строку в /etc/sudoers
Defaults editor="/usr/bin/nano"
env_reset не удерживает пользователя от установки переменных в командной строке:
$ sudo EDITOR=vim -- env |grep EDIT
EDITOR=vim
Я нахожу ваши выводы о editor
Вариант слегка шокирующий, но, к сожалению, я не знаю ответов на ваши второстепенные вопросы. Можно было бы подумать, что в лагере Ubuntu будет много документов и примеров конфигурации по этому вопросу, возможно, нам стоит посмотреть сложнее.