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 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érerais ne pas réinventer la roue, surtout lorsqu'une erreur de ma part pourrait conduire à une sécurité sérieuse du système.
Ce que je ferais normalement dans cette situation est d'ajouter une ligne /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 très bien à partir de la ligne de commande. Cependant, lorsque je fais cela à partir de l'interface graphique, une pkexec
boîte de dialogue apparaît pour demander le mot de passe de l'utilisateur. Il semble que sur Ubuntu, les appels sudo
depuis l'interface graphique soient en quelque sorte interceptés par pkexec
.
Existe-t-il une solution claire à ce problème? Je préfère vraiment ne pas avoir à gérer les tracas d'un script setuid.
la source
sudo somecommand
, la boîte de dialogue qui s'affiche est unepkexec
boîte de dialogue de mot de passe, qu'il existe ou non une stratégie sudoers permettant l'exécution du programme.Réponses:
Il est incorrect de dire que: "Il semble que sur Ubuntu, les appels à
sudo
partir de l'interface graphique soient en quelque sorte interceptés parpkexec
" .pkexec
n'a pas grand chose en commun avecsudo
. Contrairement àsudo
,pkexec
n'accorde pas d'autorisation root à tout un processus, mais permet plutôt un niveau de contrôle plus fin de la stratégie système centralisée.Maintenant, si vous voulez exécuter une application graphique sans être invité par un mot de passe
pkexec
, ce n'est pas difficile à faire. Prenons par exemple GParted . Lorsque vous l'ouvrirez, vous verrez la boîte de dialogue suivante vous demander un mot de passe:Cliquez sur Détails et la fenêtre de dialogue ressemblera maintenant à:
De là, tout ce que vous avez à faire est d'ouvrir le fichier en utilisant par exemple la commande suivante:
/usr/share/polkit-1/actions/com.ubuntu.pkexec.gparted.policy
et modifiez les lignes suivantes:
avec les suivants:
Enregistrez le fichier et fermez-le. Ensuite, lorsque vous ouvrirez GParted, il ne vous sera plus demandé de mot de passe.
la source
gparted
. Lorsque vous exécutez à partir du terminalsudo gparted
, vous exécutez le/usr/sbin/gparted
fichier avec les privilèges root. Lorsque vous démarrez àgparted
partir de l'interface graphique, vous démarrez en faitgparted-pkexec
(vous pouvez vérifier ce/usr/share/applications/gparted.desktop
fichier à l' intérieur ) qui/usr/bin/gparted-pkexec
est un script shell dont le but est d'exécuter la commande suivante:pkexec "/usr/sbin/gparted"
qui est équivalente àpkexec gparted
. Donc, rien à voir avec çasudo
. Et cette commande que vous devez utiliser dans le terminal, nonsudo gparted
.sudo
doit être utilisé uniquement pour les applications shell, pas les applications GUI. Voirman sudo
etman pkexec
dans ce sens.