GNU/Linux >> Linux Esercitazione >  >> Linux

Qual è il modo corretto per impedire agli utenti non root di emettere arresti o riavvii

  • pklocalauthority è deprecato
  • Hai bisogno di systemd con logind e polkit.

Azioni disponibili

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

Dovresti guardare /usr/share/polkit-1/actions/org.freedesktop.login1.policy

Aggiungi regola

Per prima cosa inizia a monitorare i messaggi di sistema, così possiamo vedere se la nostra nuova regola funziona:

journalctl -f

Quindi crea il file /etc/polkit-1/rules.d/60-noreboot_norestart.rules (in javascript).

In questo file aggiungiamo la logica per controllare le azioni e consentire users in power raggruppare o richiedere su autorizzazione:

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;
        }
    }
});

La regola dovrebbe essere caricata e dovrebbe funzionare. Riferimenti sotto.

  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

Innanzitutto, tieni presente che la funzione di arresto di ConsoleKit considera "utente singolo" e "utenti multipli" come due situazioni diverse:l'arresto del sistema richiede sempre l'autenticazione dell'amministratore se altri utenti hanno effettuato l'accesso.

Tutte queste azioni sono gestite da PolicyKit. Se desideri modificare le politiche, puoi farlo come descritto in 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 e versioni precedenti lo documentano in 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

Il Action s sono elencati nel file dei criteri di ConsoleKit o eseguendo pkaction .


Linux
  1. Come impedire a `ls` di ordinare l'output?

  2. Qual è il modo corretto di usare inotify?

  3. Consenti agli script di leggere un file ma impedisci agli utenti di visualizzare direttamente il file

  4. Qual è il modo corretto di installare jdk su Linux

  5. Qual è il modo migliore per imparare SELinux?

Qual è il modo più semplice per liberare spazio su un disco rigido?

Qual è il modo più veloce per spostare un milione di immagini da una directory all'altra in Linux?

Qual è il modo più semplice per visualizzare i dati da stdout come grafico?

Qual è il modo più rapido per aggiungere testo a un file dalla riga di comando?

Qual è il modo più veloce per eseguire uno script?

Qual è il modo corretto per aprire una serie di porte in iptables