Comment puis-je configurer correctement l'éditeur de sudo / visudo?

18

J'utilise Ubuntu 10.04 Server et j'essaie de configurer des sudoers pour respecter le choix de l'EDITEUR d'un utilisateur (dans certaines limites)

Dans mes sudoers j'ai:

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

Et dans l'utilisateur .bashrc:

export EDITOR=/usr/bin/vim

$ EDITOR est défini:

$ echo $EDITOR
/usr/bin/vim

Selon man sudoerscela, cela devrait être suffisant pour que $ EDITOR soit défini sur 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.

Cependant, il nanoest toujours utilisé pour cet utilisateur. Une vérification rapide d'env:

$ sudo -- env | grep EDITOR

Ne renvoie rien.

$ sudo -E -- env | grep EDITOR

Retour EDITOR=/usr/bin/vim

Je suis conscient que je pourrais faire les choses suivantes pour faire fonctionner EDITOR:

  • Set env_editor, env_keep+=EDITORou toute autre option qui conserve la variable EDITOR dans sudoers: je ne veux pas faire cela car cela pourrait permettre l'exécution arbitraire de quoi que ce soit (par exemple export EDITOR=~/bad_program_to_run_as_root)
  • Utiliser sudo -Eou même alias sudo='sudo -E': vainc le point d'avoir env_resetet les utilisateurs sans SETENV (pas quelque chose que je veux donner: voir le point précédent)sudo: sorry, you are not allowed to preserve the environment
  • Set editor=/usr/bin/vim: Mais il y a d'autres utilisateurs qui ne connaissent pas vim
  • Utilisation sudo select-editor: Fermer, mais sudo visudoouvre toujours dansnano
  • Il suffit d' utiliser sudoedit ou vim directement: Mais vous perdez la sécurité des outils tels que visudo, vipw, crontab -e.
  • Traitez-le: Probablement, mais si je manque un aperçu, j'aimerais savoir

J'ai également essayé de définir les variables VISUALet SUDO_EDITOR(en désespoir de cause)

Y a-t-il quelque chose que j'ai manqué qui sudo visudoouvrira dans l'éditeur d'utilisateurs de choix, sans faire les compromis ci-dessus?

ÉDITER:

Je pense que je comprends pourquoi cela ne fonctionne pas comme je m'y attendais. Je le mets ici au cas où quelqu'un d'autre aurait la même idée fausse.

Dans le fichier sudoers

Defaults        editor=/usr/bin/nano:/usr/bin/vim
  • Se réfère uniquement à la liste des éditeurs autorisés lors de l'exécution visudo(pas tout autre programme)
  • editorvérifie $ EDITOR, mais s'il est en cours d'exécution sudo visudo, sudone définit pas $ EDITOR, donc lors de l' visudoexécution, il sera vide
  • Par conséquent, le premier éditeur est utilisé, dans ce cas nano

Quelqu'un peut-il confirmer que c'est correct?

Je m'attendais donc à ce qu'une solution sûre soit d'ajouter:

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

c'est-à-dire garder EDITOR si et seulement si vous utilisez visudo. Cela serait ensuite vérifié par rapport à

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

Et s'il ne correspondait pas non plus, utiliserait nano

Bizarrement cependant, cela ne semble pas être le cas:

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

/bin/echoest utilisé comme éditeur. Punaise? Ou une autre idée fausse?

Merci

Mark C
la source

Réponses:

6

Vous avez raison de dire que la définition de la EDITORvariable devrait changer l'éditeur utilisé pour sudo. Cependant, il existe deux autres variables qui ont priorité sur EDITOR: SUDO_EDITORet VISUAL. Assurez-vous qu'aucun d'entre eux ne pointe vers un autre éditeur comme nano.

Gars
la source
La raison pour laquelle j'ai voté positivement est que si peu de réponses font référence à la VISUALpriorité EDITOR. Je pensais que ma EDITORvariable était simplement ignorée. Il s'avère que, dans Centos7 à la fois EDITORet VISUALsemblent par défaut pico.
threeve
5

Il existe une autre solution telle que décrite ici :

sudo update-alternatives --config editor

Mais ce n'est pas aussi convivial sur un système multi-utilisateurs car il ne met à jour qu'un lien symbolique dans /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'est-il arrivé de select-editortoute façon? Lorsque je l'exécute, il crée un fichier:

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

Mais sudo visudocontinue à utiliser nano.

rld.
la source
3

Dans Debian 7, mettre EDITOR dans l'environnement ne fonctionnait pas.

Pour utiliser Nano, j'ai fini par ajouter la ligne suivante à /etc/sudoers

Defaults        editor="/usr/bin/nano"
kim3er
la source
TRAVAILLÉ COMME UN CHAMP sur DigitalOcean Ubuntu 12.04. Merci.
Joe Codeswell user601770
Je vous remercie. Cela a également fonctionné sur Oracle Linux. (J'aime nano / pico.)
MikeP
1

env_reset n'empêche pas un utilisateur de définir des variables sur la ligne de commande:

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

Je trouve vos conclusions sur l' editoroption légèrement choquantes mais malheureusement je ne connais pas les réponses à vos questions secondaires. On pourrait penser que le camp Ubuntu aurait beaucoup de documents et d'exemples de configuration sur cette question, peut-être devrions-nous regarder plus loin.

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