sudoedit: Warum es anstelle von sudo vi verwenden?

sudoedit: Warum es anstelle von sudo vi verwenden?

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 :shoder 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 vimwird Ihr Standard-Editor bereits explizit erwähnt. Dies ist nicht erforderlich, wenn Sie ihn in definiert haben $EDITOR. sudoeditSo 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 sudodie Berechtigung zum Bearbeiten bestimmter Dateien erhalten. Sie dürfen sudojedoch nichts anderes ausführen. Sie müssten ihnen das sudo viund sudo vimdas sudo nanound sudo emacsdas sudo pico(usw.) erlauben. Anstatt das tun zu müssen, könnten Sie ihnen einfach den Zugriff auf sudoeditdie Datei erlauben, mit der Wahl der Einstellungen $EDITORnach Belieben. (Stellen Sie sich vor, Sie würden einen Emacs-Liebhaber zwingen, Vim zu verwenden …)

Ein weiteres Problem besteht darin, dass, wenn Ihr $EDITORauf eingestellt ist vimund Sie in Ihrem Benutzer Anpassungseinstellungen dafür haben .vimrc, diese Einstellungen nicht verwendet werden, falls Sie sudo vimoder verwenden sudo $EDITOR. sudoeditDie Umgebung des aufrufenden Benutzers und somit Ihre Einstellungen bleiben jedoch erhalten.

Siehe auch:Was ist so toll an sudoedit?

verwandte Informationen