GNU/Linux >> Znalost Linux >  >> Linux

Linux – Jak se Gnome restartuje bez oprávnění root?

Č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

Linux
  1. Linux – Jak obnovit 70-persistent-net.rules bez restartu?

  2. Jak vypnout nebo restartovat Linux

  3. Jak zavést systém Linux bez grafického serveru

  1. Jak změnit název hostitele v systému Linux

  2. Jak Linux používá hodiny reálného času?

  3. Jak naplánuji restart na Linuxu?

  1. Jak nastavit oprávnění Sudo pro uživatele v Linuxu

  2. Jak zkontrolovat dostupnost systému v Linuxu

  3. Jak zobrazit datum a čas restartu systému Linux