Ich lese das Buch Linux-Kernel-Entwicklung in Kapitel 5 "Implementierung von Systemaufrufen" auf Seite 77
Beispielsweise prüft fähig (CAP_SYS_NICE), ob der Aufrufer in der Lage ist, nette Werte anderer Prozesse zu ändern. Standardmäßig verfügt der Superuser über alle Funktionen und Nonroot über 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 meinem Debian Sid kann ich meinen Computer jedoch mit gnome neu starten oder / sbin / reboot ohne sudo oder su ausführen. 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
BEARBEITEN: Meine Benutzergruppen
[damian@xvz:~]$ groups
damian sudo wireshark bumblebee
EDIT 2: Systemctl-Berechtigungen
[damian@xvz:~]$ ls -l /bin/systemctl
-rwxr-xr-x 1 root root 626640 Jun 28 04:23 /bin/systemctl
systemctl
. Wasls -l /bin/systemctl
sagt dir das?Antworten:
Dies erfolgt über einen Autorisierungsmanager namens
polkit
:Mit
systemd
undpolkit
Benutzer mit nicht Remote-Sitzung können strombezogene Befehle ausgeben. Sie können allepolkit
registrierten Aktionen auflisten und Details zu jeder von ihnenpkaction
abrufen (ohne Argumente werden alle Aktions-IDs aufgelistet).In diesem speziellen Fall lautet die Aktions-ID
org.freedesktop.login1.reboot
, wenn Sie Folgendes ausführen:Die Ausgabe sollte ungefähr so aussehen:
Hier
active: yes
bedeutet dies , dass der Benutzer in der aktiven Sitzung berechtigt ist, das System neu zu starten (Details zu impliziten Berechtigungen aufpolkit
Seite). Sie können überprüfen, ob Ihre Sitzung aktiv ist mit:quelle
rm -rf
Ihre Benutzerdateien ...sudo --user=jimmy
wo der Benutzerjimmy
hat nicht das Recht haben , dass polkit Befehl auszuführen ...