Ich verwende Ubuntu 10.04 Server und versuche, Sudoer einzurichten, um die Wahl des Editors eines Benutzers zu respektieren (innerhalb der Grenzen).
In meinen Sudoern habe ich:
Defaults editor=/usr/bin/nano:/usr/bin/vim
Defaults env_reset
Und im Benutzer .bashrc:
export EDITOR=/usr/bin/vim
$ EDITOR ist gesetzt:
$ echo $EDITOR
/usr/bin/vim
Demnach man sudoers
sollte es ausreichen, dass $ EDITOR auf vim gesetzt wird:
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.
Wird nano
jedoch noch für diesen Benutzer verwendet. Ein kurzer Check von env:
$ sudo -- env | grep EDITOR
Gibt nichts zurück.
$ sudo -E -- env | grep EDITOR
Kehrt zurück EDITOR=/usr/bin/vim
Mir ist bewusst, dass ich die folgenden Dinge tun könnte, damit EDITOR funktioniert:
- Set
env_editor
,env_keep+=EDITOR
oder jede andere Option, die die Variable EDITOR in sudoers hält: Ich will nicht , dies zu tun , wie es willkürliche Ausführung von etwas zulassen ( zum Beispielexport EDITOR=~/bad_program_to_run_as_root
) - Verwenden Sie
sudo -E
oder sogaralias sudo='sudo -E'
:env_reset
Besiegt den Punkt zu haben und Benutzer ohne SETENV (nicht etwas, was ich herausgeben möchte: siehe vorherigen Punkt) zu bekommensudo: sorry, you are not allowed to preserve the environment
- Set
editor=/usr/bin/vim
: Es gibt aber auch andere Benutzer, die vim nicht kennen - Benutzen
sudo select-editor
: Schließen,sudo visudo
öffnet aber trotzdem innano
- Verwenden Sie einfach sudoedit oder vim direkt: Aber dann verlieren Sie die Sicherheit von Tools wie
visudo
,vipw
,crontab -e
. - Beschäftige dich einfach damit: Wahrscheinlich, aber wenn mir ein Einblick fehlt, würde ich es gerne wissen
Ich habe auch versucht, die Variablen VISUAL
und SUDO_EDITOR
(in der Verzweiflung)
Gibt es etwas, das ich verpasst habe und das sudo visudo
im Benutzereditor der Wahl geöffnet wird, ohne die oben genannten Kompromisse einzugehen?
BEARBEITEN:
Ich denke, ich verstehe, warum das nicht so funktioniert, wie ich es erwartet habe. Ich lege es hier nieder, falls jemand das gleiche Missverständnis hat.
In der sudoers-Datei
Defaults editor=/usr/bin/nano:/usr/bin/vim
- Bezieht sich nur auf die Liste der Editoren, die beim Ausführen zulässig sind
visudo
(kein anderes Programm) editor
Überprüft $ EDITOR, aber wenn es ausgeführt wirdsudo visudo
,sudo
wird $ EDITOR nicht festgelegt. Wennvisudo
es ausgeführt wird, ist es leer- Daher wird in diesem Fall der erste Editor verwendet
nano
Kann jemand bestätigen, dass dies korrekt ist?
Ich habe daher erwartet, dass eine sichere Lösung darin besteht, Folgendes hinzuzufügen:
Defaults!/usr/sbin/visudo env_keep+=EDITOR
dh EDITOR nur dann behalten, wenn visudo läuft. Dies würde dann gegengeprüft
Defaults editor=/usr/bin/nano:/usr/bin/vim
Und wenn es nicht passt, würde es auch nicht passen nano
Seltsamerweise scheint dies nicht der Fall zu sein:
$ sudo su - root
# export EDITOR=/bin/echo
# visudo
/etc/sudoers.tmp
visudo: /etc/sudoers.tmp unchanged
/bin/echo
wird als Editor verwendet. Fehler? Oder ein anderes Missverständnis?
Vielen Dank
VISUAL
Vorrang zu habenEDITOR
. Ich dachte, meineEDITOR
Variable würde einfach ignoriert. Stellt sich heraus, in Centos7 beideEDITOR
undVISUAL
scheinen standardmäßig zupico
.