Čtu knihu Linux kernel development, v kapitole 5 „Implementace systémového volání“ na straně 77 se píše
Například schopnost(CAP_SYS_NICE) kontroluje, zda má volající schopnost
upravovat pěkné hodnoty jiných procesů. Ve výchozím nastavení má
superuživatel všechny schopnosti a nonroot nemá žádné. Například
zde je systémové volání reboot(). Všimněte si, že jeho prvním krokem je
zajištění toho, aby volající proces měl CAP_SYS_REBOOT . Pokud by byl tento jeden
podmíněný příkaz odstraněn, jakýkoli proces by mohl restartovat
systém.
V mém Debian Sid však mohu restartovat svůj počítač pomocí gnome nebo spuštěním /sbin/reboot bez sudo nebo su.
Jak je to možné?
Možná pomocí systemctl?
ls -l /sbin/reboot
lrwxrwxrwx 1 root root 14 Jun 28 04:23 /sbin/reboot -> /bin/systemctl
EDIT:Moje uživatelské skupiny
[[email protected]:~]$ groups
damian sudo wireshark bumblebee
ÚPRAVA 2:Systemctl oprávnění
[[email protected]:~]$ ls -l /bin/systemctl
-rwxr-xr-x 1 root root 626640 Jun 28 04:23 /bin/systemctl
Přijatá odpověď:
To se provádí prostřednictvím správce oprávnění s názvem polkit
:
polkit poskytuje autorizační API určené k použití privilegovanými
programy („MECHANISMY“) nabízejícími služby neprivilegovaným programům
(„SUBJECTS“) často prostřednictvím nějaké formy meziprocesové komunikace
mechanismu.
Pomocí systemd
a polkit
uživatelé s nevzdálenou relací mohou vydávat příkazy související s napájením. Můžete uvést všechny polkit
registrované akce a získat podrobnosti o kterékoli z nich pomocí pkaction
(při vyvolání bez argumentů vypíše všechna ID akcí).
V tomto konkrétním případě je ID akce org.freedesktop.login1.reboot
takže pokud spustíte:
pkaction --action-id org.freedesktop.login1.reboot --verbose
výstup by měl být něco jako:
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
Zde active: yes
znamená, že uživatel v aktivní relaci je oprávněn
restartovat systém (podrobnosti o implicitních autorizacích na polkit
strana). Zda je vaše relace aktivní, můžete zkontrolovat pomocí:
loginctl show-session $XDG_SESSION_ID --property=Active
Active=yes