17

Я использую 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 (не то, что я хочу выдать: см. Предыдущий пункт) get 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 используется в качестве редактора. Ошибка? Или еще одно заблуждение?

Спасибо

4 ответа4

6

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

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

3

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

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

Defaults        editor="/usr/bin/nano"
1

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .