Kann es jemals Probleme geben, wenn Sie mit gedit Systemdateien mit 'sudo -H gedit' bearbeiten?

10

Ich bin relativ neu in Ubuntu. Ich habe festgestellt, dass in den Antworten auf dieser Site, wenn Leute vorschlagen, Systemdateien zu bearbeiten, der Befehl, den sie geben, immer sudo nanooder ist sudo vi. Da ich Terminal-basierte Texteditoren nicht mag, verwende ich normalerweise

sudo -H gedit

stattdessen, und bis jetzt hat es einwandfrei funktioniert.

Kann es jemals Probleme bei geditder Bearbeitung von Systemdateien geben oder liegt die Wahl des Texteditors ausschließlich in den Vorlieben der Person? Gibt es etwas, das ich beim Bearbeiten dieser Dateien beachten sollte (z. B. Codierung)?

Shinobody
quelle
3
Der -HTeil ist wichtig , nicht verwenden sudo, um GUI-Anwendungen ohne ihn zu starten.
Pomsky

Antworten:

10

Solange Sie es richtig ausführen, ist es eine Frage Ihrer Präferenz.

Abgesehen von den unterschiedlichen Funktionen ist der von Ihnen verwendete Texteditor in der Tat Ihre Präferenz. Dies gilt auch dann, wenn Ihr Texteditor ein grafisches Programm wie Gedit ist . Das heißt nicht, dass es keinen guten Grund gibt nanound vimoft empfohlen wird. Terminalbasierte Texteditoren mögen vim(oder zumindest einen viBefehl) und nanosind auch dann verfügbar, wenn keine GUI vorhanden ist und selbst auf den meisten sehr minimalen und kaputten Systemen ; Sie haben eine Tradition hinter sich (wenn Sie an solchen Dingen interessiert sind). Sie können in demselben Terminal ausgeführt werden, in dem andere Aufgaben ausgeführt werden. Sie werden automatisch in die Workflows der Terminal-Multiplexer- Benutzer integriert . und sie sind eher verfügbar als alle anderenspezieller grafischer Texteditor, sogar Gedit, sogar unter Ubuntu (das verschiedene Varianten hat ).

Das ist nicht alles. Wenn Sie Systemdateien bearbeiten möchten, besteht ein Ansatz darin, Ihren Editor als Root auszuführen. Dies ist nicht der einzige Ansatz, und es gibt einige Argumente dagegen (siehe unten), aber er ist weit verbreitet. Wenn Sie diesen Ansatz wählen und ein grafisches Programm als Editor verwenden, müssen Sie darauf achten , dass es so ausgeführt wird, dass $HOMEes das Ausgangsverzeichnis von root und nicht Ihr eigenes ist. Dies erhöht die Komplexität und Komplexität zusätzlich. Aber das machst du schon; Du rennst sudo -H gedit, was eine der vernünftigen Möglichkeiten ist . Diese Komplexität ist jedoch ein weiterer Grund, warum Menschen dazu neigen, nicht grafische Editoren vorzuschlagen.

Grafische Programme sind oft komplizierter als nicht grafische Programme. Es ist im Allgemeinen schlecht, wenn mehr Material als Root ausgeführt wird, da es mehr Möglichkeiten gibt, wie etwas schief gehen kann, auch aufgrund möglicher Fehler, auch aus Versehen. (Nicht-grafische Texteditoren, wie sie auch vimsehr ausgefeilt sind und häufig so konfiguriert sind, dass sie zahlreiche externe Programme ausführen, um verschiedene Aufgaben auszuführen.)

Neben dem Ausführen des Editors als Root besteht ein weiterer allgemeiner Ansatz darin, eine Datei zu bearbeiten, die der Editor auch dann ändern kann, wenn er als Benutzer (ohne Root) ausgeführt wird, sodass Änderungen an der Datei an die gewünschte Root-Datei weitergegeben werden wechseln. Das klingt abstrakt, weil die Besonderheiten erheblich variieren. Es folgen zwei wichtige konkrete Ansätze.

sudoedit

Ein ziemlich langjähriger Weg, dies zu tun, ist sudoedit(dokumentiert auf derselben Handbuchseite wiesudo ). Standardmäßig sudoeditverwendet den Texteditor Standard , die in der Regel nicht der Fall ist - und sollte nicht sein - ein grafisches Programm. Aber man kann sagen , es mit einem beliebigen Editor durch die verwenden SUDO_EDITOR, VISUALoder die EDITOR Umgebungsvariablen , die es in dieser Reihenfolge konsultiert. So können Sie ausführen:

