PolKit és systemd

Fórumok

RHEL7.2-n:

# pkaction -v -a org.freedesktop.login1.power-off
org.freedesktop.login1.power-off:
  description:       Power off the system
  message:           Authentication is required for powering off 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

A polkit manualja szerint:


allow_active
   Implicit authorizations that apply to clients in active sessions on local consoles. Optional.

Azaz ha user bejelentkezik konzolról, akkor poweroff-fal le tudja állítani a gépet (ha épp nincs senki bejelentkezve). Ha meg igen, akkor is nyomhat egy systemctl poweroff -i parancsot, erre még tippet is ad neki a rendszer.

Ez nekem nem tetszik... RH kiadott rá egy KB cikket, hogy lehet 'javítani'. Amit nem értek, hogy ez defaultban miért van engedélyezve (más egyéb tevékenységekkel együtt, ld. pkaction -v). Oké, hogy van konzol hozzáférése, de ne segítsünk még neki, szerintem.


polkit.addRule(function(action, subject) {
  if (action.id == "org.freedesktop.login1.power-off" ||
      action.id == "org.freedesktop.login1.power-off-multiple-sessions" ||
      action.id == "org.freedesktop.login1.reboot" ||
      action.id == "org.freedesktop.login1.reboot-multiple-sessions" ||
      action.id == "org.freedesktop.login1.inhibit-block-shutdown" ||
      action.id == "org.freedesktop.login1.inhibit-delay-shutdown" ||
      action.id == "org.freedesktop.login1.suspend" ||
      action.id == "org.freedesktop.login1.suspend-multiple-sessions" ||
      action.id == "org.freedesktop.login1.suspend-ignore-inhibit" ||
      action.id == "org.freedesktop.login1.hibernate" ||
      action.id == "org.freedesktop.login1.hibernate-multiple-sessions")
  {
    return polkit.Result.NO;
  }
});

Hozzászólások

Na, de miért ne segítsük hozzá? Ha jól tudom, amikor ignore-inhibitors kapcsolót használ valaki, akkor viszont kell tudnia a root jelszót, hogy a rendszer megtegye, amit a felhasználó kért.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Mert ez nem egy desktop rendszer, ahol a user konzolról jön be és jó ha le tudja a gépet állítani root jelszó nélkül.

Most, hogy a systemd már támogatja a PolKit-et, nem elég átnézni a szokásos sudo jogokat, setuid programokat, stb hogy lássam egy adott user mit csinálhat meg, de még a PolKit szabályokat is mazsolázzam át...

Jó, de ha local konzolon van belépve a user akkor ott van a gépnél. Ott pedig ctrl-alt-del-t nyomhat, power gombot nyomkodhatja (hosszan is), a tábkábelt kihúzhatja, whatever.

Egyetlen potenciális problémát látok, hogy a user elkezd mindenféle netről szedett random script-eket futtatni, és az egyikbe egy vicces ember csempészett egy poweroff-ot. De az ilyen varázslást nem local konzolon szokták csinálni, szóval ennek se sok az esélye.