GNU/Linux >> Znalost Linux >  >> Linux

Jaký je správný způsob, jak zabránit uživatelům bez oprávnění root ve vydávání vypnutí nebo restartování

  • pklocalauthority je zastaralá
  • Potřebujete systemd with logind a polkit.

Dostupné akce

pkaction
# or /usr/share/polkit-1/actions/

Měli byste se podívat na /usr/share/polkit-1/actions/org.freedesktop.login1.policy

Přidat pravidlo

Nejprve začněte sledovat systémové zprávy, abychom viděli, zda naše nové pravidlo funguje:

journalctl -f

Poté vytvořte soubor /etc/polkit-1/rules.d/60-noreboot_norestart.rules (v javascriptu).

V tomto souboru přidáme logiku pro kontrolu akcí a povolíme users v power skupina nebo vyžadovat su autorizace:

polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.login1.reboot" ||
        action.id == "org.freedesktop.login1.reboot-multiple-sessions" ||
        action.id == "org.freedesktop.login1.power-off" ||
        action.id == "org.freedesktop.login1.power-off-multiple-sessions") {
        if (subject.isInGroup("power")) {
            return polkit.Result.YES;
        } else {
            return polkit.Result.AUTH_ADMIN;
        }
    }
});

Pravidlo by se mělo načíst a mělo by fungovat. Odkazy níže.

  1. https://lists.fedoraproject.org/pipermail/users/2013-September/440457.html
  2. https://wiki.archlinux.org/index.php/Polkit#Authorization_rules
  3. http://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html
  4. https://bbs.archlinux.org/viewtopic.php?pid=1335204#p1335204

Nejprve si všimněte, že funkce vypnutí ConsoleKit považuje „jeden uživatel“ a „více uživatelů“ za dvě různé situace – vypnutí systému vždy vyžaduje ověření správce, pokud jsou přihlášeni další uživatelé.

Všechny tyto akce jsou řízeny PolicyKit. Pokud chcete upravit zásady, můžete tak učinit podle popisu v polkit(8) – /etc/polkit-1/rules.d/20-disallow-shutdown.rules :

polkit.addRule(function(action, subject) {
    if ((action.id == "org.freedesktop.consolekit.system.stop" ||
         action.id == "org.freedesktop.consolekit.system.restart") &&
        subject.isInGroup("users")) {
            return subject.active ? polkit.Result.AUTH_ADMIN : polkit.Result.NO;
    }
});

PolicyKit 0.105 a starší verze to dokumentují v pklocalauthority(8) – /etc/polkit-1/localauthority/50-local.d/20-disallow-shutdown.pkla :

[Disallow shutdown]
Identity=unix-group:users
Action=org.freedesktop.consolekit.system.stop;org.freedesktop.consolekit.system.restart
ResultAny=no
ResultInactive=no
ResultActive=auth_admin

Action s jsou uvedeny v souboru zásad ConsoleKit nebo spuštěním pkaction .


Linux
  1. Jak zabránit `ls` v třídění výstupu?

  2. Jaký je správný způsob použití inotify?

  3. Povolit skriptům číst soubor, ale zabránit uživatelům v přímém zobrazení souboru

  1. Jaký je správný způsob vložení karty do sed?

  2. Jaký je správný způsob instalace jdk na linux

  3. Jaký je správný způsob otevření řady portů v iptables

  1. Jak zabránit uživatelům v přístupu ke kořenovému adresáři?

  2. Jaký je nejjednodušší způsob, jak SSH používat Python?

  3. Jaký je správný způsob, jak zajistit, aby se moje aplikace PyQt ukončila při zabití z konzoly (Ctrl-C)?