Warum sollten Benutzer niemals normales sudo verwenden, um grafische Anwendungen zu starten?

Warum sollten Benutzer niemals normales sudo verwenden, um grafische Anwendungen zu starten?

Ich habe gelesendie Community-Dokumentation "RootSudo"und bin an dieser Zeile interessiert:

Du solltestniemalsverwenden Sie normales sudo, um grafische Anwendungen als Root zu starten.

Warum? Was ist der Unterschied? Bitte geben Sie eine einfache Erklärung, da ich nur ein normaler Desktop-Benutzer bin.

Antwort1

In Ubuntu 19.10 und höher lautet die Ermahnung indieser Artikel(und in dieser Antwort) gilt nicht mehr. SieheAntwort von WinEunuuchs2Unixsowiediese Frage.

Grafische Anwendungen speichern Einstellungen und andere benutzerspezifische Daten häufig in Konfigurationsdateien, die imHome-OrdnerDer Hauptmechanismus, den Anwendungen verwenden, um zu bestimmen, was sie als Home-Ordner des Benutzers verwenden sollen, ist derHOME Umgebungsvariable. (Sie können es selbst mit überprüfen echo $HOME).

Angenommen, Sie laufengedit(ein grafischer Texteditor) alsroot. Wenn Sie laufen sudo gedit, HOMEwird weiterhin zeigen in RichtungdeinHome-Verzeichnis, obwohl das Programm läuftalsroot. Folglich geditwerden Konfigurationsdateien geschriebenalsrootin Ihr Home-Verzeichnis. Diesführt manchmal zuin den Konfigurationsdateienim Besitzvonrootund somitfür Sie unzugänglich(wenn Sie das Programm später als Sie selbst und nicht als ausführen root). Dies geschieht hauptsächlich, wenn die Anwendung eine neue Konfigurationsdatei erstellen muss. Neu erstellte Dateien gehören standardmäßig dem Benutzer, der sie erstellt hat (in diesem Fall ist das root, nicht Sie).

Das ist der Hauptgrund, warum Sie grafische Anwendungen mit einem grafischen sudoFrontend und nicht mit einem einfachen ausführen sollten sudo. In Ubuntu und den meisten seiner Derivate (einschließlich Xubuntu und Lubuntu) ist das standardmäßige grafische Frontendgksu/gksudo. In Kubuntu ist eskdesudo(Das hängt von derDesktopumgebungverwendet werden.)

Wenn duwollensudoUm es direkt zum Ausführen einer grafischen Anwendung wie zu verwenden gedit, können Sie Folgendes ausführen:

sudo -H gedit

Das -HFlag zeigt sudoauf HOMEden rootHome-Ordner von (der/root).

Damit wird immer noch nicht automatisch der Besitz von.Xauthorityindem Sie es in einen temporären Ordner kopieren (das ist die andere Sache, die grafische sudoFrontends für Sie erledigen). Aber in dem seltenen Fall, dass es .Xauthoritynicht zugänglich ist, erhalten Sie eine entsprechende Fehlermeldung und können das Problem dann beheben, indem Sie es löschen ( sudo rm ~/.Xauthority), da es automatisch neu generiert wird. Daher .Xauthorityist der Schutz der Eigentumsrechte und Berechtigungen von weniger wichtig als der Schutz der Eigentumsrechte und Berechtigungen von Konfigurationsdateien.

Im Gegensatz zu root-owned ist es .Xauthoritybei Konfigurationsdateien, die als owned gekennzeichnet werden root, nicht immer so offensichtlich, wo das Problem liegt (weil grafische Programme zwar oft laufen, aber nicht sehr gut funktionieren und nützliche Fehler auf der Konsole ausgeben). Und es ist manchmal ein größerer Aufwand, es zu beheben, insbesonderewenn Sie sich in einer Situation befinden, in der Sie möchten, dass eine oder mehrere Dateien in Ihrem Home-Verzeichnis jemand anderem als Ihnen gehören(weil Sie das Problem dann nicht beheben können, indem Sie chownalle Ihre Dateien rekursiv an sich selbst zurückübertragen).