VISUAL=gedit sudoedit filename

Ersetzen Sie filenamedurch einen relativen oder absoluten Pfad zu Ihrer Datei.

Dadurch wird eine temporäre Kopie der Datei erstellt, die Sie bearbeiten möchten. Die Kopie gehört Ihnen, nicht root (oder wer auch immer der ursprüngliche Besitzer ist). Es öffnet den Texteditor und Sie können die temporäre Kopie bearbeiten. Wenn Sie schließen Sie den Texteditor, sudoeditüberprüft , ob Sie tatsächlich Änderungen vorgenommen. In diesem Fall wird die geänderte temporäre Kopie wieder in das Original kopiert .

Funktioniert zwar sudoeditmit grafischen Editoren, ist aber auch für terminalbasierte Editoren nützlich. In beiden Fällen, wie Sie den Text - Editor läuft, so hat es die Konfiguration und andere Aktionen , die Sie darin ausführen andere als die in dieser Datei vorgenommenen Änderungen von Ihnen durchgeführt werden, das bietet ein wenig Schutz gegen einige Arten von Fehlern.

Sie können eine dieser Umgebungsvariablen dauerhaft festlegen, wenn Sie möchten. SUDO_EDITORist vielleicht das Beste, da es für weniger andere Dinge verwendet wird. Wenn Sie es jedoch so einstellen gedit, denken Sie daran , dass Befehle wie nicht funktionieren, wenn keine GUI verfügbar ist, wie dies häufig (wenn auch nicht immer ) in einer virtuellen Konsole oder über SSH der Fall ist .sudoedit filename

Das GVFS-Administrator-Backend

Eine andere neuere Möglichkeit, dies zu tun, besteht darin, die Datei über ihren GVFS- admin://Pfad und nicht über ihren traditionellen Unix-Pfad zu öffnen . Danke an pomsky, dass du mir das beigebracht hast. So wie es GVFS-Pfade zum Bearbeiten von Dateien gibt, die sich ansonsten nicht an einem geeigneten Ort zum Bearbeiten befinden - beispielsweise weil sie sich auf einem Remotecomputer befinden, mit dem Sie über SSH verbunden sind -, unterstützt GVFS admin://Pfade zum Bearbeiten von Dateien du besitzt nicht.

Dies ähnelt konzeptionell darin, sudoeditdass Sie Ihren Editor als sich selbst ausführen und die Datei, die der Editor sieht, bearbeitet werden darf. Um die Datei zu öffnen, müssen Sie sich authentifizieren. Dies ist kein magischer Weg, um übliche Sicherheitsbeschränkungen zu umgehen.

gedit admin:///path/to/filename

Es /path/to/filenamemuss einen absoluten Pfad zur Datei geben, beginnend mit /. Es gibt also drei /Zeichen danach admin:.

Codierungen und andere Dinge, die theoretisch von der Editor-Konfiguration betroffen sind

Die Codierung einer Datei wird nicht wirklich davon beeinflusst, ob der von Ihnen verwendete Editor grafisch ist oder nicht. Einige Editoren können vimsogar grafisch (der gvimBefehl) oder nicht grafisch (der vimBefehl) arbeiten. Die einfache Antwort auf Ihre Frage zu Codierungen lautet, dass Sie sich darüber keine Sorgen machen müssen. Das ist nah genug an der Wahrheit, dass Sie den Rest dieser Antwort wirklich nicht lesen müssen.

In aktuellen (und früheren) Ubuntu-Versionen mögen Befehle diese Editoren sudo nanound sudo vimführen sie als root aus, haben sich aber immer $HOMEnoch auf Ihr Home-Verzeichnis festgelegt. Dies bedeutet, dass die Editoren standardmäßig Ihre Konfiguration anstelle der Root-Konfiguration verwenden. Wenn sich in Ihrer Konfiguration dieser Editoren (oder in einem Programm, das sie ausführen, um einen Teil ihrer Arbeit zu erledigen git) etwas über Codierungen oder Zeilenenden befindet , wird dies befolgt. Mit wird das nicht passieren.sudo -H editor

