Screenshot
policykit-gnome

PolicyKit è un toolkit a livello applicazione per definire e manipolare le politiche che permettono a processi non privilegiati di comunicare con quelli privilegiati, allo scopo di concedere ad alcuni utenti il diritto di eseguire alcune attività in certe situazioni. A volta ci si riferisce a questo come a "il sudo di systemd".

Mentre PolicyKit è stato rimpiazzato da polkit (che ha riscritto componenti del sistema, rompendo la compatibilità all'indietro) in molte distribuzioni, Debian continua ad usare PolicyKit da Debian 7 wheezy fino a Debian 10 buster.

Esempi di utilizzo:

A differenza dei precedenti meccanismi utilizzati nelle GUI, PolicyKit è un posto centralizzato per definire ed attuare tale politica.

Per un'introduzione generale, leggere http://lwn.net/Articles/258592/ o la pagina di manuale polkit(8).

ToDo: spiegare come funziona.

Configurazione

Le politiche installate localmente dovrebbero essere installate in /etc/polkit-1/localauthority/.

Mentre gli esempi moderni di polkit tipicamente dimostrano l'uso di regole ?JavaScript, PolicyKit non supporta tale metodo e invece fa affidamento sull'uso di file *.conf e *.pkla. Vedere la pagina di manuale pklocalauthority(8) per i dettagli.

Esempi

Per permettere agli utenti del gruppo ungruppo di gestire i servizi systemd, creare /etc/polkit-1/localauthority/50-local.d/manage-units.pkla con i contenuti seguenti:

[Allow users to manage services]
Identity=unix-group:somegroup
Action=org.freedesktop.systemd1.manage-units
ResultActive=yes

Questo è l'equivalente per PolicyKit della seguente regola polkit che si potrebbe trovare in /etc/polkit-1/rules.d/50-manage-units.rules:

polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.systemd1.manage-units"
        && subject.isInGroup("somegroup") )
    {
        return polkit.Result.YES;
    }
});

Limitazioni

PolicyKit in Debian attualmente (Debian 11) non permette l'implementazione di permessi granulari usando la funzionalità lookup che è disponibile in polkit; ad esempio estendere l'esempio precedente per permettere solo l'avvio, l'arresto e il riavvio solo di una singola unità, con le regole polkit in questo modo:

   if (action.lookup("unit") == "openvpn.service") {
      var verb = action.lookup("verb");
      if (verb == "start" || verb == "stop" || verb == "restart")
   }

non è attualmente possibile con PolicyKit in Debian.

Vedere anche


CategorySystemAdministration