Estou usando o Ubuntu 10.04 Server e tentando configurar sudoers para respeitar a escolha EDITOR do 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 sudoers
, isso deve ser suficiente para $ EDITOR ser 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, nano
ainda está sendo usado para esse usuário. Uma verificação rápida de env:
$ sudo -- env | grep EDITOR
Não retorna nada.
$ sudo -E -- env | grep EDITOR
Retorna EDITOR=/usr/bin/vim
Estou ciente de que posso fazer o seguinte para que o EDITOR funcione:
- Defina
env_editor
, env_keep+=EDITOR
ou 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 -E
ou até alias sudo='sudo -E'
: Derrota o ponto de ter env_reset
e usuários sem SETENV (não é algo que eu quero dar: veja o ponto anterior) obter sudo: sorry, you are not allowed to preserve the environment
- Defina
editor=/usr/bin/vim
: mas há outros usuários que não conhecem o vim
- Use
sudo select-editor
: Fechar, mas sudo visudo
ainda é aberto em nano
- Use o sudoedit ou vim diretamente: mas você perderá a segurança de ferramentas como
visudo
, vipw
, crontab -e
.
- Apenas lide com isso: Provavelmente, mas se eu estiver sentindo falta de algumas ideias, eu adoraria saber
Eu também tentei definir as variáveis VISUAL
e SUDO_EDITOR
(em desespero)
Existe algo que eu perdi que tornará sudo visudo
aberto no editor de usuários escolhido, sem fazer os compromissos acima?
EDITAR:
Acho que entendo por que isso não está funcionando como esperado. Estou colocando aqui, caso alguém tenha o mesmo equívoco.
No arquivo sudoers
Defaults editor=/usr/bin/nano:/usr/bin/vim
- Refere-se apenas à lista de editores permitidos ao executar
visudo
(nenhum outro programa)
-
editor
checks $ EDITOR, mas se estiver executando sudo visudo
, sudo
não definirá $ EDITOR, então quando visudo
for executado, 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
i.e. mantenha o EDITOR se e somente se estiver executando o visudo. Isso então seria verificado em relação a
Defaults editor=/usr/bin/nano:/usr/bin/vim
E se não corresponder, use nano
Estranhamente, isso 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 editor. Erro? Ou outro equívoco?
Obrigado