J'ai une application graphique qui doit appeler un démon (écrit en Python) avec des privilèges de superutilisateur. Je voudrais faire ceci sans demander à l'utilisateur un mot de passe.
Le démon étant un script, je ne peux pas définir le bit SUID directement. Je pourrais écrire un wrapper en C pour cela, mais je préférerais ne pas réinventer la roue, en particulier lorsqu'une erreur de ma part pourrait compromettre gravement la sécurité du système.
Ce que je ferais normalement dans cette situation est d'ajouter une ligne dans /etc/sudoers
qui permet aux utilisateurs d'exécuter le démon en tant que root sans mot de passe, à l'aide de la directive NOPASSWD. Cela fonctionne très bien depuis la ligne de commande. Cependant, lorsque je le fais depuis l'interface graphique, une boîte de dialogue pkexec
s'ouvre pour vous demander le mot de passe de l'utilisateur. Il semble que sur Ubuntu, les appels à Sudo
de l'interface graphique sont en quelque sorte interceptés par pkexec
.
Y a-t-il un moyen propre de contourner cela? Je préférerais vraiment ne pas avoir à gérer les soucis d'un script setuid.
Il est impropre de dire que: "Il semble que sous Ubuntu, les appels à Sudo
depuis l'interface graphique sont en quelque sorte interceptés par pkexec
" . pkexec
n'a pas grand chose en commun avec Sudo
. Contrairement à Sudo
, pkexec
n'accorde pas l'autorisation root à l'ensemble d'un processus, mais permet plutôt un contrôle plus précis de la stratégie du système centralisé.
Maintenant, si vous voulez exécuter une application graphique sans être invité par un mot de passe par pkexec
, ceci n’est pas difficile à faire. Prenons par exemple GParted. Lorsque vous l'ouvrez, la fenêtre de dialogue suivante vous demande par mot de passe:
Cliquez sur Détails et la fenêtre de dialogue ressemblera à ceci:
Il ne vous reste plus qu'à ouvrir le fichier /usr/share/polkit-1/actions/com.ubuntu.pkexec.gparted.policy
à l'aide, par exemple, de la commande suivante:
gksu gedit /usr/share/polkit-1/actions/com.ubuntu.pkexec.gparted.policy
et changez les lignes suivantes:
<allow_any>auth_admin</allow_any>
<allow_inactive>auth_admin</allow_inactive>
<allow_active>auth_admin</allow_active>
avec les suivants:
<allow_any>yes</allow_any>
<allow_inactive>yes</allow_inactive>
<allow_active>yes</allow_active>
Enregistrez le fichier et fermez-le. Ensuite, lorsque vous ouvrirez GParted , vous ne serez plus invité à saisir un mot de passe.