Linux-Berechtigung zum Herunterfahren

8

Angenommen, Sie installieren eine Desktop-Umgebung, z. B. Ubuntu oder Debian. Sie können das System herunterfahren, indem Sie als normaler Benutzer auf eine Schaltfläche in Ihrem Systemmenü klicken. Sie müssen nicht zum Superuser wechseln, um dies zu erreichen.

Wenn ich jedoch in derselben Desktop-Umgebung ein Terminal (z. B. gnome-terminal) als normaler Benutzer öffne und tippe

shutdown -h now

Ich würde von aufgefordert werden

shutdown: need to be root

Die einzige Möglichkeit zum Herunterfahren besteht darin, dem Befehl ein Sudo voranzustellen.

Kann jemand erklären, warum das so ist?

Danke KC

K.Chen
quelle

Antworten:

8

Die von K.Chen gestellte Frage lautet: Warum brauche ich Sudo-Berechtigungen, wenn ich dies über die CLI mache, obwohl ich solche Privilegien nicht benötige, wenn ich es über die GUI mache?

Der erste Teil der Antwort lautet, dass Benutzer, die Desktop-Umgebungen wie Gnome, KDE, Xfce, Mate, Cinnamon usw. entwerfen, versuchen, die Arbeit ihrer Benutzer zu vereinfachen, und das Herunterfahren und Neustarten konfigurieren, ohne dass Sudo-Anmeldeinformationen erforderlich sind. Dies impliziert im Übrigen, dass es eine Sequenz zum Herunterfahren geben muss, die nicht das Herunterfahren des Programms beinhaltet, für das Sudo-Berechtigungen erforderlich sind (daran führt kein Weg vorbei).

Ich weiß nicht im Detail, wie jedes DE es macht, aber ich weiß, dass es eine sanfte Möglichkeit gibt, Ihr System herunterzufahren oder neu zu starten / herunterzufahren / in den Ruhezustand zu versetzen, für die keine Root-Rechte erforderlich sind. Sie finden den Originalbeitrag in einem Beitrag im Arch Linux Forum . Im Wesentlichen kommt es darauf an, diese Befehle auszugeben:

Halt

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit"/org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop

Neustart

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit"  /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart

dbus-suspend

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend

überwintern

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Hibernate 

Ich vermute, dass die GUI-Schaltflächen ungefähr diese Befehle verwenden. Um sicher zu sein, sollte man sich den Code ansehen, aber ich glaube, das ist eine sichere Sache.

MariusMatutiae
quelle
1
Kann sich jemand, der sich remote bei einem Computer anmeldet, auf dem auch eine Desktop-Umgebung ausgeführt wird, diese Befehle ausgeben und erfolgreich herunterfahren / neu starten / anhalten / in den Ruhezustand versetzen?
Gerrit
Diese Frage hat eine böswillige Seite. Ich glaube, es sollte ein gewisses Maß an Diskretion ausgeübt werden.
Marius Matutiae
1
Warum bösartig? Wenn es missbraucht werden kann, sollten Sysops wissen und dann wissen, wie sie sich davor schützen können.
Gerrit
Ich sage nicht, dass Sie böswillig sind, aber dass diese Informationen böswillig verwendet werden könnten. Ich bereue es bereits, es geteilt zu haben ... Vielleicht hätte ich es wie @Matteo
MariusMatutiae
5

Der Grund für diese Entwurfsentscheidung ist nicht technischer Natur (Sie haben möglicherweise einen nicht privilegierten shutdownBefehl oder benötigen ein Kennwort in der GUI).

  • Wenn eine Desktop - Umgebung wird der Benutzer soll auf die Maschine physischen Zugriff haben. Dann ist es besser, ein sauberes Herunterfahren zuzulassen, als den Benutzer den Netzschalter drücken oder das Netzkabel abziehen zu lassen.

  • Bei Verwendung einer Shell kann der Benutzer ein Remote-Benutzer sein. Um ein Remote-Herunterfahren zu vermeiden, werden weitere Berechtigungen angefordert.

Dies sind keine Regeln, sondern nur Standardeinstellungen, die auf Annahmen basieren: Sie können einen lokalen Benutzer in einer Shell und einen Remotebenutzer mit einer Desktopumgebung haben. Wenn Sie das Standardverhalten auswählen möchten, können Sie Ihr System entsprechend konfigurieren.

Matteo
quelle
Ich verstehe deinen Standpunkt, @Matteo. Aber wie MariusMatutiae sagte, muss DE unter der Haube ein anderes Programm als "shutdown" aufgerufen haben, um ohne Superuser-Privileg herunterzufahren. Sie haben eine Ahnung, was das ist?
K.Chen
1

Mit Sudo (Superuser do) kann ein Systemadministrator bestimmten Benutzern (oder Benutzergruppen) die Möglichkeit geben, einige (oder alle) Befehle als root auszuführen, während alle Befehle und Argumente protokolliert werden. Mit dem Befehl shutdown -h oder dem Befehl init 0 kann die Maschine ausgeschaltet werden. Für beide Befehle waren jedoch Root-Berechtigungen erforderlich.

Der Befehl, der sich in / sbin befindet, muss über Root-Berechtigungen verfügen, um ihn ausführen zu können. Um den Ort des Befehls zum Herunterfahren zu ermitteln,

Geben Sie die Abschaltung im Terminal ein.

Hoffe jetzt ist dein Zweifel klar :)

Unnikrishnan
quelle