Ich lese das Buch Linux Kernel Development, in Kapitel 5 „System Call Implementation“ steht auf Seite 77
Zum Beispiel prüft Capable(CAP_SYS_NICE), ob der Aufrufer die
Fähigkeit hat, Nice-Werte anderer Prozesse zu ändern. Standardmäßig besitzt der
Superuser alle Fähigkeiten und nonroot besitzt keine. Hier ist zum Beispiel der Systemaufruf reboot(). Beachten Sie, wie der erste Schritt
darin besteht, sicherzustellen, dass der aufrufende Prozess über CAP_SYS_REBOOT verfügt. Wenn diese eine
bedingte Anweisung entfernt würde, könnte jeder Prozess das
System neu starten.
In meiner Debian-Sid kann ich meinen Rechner jedoch neu starten, indem ich gnome verwende oder /sbin/reboot ohne sudo oder su ausführe.
Wie ist das möglich?
Vielleicht mit systemctl?
ls -l /sbin/reboot
lrwxrwxrwx 1 root root 14 Jun 28 04:23 /sbin/reboot -> /bin/systemctl
EDIT:Meine Benutzergruppen
[[email protected]:~]$ groups
damian sudo wireshark bumblebee
BEARBEITEN 2:systemctl-Berechtigungen
[[email protected]:~]$ ls -l /bin/systemctl
-rwxr-xr-x 1 root root 626640 Jun 28 04:23 /bin/systemctl
Akzeptierte Antwort:
Dies geschieht über einen Autorisierungsmanager namens polkit
:
polkit stellt eine Autorisierungs-API bereit, die von privilegierten
Programmen („MECHANISMEN“) verwendet werden soll, die Dienste für nichtprivilegierte Programme
(„SUBJEKTE“) anbieten, häufig über eine Form von Mechanismus zur Kommunikation zwischen Prozessen
.
Mit systemd
und polkit
Benutzer mit Nicht-Remote-Sitzung können energiebezogene Befehle erteilen. Sie können alle polkit
auflisten registrierte Aktionen und erhalte mit pkaction
Details zu ihnen (ohne Argumente aufgerufen, listet es alle Aktions-IDs auf).
In diesem speziellen Fall ist die Aktions-ID org.freedesktop.login1.reboot
also, wenn Sie ausführen:
pkaction --action-id org.freedesktop.login1.reboot --verbose
die Ausgabe sollte in etwa so aussehen:
org.freedesktop.login1.reboot:
description: Reboot the system
message: Authentication is required for rebooting the system.
vendor: The systemd Project
vendor_url: http://www.freedesktop.org/wiki/Software/systemd
icon:
implicit any: auth_admin_keep
implicit inactive: auth_admin_keep
implicit active: yes
Hier active: yes
bedeutet, dass der Benutzer in der aktiven Sitzung autorisiert ist,
das System neu zu starten (Details zu impliziten Autorisierungen auf polkit
Seite). Sie können überprüfen, ob Ihre Sitzung aktiv ist mit:
loginctl show-session $XDG_SESSION_ID --property=Active
Active=yes