Comment configurer pkexec?

32

Lire ces questions et réponses:

m'a apporté un autre qui va créer des problèmes pour les nouveaux utilisateurs de cette commande:

  • Comment configurer pkexecpour une utilisation facile?

Par exemple, lorsque vous effectuez les opérations suivantes:

(Ouverture d'un fichier dans le terminal)

pkexec nano /etc/mysql/my.cnf  

(Ouverture d'un fichier dans l'interface graphique)

pkexec gedit /etc/mysql/my.cnf  

Le dernier obtient l'erreur suivante:

 pkexec must be setuid root

Maintenant, cela m'a amené les questions suivantes:

  1. Comment configurer pkexecpour éviter de l'obtenir? Similaire à comment sudo/ gksuse comporter lorsque vous faites la même chose (ils ne demandent que le mot de passe).

  2. Le cas échéant, comment lui dire de ne pas demander de mot de passe après la première application à une commande (ou d'inclure la première commande si elle est configurable)?

  3. Où enregistrer le fichier de configuration s'il n'est pas encore existant?

  4. Existe-t-il une application graphique pour configurer l' pkexecutilisation (Policy Kit)?

Luis Alvarado
la source
1
Dans leiu d'Ubuntu s'occupant des affaires à cet égard au 13.04, c'est ce que je fais pour gedit & nautilus. Fonctionne bien ici mais ne sera pas publié comme réponse car c'est juste ma solution jusqu'à ce qu'Ubuntu s'occupe. ubuntuforums.org/…
doug
Hmm, je ne peux pas ajouter de commentaire - il faut donc avoir recours à une réponse ... Utilisation: alias pkexec = 'pkexec env DISPLAY = $ DISPLAY XAUTHORITY = $ XAUTHORITY' Signifie que l'interface de connexion renvoie le chemin d'env plutôt que la commande finalement exécuté. Existe-t-il un moyen d'organiser l'utilisation de "env DISPLAY = $ DISPLAY XAUTHORITY = $ XAUTHORITY" afin que pkexec gui renvoie le chemin vers la commande finalement exécutée? Voir la photo ici: boîte de dialogue d'authentification polkit

Réponses:

39

Comment configurer pkexecpour éviter d'obtenir des erreurs lors de l'exécution des applications GUI?

J'ai trouvé deux façons possibles:

  1. Comme vous pouvez le voir, en utilisant ce qui suit:

    pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gedit
    

    ne vous obtiendra aucune erreur. Et c'est normal car man pkexecc'est très clair en la matière:

           [...] pkexec will not allow you to run X11 applications
           as another user since the $DISPLAY and $XAUTHORITY environment
           variables are not set.[...]
    

    En conséquence, vous pouvez créer un alias ( permanent ) (c'est le moyen le plus simple):

    alias pkexec='pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY'
    
  2. Ou, (encore) comme man pkexecdit:

           [...] These two variables will be retained if the
           org.freedesktop.policykit.exec.allow_gui annotation on an action is set
           to a nonempty value; this is discouraged, though, and should only be
           used for legacy programs.[...]
    

    vous pouvez créer un nouveau fichier de stratégie dans /usr/share/polkit-1/actionsnamed com.ubuntu.pkexec.gedit.policyavec le code xml suivant dans lequel la chose la plus importante est de définir org.freedesktop.policykit.exec.allow_guiune valeur non vide:

    <?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.gedit">
        <message gettext-domain="gparted">Authentication is required to run gedit</message>
        <icon_name>gedit</icon_name>
        <defaults>
          <allow_any>auth_admin</allow_any>
          <allow_inactive>auth_admin</allow_inactive>
          <allow_active>auth_admin</allow_active>
        </defaults>
        <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/gedit</annotate>
        <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
      </action>
    
    </policyconfig>
    

Comment lui dire de ne pas demander de mot de passe après la première application à une commande?

Pour ces trois balises de réglage: allow_any, allow_inactiveet à allow_activepartir du fichier de stratégie, les options suivantes sont disponibles:

  • non : L'utilisateur n'est pas autorisé à exécuter l'action. Il n'y a donc pas besoin d'authentification.
  • oui : L'utilisateur est autorisé à effectuer l'action sans aucune authentification.
  • auth_self : l'authentification est requise mais l'utilisateur n'a pas besoin d'être un administrateur.
  • auth_admin : l'authentification en tant qu'administrateur est requise .
  • auth_self_keep : Identique à auth_self mais, comme sudo, l'autorisation dure quelques minutes.
  • auth_admin_keep : Identique à auth_admin mais, comme sudo, l'autorisation dure quelques minutes.

     Source: Polkit - Structure - Actions

Donc, si vous utilisez l' option auth_admin_keep (ou, le cas échéant, auth_self_keep ), pkexecne demandera plus de mot de passe pendant un certain temps (par défaut, ce temps est défini sur 5 minutes comme je l'ai vérifié). L'inconvénient ici est que cette chose n'est applicable que pour une - la même - commande / application et valable pour tous les utilisateurs (sauf si elle est annulée dans une configuration ultérieure).

Où enregistrer le fichier de configuration s'il n'est pas encore existant?

Les fichiers de configuration ou les définitions de polkit peuvent être divisés en deux types:

  • Les actions sont définies dans des fichiers XML .policy situés dans /usr/share/polkit-1/actions. Chaque action est associée à un ensemble d'autorisations par défaut (par exemple, vous devez vous identifier en tant qu'administrateur pour utiliser l'action GParted). Les valeurs par défaut peuvent être annulées, mais l'édition des fichiers d'actions n'est PAS la bonne façon. Le nom de ce fichier de stratégie doit avoir le format suivant:

    com.ubuntu.pkexec.app_name.policy
  • Les règles d'autorisation sont définies dans des fichiers JavaScript .rules. Ils se trouvent à deux endroits: les packages tiers peuvent utiliser /usr/share/polkit-1/rules.d(bien que peu ou pas) et /etc/polkit-1/rules.dsont destinés à la configuration locale. Les fichiers .rules désignent un sous-ensemble d'utilisateurs, font référence à une (ou plusieurs) des actions spécifiées dans les fichiers d'actions et déterminent avec quelles restrictions ces actions peuvent être effectuées par cet / ces utilisateur (s). À titre d'exemple, un fichier de règles peut remplacer l'exigence par défaut pour tous les utilisateurs de s'authentifier en tant qu'administrateur lors de l'utilisation de GParted, ce qui détermine qu'un utilisateur spécifique n'a pas besoin de le faire. Ou n'est pas autorisé à utiliser GParted du tout.

     Source: Polkit - Structure

Existe-t-il une application graphique pour configurer l' pkexecutilisation?

D'après ce que je sais, jusqu'à présent (18.01.2014) n'existe pas quelque chose comme ça. Si à l'avenir je trouve quelque chose, je n'oublierai pas non plus de mettre à jour cette réponse.

Radu Rădeanu
la source
4
quelle belle réponse !! Merci beaucoup. Maintenant, je comprends pourquoi je ne pouvais pas courir doublecmdavec ROOT PRIVELEGES, car j'avais besoin d'exporter des environnements avec DISPLAY & XAUTHORITY!! Juste de petites questions: y a-t-il une différence dans la politique d'écriture ou dans l'exécution d'un programme avec commande comme pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY doublecmdtout le temps?
Ilia Rostovtsev
@IliaRostovtsev ce que je pense, pkexecdeviendra aussi dangereux que gksudos'il était exécuté via un tel alias? peut être, au lieu d'un alias, ce pourrait être un script avec des privilèges root, pourrait être plus sûr?
Aquarius Power
@AquariusPower De quelle manière vous voyez que cela pourrait devenir dangereux? Vous pouvez essayer, bien sûr, mais je ne suis pas sûr. Le problème survient lorsque vous devez utiliser une interface graphique (X Server) qui s'exécute sous «vous» et un autre programme d'interface graphique qui doit être exécuté en tant que root. Jouez et retournez s'il vous plaît, au cas où vous trouveriez quelque chose.
Ilia Rostovtsev
@ radu-rădeanu Sur Utopic auth_admin_keepne semble pas fonctionner. Si je démarre synaptique depuis gui (qui est équivalent à pkexec synaptic), il demande un mot de passe à chaque fois. Une idée pourquoi?
Khurshid Alam du
0

En plus de la réponse de Radu: je n'utiliserais pas l'alias pkexec, mais gksudo .

Pourquoi? Vous n'avez pas besoin de réécrire votre script.

J'utilise la configuration suivante:

  • ouvrir un terminal
  • cd /usr/local/bin
  • sudo gedit gksudo (créer un nouveau fichier appelé "gksudo"
  • écrire le contenu suivant:

    • pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY $@

    • (n'oubliez pas le $@à la fin. C'est pour rediriger tous les paramètres)

  • sauvegarder et quitter

  • rendre le fichier exécutable: chmod 755 gksudo
  • Maintenant, vous devriez avoir une commande gksudo entièrement fonctionnelle disponible sur votre système - en permanence.

Pour des raisons de documentation, j'écrirai ce que j'ai essayé et qui n'a pas fonctionné:

  • alias pkexec = 'pkexec env [...]'
  • alias gksudo = 'pkexec [...]'
    • N'était pas permanent et ne restait que dans un seul terminal
  • ajout de l'alias à ~/.bash_aliases
    • Fonctionne si vous ouvrez un terminal pour la première fois. Ne fonctionne pas si vous double-cliquez sur des scripts
  • Créer un lien vers pkexec avec paramètres ( ln -s pkexec [...])
    • Après un rapide googleing, il semble que linux ne supporte pas les paramètres dans les liens
DarkTrick
la source