
Entsprechend dermanpage:
sudoedit /etc/file
erstellt eine Kopie der Datei, öffnet sie als aktueller Benutzer und überschreibt beim Speichern die vorhandene Datei mit der Kopie.
wohingegen
sudo vi /etc/file
öffnet die Datei als Root
Auf der Manpage heißt es, dass sich sudoedit aus folgendem Grund von sudo unterscheidet:
Der Editor wird mit der Umgebung des aufrufenden Benutzers unverändert ausgeführt.
Ist die erste Methode sicherer und wenn ja, warum? Gibt es andere Gründe, sudoedit statt sudo vi zu verwenden?
Antwort1
Ich bin auf diese Frage gestoßen, als ich nach etwas völlig anderem gesucht habe, aber ich dachte, ich würde den folgenden wichtigen Unterschied hinzufügen, der bisher überhaupt nicht erwähnt wurde:sudoedit führt Ihren Editor nicht als Root aus.
$ sudo vim /etc/farts.conf
Führt vim einfach als Root aus, sodass es die Datei lesen kann. Der Nachteil ist, dass der Editor nun auch als Root ausgeführt wird und alles tun kann. Wenn Sie einem Benutzer nur erlauben wollten, eine Konfigurationsdatei zu bearbeiten und sonst nichts, ist das schade, denn dann haben Sie ihm einfachWurzelauf dem gesamten System. Nichts hindert mich daran, eine Shell von vim mit :sh
oder zu starten :!command
, und da es sich um Unterprozesse handelt, werden sie auch als Root ausgeführt.
Andererseits:
$ sudoedit /etc/farts.conf
funktioniert tatsächlich anders. Es erstellt eine Kopie mit einem eindeutigen Namen in /tmp, deren Berechtigungen nur auf Ihren Benutzer beschränkt sind, und startet dann Ihren Editor normal, ohne Root-Rechte, auf dieser Kopie.
Sobald Sie Ihren Editor beenden, vergleicht er die temporäre Datei mit der Originaldatei und ersetzt das Original sicher durch Ihre Bearbeitung, falls es Änderungen gibt.
In diesem Szenario ist es möglich, einem Benutzer das Bearbeiten einer Systemdatei zu gestatten, ihm jedoch nicht zu erlauben, beliebige Binärdateien als Root auszuführen oder überall im Dateisystem herumzustochern.
Das ist im Wesentlichen der eigentliche Unterschied, der Rest, der erwähnt wurde, sind nur nette Nebeneffekte.
Antwort2
Zunächst sudo vim
wird Ihr Standard-Editor bereits explizit erwähnt. Dies ist nicht erforderlich, wenn Sie ihn in definiert haben $EDITOR
. sudoedit
So müssen Sie den Editor nicht jedes Mal neu definieren, wenn Sie etwas bearbeiten möchten. Auf einem Mehrbenutzersystem kann außerdem jeder den Editor verwenden, der ihm persönlich am besten gefällt.
Wie das? Stellen Sie sich ein System vor, in dem normale Benutzer nur sudo
die Berechtigung zum Bearbeiten bestimmter Dateien erhalten. Sie dürfen sudo
jedoch nichts anderes ausführen. Sie müssten ihnen das sudo vi
und sudo vim
das sudo nano
und sudo emacs
das sudo pico
(usw.) erlauben. Anstatt das tun zu müssen, könnten Sie ihnen einfach den Zugriff auf sudoedit
die Datei erlauben, mit der Wahl der Einstellungen $EDITOR
nach Belieben. (Stellen Sie sich vor, Sie würden einen Emacs-Liebhaber zwingen, Vim zu verwenden …)
Ein weiteres Problem besteht darin, dass, wenn Ihr $EDITOR
auf eingestellt ist vim
und Sie in Ihrem Benutzer Anpassungseinstellungen dafür haben .vimrc
, diese Einstellungen nicht verwendet werden, falls Sie sudo vim
oder verwenden sudo $EDITOR
. sudoedit
Die Umgebung des aufrufenden Benutzers und somit Ihre Einstellungen bleiben jedoch erhalten.
Siehe auch:Was ist so toll an sudoedit?