Einige Leute verwenden nackte sudo(dh ohne -ioder -H) für Redakteure, weil sie das wollen. Aber wirklich, Sie sollten zweimal darüber nachdenken. Mit einer Methode wie können Sie dieses Ziel nicht nur sauberer erreichen sudoedit, es gibt auch andere Nachteile von Befehlen wie sudo nanound sudo vim:

  • Wenn Ihre Editor-Konfiguration dazu führt, dass etwas ausgeführt wird, wird dies als root ausgeführt. Für anspruchsvolle Editoren wie vimkann dies dazu führen, dass ziemlich viel nicht trivialer Code als Root ausgeführt wird. Wie oben erwähnt, ist es im Allgemeinen gut, weniger Code als Root auszuführen, und dies ist eines der Argumente gegen die Ausführung von Grafikeditoren als Root.

    Wenn Ihre vimKonfiguration über zahlreiche Plugins verfügt, z. B. um während der Eingabe eine statische Analyse des Quellcodes durchzuführen, und die von root nicht, werden weniger Inhalte als root ausgeführt als . (Noch weniger läuft als root mit , aber Ihre Plugins funktionieren immer noch!) Dies unterscheidet sich davon, ob Ihr Editor grafisch ist oder nicht.sudo -H vim filenamesudo vim filenameVISUAL=vim sudoedit filename

  • Wenn Ihre Editor-Konfiguration fehlerhaft ist und Sie nicht einfach Dateien bearbeiten können, kann dies noch problematischer sein, da dies auch für root gilt. Dies ist nur ein Ärger, kein schwer zu lösendes Problem.

  • Befehle wie sudo vimhaben ein bisschen das gleiche Problem wie der (schlecht beratene!) Befehl sudo gedit. Wenn Sie einen Editor wie ausgeführt vimals root aber ohne Zurücksetzen $HOME(wie sudo -Hund sudo -itun würde), und es erzeugt Konfigurationsdateien für sich selbst , werden diese Konfigurationsdateien in Ihrem Home - Verzeichnis befinden , aber werden sie im Besitz von root werden, und die Konfiguration kann etwas gebrochen wenn Sie den Editor später als Sie selbst ausführen.

    Nun, das klingt sicher sehr nach diesem Problem! Der Grund dafür, dass es weniger wichtig ist als bei grafischen Anwendungen, ist, dass der Editor normalerweise immer noch startet, die Fehlermeldungen normalerweise leichter zu verstehen sind, Sie normalerweise leichter herausfinden können, welche bestimmten Dateien betroffen sind, und dass der Bruch normalerweise darauf beschränkt ist dieses eine Programm. (Grafikprogramme verwenden Konfigurationsdateien an mehreren Stellen.) Im Gegensatz zu Grafikeditoren ist es außerdem ziemlich unwahrscheinlich , dass Benutzer, die nur gelegentlich einen Texteditor verwenden und dessen Konfiguration nicht absichtlich ändern, dieses Problem auftreten.

Auch hier können Sie die Editor-Konfiguration Ihres eigenen Benutzerkontos verwenden und gleichzeitig Berechtigungsprobleme vermeiden sudoedit, indem Sie den Editor verwenden oder vom Desktop aus normal starten, aber über einen admin://Pfad auf die Datei zugreifen .

Beachten Sie schließlich, dass sich das oben erwähnte Verhalten, sudowann -Hoder -iübergeben wird, in einer zukünftigen Version von Ubuntu tatsächlich ändern soll (wie es bereits vor Jahren bei den meisten Unix-ähnlichen Betriebssystemen der Fall war sudo). Das Verhalten hat sich bereits in Ubuntu 19.10 geändert , der Entwicklungsversion zum Zeitpunkt dieses Schreibens.

Eliah Kagan
quelle
2
Das andere Problem sudo -Hist, dass Sie 1 Mal von 100 oder 1000 das vergessen -Hund der Besitz einer Datei möglicherweise vom Benutzer auf das Stammverzeichnis übertragen wird $HOME.
WinEunuuchs2Unix
3

So beantworten Sie Ihre Frage: Im Allgemeinen ist die Verwendung eines GUI-Editors kein Problem, da geditgroße Dateien sehr langsam sind.

Aber für GUI-Programme würden Sie pkexecoder gksuanstelle von verwenden sudo. Möglicherweise müssen Sie konfigurieren,pkexec bevor es funktioniert.

pkexec gedit

oder für ältere Ubuntu-Versionen (zB 16.04) können Sie verwenden:

gksu gedit

(Obwohl Sie vielleicht bessere GUI-Editoren ausprobieren könnten, zB geany;-))

pLumo
quelle
gksuwird so ziemlich verworfen.
Pomsky
pkexec......
Rinzwind
wahr wahr wahr ....
pLumo
3
Dies sollte helfen (@eliah)
Pomsky
1
Um auf Pomskys Kommentar einzugehen. Wenn Sie eine Verbindung verweigert bekommen, zeigen Sie Fehler an, Sie müssen stattdessen einen Alias ​​setzen:pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY
mchid