J'ai une application graphique qui doit appeler un démon (écrit en Python) avec des privilèges de superutilisateur. Je voudrais le faire sans demander à l'utilisateur de saisir un mot de passe.
Étant donné que le démon est un script, je ne peux pas définir directement le bit SUID. Je pourrais écrire un wrapper C pour cela, mais je préfère ne pas réinventer la roue, surtout lorsqu'une erreur de ma part pourrait gravement compromettre 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, en utilisant la directive NOPASSWD. Cela fonctionne bien depuis la ligne de commande. Cependant, lorsque je fais cela à partir de l'interface graphique, un pkexec
Une boîte de dialogue apparaît demandant 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
.
Existe-t-il un moyen propre de contourner cela? Je préférerais vraiment ne pas avoir à m'occuper des tracas d'un script setuid.
Meilleure réponse
Il est inapproprié de dire que :"Il semble que sur Ubuntu, les appels à sudo
de 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 racine à un processus entier, mais permet plutôt un niveau de contrôle plus fin de la stratégie système centralisée.
Maintenant, si vous souhaitez exécuter une application graphique sans être invité par un mot de passe par pkexec
, ce n'est pas difficile à faire. Prenons par exemple GParted . Lorsque vous l'ouvrirez, vous verrez la fenêtre de dialogue suivante vous demandant un mot de passe :
Cliquez sur Détails et la fenêtre de dialogue ressemblera maintenant à :
À partir de là, tout ce que vous avez à faire est d'ouvrir /usr/share/polkit-1/actions/com.ubuntu.pkexec.gparted.policy
fichier en utilisant par exemple la commande suivante :
gksu gedit /usr/share/polkit-1/actions/com.ubuntu.pkexec.gparted.policy
et modifiez les lignes suivantes :
<allow_any>auth_admin</allow_any>
<allow_inactive>auth_admin</allow_inactive>
<allow_active>auth_admin</allow_active>
avec les éléments suivants :
<allow_any>yes</allow_any>
<allow_inactive>yes</allow_inactive>
<allow_active>yes</allow_active>
Enregistrez le fichier et fermez-le. Ensuite, quand vous ouvrirez GParted on ne vous demandera plus de mot de passe.
Connexe :Est-il possible avec Gedit ou la ligne de commande de modifier toutes les quatre lignes d'un fichier texte ?