PolKit : Gestion des droits des utilisateurs
PolKit (anciennement PolicyKit) est une couche de gestion d'authentification et de permissions pour gérer finement les différentes opérations permises à un utilisateur ou un groupe d'utilisateurs, avec ou sans mot de passe.
Fonctionnement de base
Certains logiciels, comme la commande flatpak, la logithèque ou les paramètres système vous demanderont parfois automatiquement votre mot de passe pour certaines actions. Il s'agit de logiciels intégrant une élévation de privilèges par PolKit.
PolKit est un logiciel moderne actuellement privilégié par les développeurs d'environnements graphiques grâce à la sécurité qu'il fournit, en effet il fonctionne selon le principe suivant : un programme (démon) s'exécute en arrière-plan (sans fenêtre), et dispose des droits root.
Les applications sont invitées à lui demander les droits nécessaires pour effectuer des opérations spécifiques.
PolKit saura quoi répondre en fonction des "policy" paramétrées (des configurations qui définissent qui peut faire quoi, et quel logiciel a besoin de quels privilèges).
Cela évite donc de lancer des programmes graphiques en tant que super-utilisateur, ça évite également d'utiliser sudo
pour des commandes n'en ayant pas besoin ou ne le supportant pas, la sécurité est donc accrue, et moins d'actions sont requises de la part de l'utilisateur (ce sont les applications qui demandent les droits, pas l'utilisateur).
Exemples
Parmi les programmes capables d'utiliser PolKit, on peut citer :
- Les paramètres système (concernant l'ajout d'utilisateur par exemple)
- etc.
Si votre compte est paramétré correctement, l'action demandée pourra alors s'effectuer sans problème (sinon, référez-vous à ceci ou ceci).
L'exemple de Nautilus
À partir d'Ubuntu 17.10, dans le gestionnaire de fichiers Nautilus, on peut faire précéder l'adresse (accessible en faisant "Ctrl L
") par le préfixe
admin://
exemple :
admin:///usr/share/applications/
le mot de passe sera alors demandé, et l'emplacement en question sera ouvert avec les droits d'administration. Vous pourrez notamment y modifier des fichiers avec gedit.
Pourtant, remarquez que Nautilus conserve la configuration de l'utilisateur courant (signets, thèmes, …) : PolKit agit comme un filtre très précis, qui ne prend à root que ses privilèges de lecture et d'écriture dans les dossiers, sans prendre sa configuration.
Installation
Le paquet qui installe PolKit est policykit-1, il est déjà installé par défaut sur Ubuntu Gnome, Mate, Xfce et Cinnamon
Pour voir la configuration à partir d'une interface graphique, installer polkit-explorer
Utilisation
Créer ou modifier des "policy"
Pour gérer les règles il faut donc éditer les fichiers de configuration à la main avec les droits d'administration. La configuration se fait avec des règles et des actions :
- Les Actions sont définies dans des fichiers XML .policy situés dans /usr/share/polkit-1/actions
- Les règles d'autorisation sont définies dans les fichiers .rules JavaScript. On les trouve à deux endroits :
- /usr/share/polkit-1/rules.d pour les paquets tiers peuvent utiliser (bien que peu, voire aucun, ne le fasse)
- /etc/polkit-1/rules.d pour la configuration locale.
La documentation vous aidant à écrire les jolies règles personnalisées pour donner "juste ce qu'il faut" de droits à vos utilisateurs, tapez dans un terminal :
man pklocalauthority
Ou consultez la documentation en ligne
La page How to configure pkexec to not ask for password ? donne également un exemple intéressant de comment demander à pkexec d'arreter de demander un mot de passe. A configurer avec prudence pour des raisons de sécurité !
Exemple simple
/etc/polkit-1/rules.d/MaRegle.rules
[Allow monApplication] Identity=unix-group:sudo Action=org.freedesktop.policykit.exec ResultActive=yes
/usr/share/polkit-1/actions
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN" "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd"> <policyconfig> <action id="com.ubuntu.pkexec.monApplication"> <message gettext-domain="monApplication">Authentication is required to execute actions</message> <icon_name>configurator</icon_name> <defaults> <allow_any>yes</allow_any> <allow_inactive>yes</allow_inactive> <allow_active>yes</allow_active> </defaults> <annotate key="org.freedesktop.policykit.exec.path">maCommandeALaquelleJeVeuxDesAutorisationsSpeciales</annotate> <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate> </action> </policyconfig>
Ici, vous remplacerez monApplication et maCommandeALaquelleJeVeuxDesAutorisationsSpeciales Ex :
- monApplication = gparted
- maCommandeALaquelleJeVeuxDesAutorisationsSpeciales = /usr/sbin/gparted
La commande pkexec
En faisant précéder une commande par pkexec
, on peut lancer une commande avec des privilèges élevés. Exemple :
pkexec apt update
Une boîte de dialogue apparaît alors pour demander votre mot de passe ; après validation, la commande s'exécute.
$DISPLAY
et $XAUTHORITY
:
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY nom-du-programme