Daher sollte sudo(zumindest ohne -H) nicht zum Ausführen einer grafischen Anwendung verwendet werdenes sei dennSie sind mit der Funktionsweise der App bestens vertraut und wissen mit Sicherheit, dass sie niemals versucht, Konfigurationsdateien zu schreiben.

Antwort2

Einfach gesagt:

Dadurch wird verhindert, dass Dateien in Ihrem Home-Verzeichnis in den Besitz von Root gelangen.

Lies esHier. Möglicherweise auch ein Duplikat vonWas ist der Unterschied zwischen „gksudo nautilus“ und „sudo nautilus“?

Antwort3

Ubuntu 19.10-Update

AbUbuntu 19.10, die Eingabe sudo some_commandhat jetzt dieselbe Wirkung wie die Eingabe von sudo -H some_command. Dies bedeutet, dass das Verzeichnis für alle berührten Konfigurationsdateien unter /rootVerzeichnis und nicht /home/regular_userIDunter Verzeichnis (auch bekannt als $HOME) liegt.

Dies macht diese ganze Frage und Antwort für Benutzer von Ubuntu 19.10 und höher weitgehend hinfällig.

Um zu sehen, ob es in Ihrer Distribution sudowie gewohnt funktioniert, führen Sie diese kurzen Tests durch:sudo -H

$ sudo printenv | grep HOME
HOME=/home/rick

$ sudo -H printenv | grep HOME
HOME=/root

Wie Sie sehen, sudofunktioniert das oben genannte nicht so , daher kann sudo -Hdie Verwendung von plain sudoIhre Benutzerkonfigurationsdateien beschädigen.


Eine Alternative zu gksu nautilusoder ist die Verwendung des Add-ons. Es ermöglicht Ihnen das Durchsuchen von Dateien und Verzeichnissen gksu geditmitsudo -H geditnautilus-adminNautilusund öffnen Sie sie dann als Root (Administrator).

Die Installation ist unkompliziert:

sudo apt install nautilus-admin

Wenn Sie sich jetzt in Nautilus befinden, haben Sie eine zusätzliche Option zum Bearbeiten als Administrator:

nautilus admin.gif


geditals root keine Einstellungen zulassen

Wenn Sie geditals Root arbeiten, können Sie die Einstellungen, die Sie als normaler Benutzer für Tabstopps, die Umwandlung von Tabs in Leerzeichen, Schriftnamen, Schriftgrößen, Zeilenumbrüche usw. eingerichtet haben, nicht verwenden.

Um dieses Problem zu lösen, habe ich das Skript geschrieben, sgeditum Benutzereinstellungen zu übernehmen und sie auf Root anzuwenden:Wie kann ich mein Root-Gedit mit den Einstellungen meines Benutzer-Gedit synchronisieren?

  • Anrufen mitsgedit filename1 filename2 ...
  • Ruft die Gedit-Einstellungen des Benutzers für Tabstopps, Schriftarten, Zeilenumbruch usw. ab.
  • Erhöht die Rechte, um sudo -Hden Dateibesitz beizubehalten und gleichzeitig Root-Rechte zu erhalten.
  • Fordert das Passwort an, wenn die letzte sudoZeit abgelaufen ist.
  • Ruft die Gedit-Einstellungen von sudo ab
  • Vergleicht die Unterschiede zwischen den Benutzer- und Sudo-Gedit-Einstellungen
  • Führt „gsettings set“ nur für die Unterschiede aus (reduziert 174 Set-Befehle auf ein Dutzend oder weniger). Beim nächsten Ausführen werden möglicherweise nur eine oder zwei Änderungen vorgenommen, aber oft überhaupt keine.
  • Wird geditals Hintergrundaufgabe aufgerufen, sodass die Terminal-Eingabeaufforderung sofort wieder angezeigt wird.

verwandte Informationen