
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
, HOME
wird weiterhin zeigen in RichtungdeinHome-Verzeichnis, obwohl das Programm läuftalsroot
. Folglich gedit
werden Konfigurationsdateien geschriebenalsroot
in Ihr Home-Verzeichnis. Diesführt manchmal zuin den Konfigurationsdateienim Besitzvonroot
und 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 sudo
Frontend 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 duwollensudo
Um es direkt zum Ausführen einer grafischen Anwendung wie zu verwenden gedit
, können Sie Folgendes ausführen:
sudo -H gedit
Das -H
Flag zeigt sudo
auf HOME
den root
Home-Ordner von (der/root
).
Damit wird immer noch nicht automatisch der Besitz von.Xauthority
indem Sie es in einen temporären Ordner kopieren (das ist die andere Sache, die grafische sudo
Frontends für Sie erledigen). Aber in dem seltenen Fall, dass es .Xauthority
nicht 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 .Xauthority
ist 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 .Xauthority
bei 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 chown
alle 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_command
hat jetzt dieselbe Wirkung wie die Eingabe von sudo -H some_command
. Dies bedeutet, dass das Verzeichnis für alle berührten Konfigurationsdateien unter /root
Verzeichnis und nicht /home/regular_userID
unter 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 sudo
wie 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, sudo
funktioniert das oben genannte nicht so , daher kann sudo -H
die Verwendung von plain sudo
Ihre Benutzerkonfigurationsdateien beschädigen.
Eine Alternative zu gksu nautilus
oder ist die Verwendung des Add-ons. Es ermöglicht Ihnen das Durchsuchen von Dateien und Verzeichnissen gksu gedit
mitsudo -H gedit
nautilus-admin
Nautilusund ö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:
gedit
als root keine Einstellungen zulassen
Wenn Sie gedit
als 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, sgedit
um Benutzereinstellungen zu übernehmen und sie auf Root anzuwenden:Wie kann ich mein Root-Gedit mit den Einstellungen meines Benutzer-Gedit synchronisieren?
- Anrufen mit
sgedit filename1 filename2 ...
- Ruft die Gedit-Einstellungen des Benutzers für Tabstopps, Schriftarten, Zeilenumbruch usw. ab.
- Erhöht die Rechte, um
sudo -H
den Dateibesitz beizubehalten und gleichzeitig Root-Rechte zu erhalten. - Fordert das Passwort an, wenn die letzte
sudo
Zeit 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
gedit
als Hintergrundaufgabe aufgerufen, sodass die Terminal-Eingabeaufforderung sofort wieder angezeigt wird.