web-dev-qa-db-fra.com

Comment configurer pkexec?

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 procédez comme suit:

(Ouvrir 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 cela? Semblable à la façon dont Sudoname __/gksuse comporte quand on fait 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 de celui-ci à une commande (ou en incluant la première commande si configurable)?

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

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

31
Luis Alvarado

Comment configurer pkexec pour éviter les erreurs lors de l'exécution d'applications à interface graphique?

J'ai trouvé deux manières possibles:

  1. Comme vous pouvez le voir, utilisez les éléments suivants:

    pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gedit
    

    ne vous obtiendrez aucune erreur. Et ceci est normal car man pkexec est très clair à ce sujet:

           [...] 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 la manière la plus simple):

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

           [...] 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 règles dans /usr/share/polkit-1/actions nommé com.ubuntu.pkexec.gedit.policy avec le code xml suivant à l'intérieur duquel la chose la plus importante est de définir org.freedesktop.policykit.exec.allow_gui avec une 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 de celui-ci à une commande?

Pour ces trois balises de paramètres: allow_any, allow_inactive et allow_active à partir du fichier de stratégie, les options suivantes sont disponibles:

  • no : l'utilisateur n'est pas autorisé à exécuter l'action. Il n'y a donc pas besoin d'authentification.
  • yes : l'utilisateur est autorisé à exécuter l'action sans aucune authentification.
  • auth_self : l'authentification est requise mais l'utilisateur ne doit pas nécessairement être un administrateur.
  • auth_admin : L'authentification en tant qu'utilisateur administratif est requise.
  • auth_self_keep : identique à auth_self mais, comme Sudo, l'autorisation est valide. quelques minutes.
  • auth_admin_keep : identique à auth_admin mais, comme Sudo, l'autorisation est valide. quelques minutes.

Source: Polkit - Structure - Actions

Donc, si vous utilisez l'option auth_admin_keep (ou, selon le cas, auth_self_keep ), pkexec ne vous demandera plus de mot de passe pendant un certain temps (par défaut, cette heure est définie sur 5 minutes, comme je l’ai coché). L'inconvénient ici est que cette chose n'est applicable que pour un seul - le même - commande/application et valable pour tous les utilisateurs (sauf si elle est annulée lors d'une configuration ultérieure).

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

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 pouvoir utiliser l'action GParted). Les valeurs par défaut peuvent être remplacées, mais la modification des fichiers d’actions n’EST PAS la bonne manière. 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 d’entre eux le fassent) et /etc/polkit-1/rules.d sert à 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 entreprises par cet utilisateur ou ces utilisateurs. Par exemple, un fichier de règles peut remplacer l'exigence par défaut d'authentification de tous les utilisateurs en tant qu'administrateur lors de l'utilisation de GParted, en déterminant qu'un utilisateur spécifique n'en a pas besoin. Ou n'est pas autorisé à utiliser GParted du tout.

Source: Polkit - Structure

Existe-t-il une application graphique permettant de configurer l'utilisation de pkexec?

De ce que je sais, jusqu'à présent (18.01.2014) n'existait pas, quelque chose comme ça. Si, à l'avenir, je trouve quelque chose, je n'oublierai pas de mettre à jour cette réponse également.

38
Radu Rădeanu

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
  • Vous devriez maintenant avoir une commande gksudo entièrement fonctionnelle disponible sur votre système - de manière permanente.

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 les scripts
  • Créez un lien vers pkexec avec des paramètres (ln -s pkexec [...])
    • Après une rapide recherche sur Google, il semble que Linux ne supporte pas les paramètres dans les liens.
0
TheTrowser