¿Cómo puedo configurar correctamente el editor de sudo / visudo?

18

Estoy usando Ubuntu 10.04 Server e intento configurar sudoers para respetar la elección del EDITOR de un usuario (dentro de los límites)

En mis sudoers tengo:

Defaults        editor=/usr/bin/nano:/usr/bin/vim
Defaults        env_reset

Y en el usuario .bashrc:

export EDITOR=/usr/bin/vim

$ EDITOR está configurado:

$ echo $EDITOR
/usr/bin/vim

De acuerdo con man sudoersesto, debería ser suficiente para que $ EDITOR se configure en 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.

Sin embargo, nanotodavía se está utilizando para este usuario. Una comprobación rápida de env:

$ sudo -- env | grep EDITOR

No devuelve nada

$ sudo -E -- env | grep EDITOR

Devoluciones EDITOR=/usr/bin/vim

Soy consciente de que podría hacer lo siguiente para que EDITOR funcione:

  • Set env_editor, env_keep+=EDITORo cualquier otra opción que mantiene la variable EDITOR en sudoers: No quiero hacer esto, ya que podría permitir la ejecución arbitraria de cualquier cosa (por ejemplo export EDITOR=~/bad_program_to_run_as_root)
  • Uso sudo -Eo incluso alias sudo='sudo -E': Derrota el punto de tener env_resety usuarios sin SETENV (no es algo que quiera revelar: ver punto anterior) obtenersudo: sorry, you are not allowed to preserve the environment
  • Conjunto editor=/usr/bin/vim: Pero hay otros usuarios que no conocen vim
  • Uso sudo select-editor: Cerrar, pero sudo visudoaún se abre ennano
  • Sólo tiene que utilizar sudoedit o vim directamente: Pero entonces se pierde la seguridad de herramientas como visudo, vipw, crontab -e.
  • Solo lidia con eso: Probablemente, pero si me falta alguna idea, me encantaría saber

También he intentado configurar las variables VISUALy SUDO_EDITOR(en desesperación)

¿Hay algo que me haya perdido que se sudo visudoabrirá en el editor de elección de los usuarios, sin hacer los compromisos anteriores?

EDITAR:

Creo que entiendo por qué esto no funciona como esperaba. Lo pondré aquí en caso de que alguien más tenga el mismo concepto erróneo.

En el archivo sudoers

Defaults        editor=/usr/bin/nano:/usr/bin/vim
  • Solo se refiere a la lista de editores que están permitidos cuando se ejecuta visudo(no cualquier otro programa)
  • editorcomprueba $ EDITOR, pero si se ejecuta sudo visudo, sudono establece $ EDITOR, por lo que cuando se visudoejecute estará vacío
  • Por lo tanto, se utiliza el primer editor, en este caso nano

¿Alguien puede confirmar que esto es correcto?

Por lo tanto, esperaba que una solución segura sería agregar:

Defaults!/usr/sbin/visudo env_keep+=EDITOR

es decir, mantener EDITOR si y solo si se ejecuta visudo. Esto luego se verificaría contra

Defaults                  editor=/usr/bin/nano:/usr/bin/vim

Y si no coincidiera, cualquiera usaría nano

Aunque parezca extraño, este no parece ser el caso:

$ sudo su - root
# export EDITOR=/bin/echo
# visudo
/etc/sudoers.tmp
visudo: /etc/sudoers.tmp unchanged

/bin/echose utiliza como editor ¿Error? ¿O otra idea falsa?

Gracias

Mark C
fuente

Respuestas:

6

Tienes razón en que configurar la EDITORvariable debería cambiar el editor utilizado para sudo. Sin embargo, hay otras dos variables con precedencia sobre EDITOR: SUDO_EDITORy VISUAL. Asegúrese de que ninguno de ellos apunte a algún otro editor como nano.

Chico
fuente
La razón por la que voté es porque muy pocas respuestas hacen referencia a VISUALtener prioridad sobre EDITOR. Pensé que mi EDITORvariable solo estaba siendo ignorada. Resulta que, en tanto Centos7 EDITORy VISUALparece que por defecto pico.
tres
5

Hay otra solución como se describe aquí :

sudo update-alternatives --config editor

Pero no es tan amigable en un sistema multiusuario ya que solo actualiza un enlace simbólico en /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

¿Qué pasó de select-editortodos modos? Cuando lo ejecuto, crea un archivo:

$ 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"

Pero sudo visudosigue usando nano.

rld.
fuente
3

En Debian 7, configurar EDITOR en el entorno no funcionó.

Para usar Nano, terminé agregando la siguiente línea a /etc/sudoers

Defaults        editor="/usr/bin/nano"
kim3er
fuente
Trabajó como un campeón en DigitalOcean Ubuntu 12.04. Gracias.
Joe Codeswell user601770
Gracias. Esto también funcionó en Oracle Linux. (Me gusta nano / pico.)
MikeP
1

env_reset no impide que un usuario establezca variables en la línea de comando:

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

Sus hallazgos sobre la editoropción me parecen un poco impactantes, pero desafortunadamente no sé las respuestas a sus preguntas secundarias. Uno pensaría que el campamento de Ubuntu tendría muchos documentos y ejemplos de configuración sobre este tema, tal vez deberíamos buscarlo más.

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