Как правильно настроить редактор sudo / visudo?

18

Я использую 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используется в качестве редактора. Ошибка? Или еще одно заблуждение?

Благодарность

Марк С
источник

Ответы:

6

Вы правы, что установка EDITORпеременной должна изменить редактор, используемый для sudo. Однако есть две другие переменные с приоритетом над EDITOR: SUDO_EDITORи VISUAL. Убедитесь, что ни один из них не указывает на какой-либо другой редактор, например nano.

парень
источник
Причина, по которой я проголосовал, заключается в том, что так мало ответов указывают на VISUALприоритет EDITOR. Я думал, что моя EDITORпеременная просто игнорируется. Оказывается, в Centos7 оба EDITORи VISUALкажутся по умолчанию pico.
три
5

Есть другое решение, как описано здесь :

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продолжает использовать нано.

RLD.
источник
3

В Debian 7 установка EDITOR в среде не работала.

Чтобы использовать Nano, я добавил следующую строку в /etc/sudoers

Defaults        editor="/usr/bin/nano"
kim3er
источник
РАБОТАЕТ КАК ЧЕМПИОН на DigitalOcean Ubuntu 12.04. Благодарю.
Джо Кодсвелл user601770
Спасибо. Это также работало на Oracle Linux. (Мне нравится нано / пико.)
MikeP
1

env_reset не удерживает пользователя от установки переменных в командной строке:

$ sudo EDITOR=vim -- env |grep EDIT
EDITOR=vim

Я нахожу ваши выводы об этом editorварианте слегка шокирующими, но, к сожалению, я не знаю ответов на ваши второстепенные вопросы. Можно было бы подумать, что в лагере Ubuntu будет много документов и примеров конфигурации по этому вопросу, возможно, нам стоит посмотреть сложнее.

Ярослав Рахматуллин
источник