Como posso configurar corretamente o editor do sudo / visudo?

18

Estou usando o Ubuntu 10.04 Server e tentando configurar sudoers para respeitar a opção EDITOR de um usuário (dentro dos limites)

Nos meus sudoers eu tenho:

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

E no usuário .bashrc:

export EDITOR=/usr/bin/vim

$ EDITOR está definido:

$ echo $EDITOR
/usr/bin/vim

De acordo com man sudoersisso, deve ser suficiente para que $ EDITOR seja definido como 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.

No entanto, nanoainda está sendo usado para este usuário. Uma verificação rápida do env:

$ sudo -- env | grep EDITOR

Retorna nada.

$ sudo -E -- env | grep EDITOR

Devoluções EDITOR=/usr/bin/vim

Estou ciente de que poderia fazer o seguinte para fazer o EDITOR funcionar:

  • Set env_editor, env_keep+=EDITORou qualquer outra opção que mantenha a variável EDITOR em sudoers: não quero fazer isso, pois isso pode permitir a execução arbitrária de qualquer coisa (por exemplo export EDITOR=~/bad_program_to_run_as_root)
  • Use sudo -Eor even alias sudo='sudo -E': Derrota o ponto de ter env_resete usuários sem SETENV (não é algo que eu queira dar: veja o ponto anterior)sudo: sorry, you are not allowed to preserve the environment
  • Conjunto editor=/usr/bin/vim: mas existem outros usuários que não conhecem o vim
  • Uso sudo select-editor: Fechar, mas sudo visudoainda abrenano
  • Basta usar sudoedit ou vim diretamente: Mas então você perde a segurança de ferramentas como visudo, vipw, crontab -e.
  • Apenas lide com isso: provavelmente, mas se eu estiver perdendo alguma visão, eu gostaria de saber

Eu também tentei definir as variáveis VISUALe SUDO_EDITOR(em desespero)

Há algo que eu perdi que será sudo visudoaberto no editor de escolha dos usuários, sem fazer os compromissos acima?

EDITAR:

Acho que entendo por que isso não está funcionando como eu esperava. Estou colocando aqui em baixo, caso mais alguém tenha o mesmo conceito errado.

No arquivo sudoers

Defaults        editor=/usr/bin/nano:/usr/bin/vim
  • Refere-se apenas à lista de editores permitidos durante a execução visudo(não em nenhum outro programa)
  • editorverifica $ EDITOR, mas se estiver executando sudo visudo, sudonão define $ EDITOR; portanto, quando visudoexecutado, ele estará vazio
  • Portanto, o primeiro editor é usado, neste caso nano

Alguém pode confirmar que isso está correto?

Eu esperava, portanto, que uma solução segura seria adicionar:

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

ou seja, mantenha EDITOR se e somente se estiver executando o visudo. Isso seria então verificado contra

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

E se não combinasse, usaria nano

Estranhamente, porém, este não parece ser o caso:

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

/bin/echoé usado como o editor. Erro? Ou outro equívoco?

obrigado

Mark C
fonte

Respostas:

6

Você está certo ao definir a EDITORvariável para alterar o editor usado sudo. No entanto, existem outras duas variáveis ​​com precedência sobre EDITOR: SUDO_EDITORe VISUAL. Certifique-se de que nenhum deles aponte para outro editor como nano.

Cara
fonte
A razão pela qual eu votei foi porque poucas respostas fazem referência a VISUALter precedência EDITOR. Eu pensei que minha EDITORvariável estava sendo ignorada. Acontece que, em Centos7 ambos EDITORe VISUALparecem padrão para pico.
Threeve 9/08/16
5

Há outra solução, conforme descrito aqui :

sudo update-alternatives --config editor

Mas não é tão amigável em um sistema multiusuário, pois atualiza apenas um link simbólico em /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

O que aconteceu com select-editorafinal? Quando eu o executo, ele cria um arquivo:

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

Mas sudo visudocontinua usando o nano.

rld.
fonte
3

No Debian 7, configurar o EDITOR no ambiente não funcionou.

Para usar o Nano, acabei adicionando a seguinte linha ao /etc/sudoers

Defaults        editor="/usr/bin/nano"
kim3er
fonte
TRABALHOU COMO UM CAMPEÃO no DigitalOcean Ubuntu 12.04. Obrigado.
Joe Codeswell user601770
Obrigado. Isso também funcionou no Oracle Linux. (Eu gosto de nano / pico.)
MikeP 15/01
1

env_reset não impede que um usuário defina variáveis ​​na linha de comandos:

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

Considero suas descobertas sobre a editoropção levemente chocantes, mas infelizmente não sei as respostas para suas perguntas secundárias. Alguém poderia pensar que o acampamento do Ubuntu teria muitos documentos e exemplos de configuração sobre esse assunto, talvez devêssemos procurar mais.

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