Comment exécuter des applications GUI en tant que root en utilisant pkexec?

15

J'utilise Trisquel GNU / Linux-Libre fourni avec l' environnement de bureau Gnome3 Flashback .

Je sais que je peux exécuter l'application GUI en tant que root par sudo& gksudomais je veux savoir que comment exécuter les applications GUI en tant que root à l'aide de pkexec?

Lorsque j'essaie d'exécuter gedit(ou toute autre application comme:) d' nautilusici pkexec geditlà, il demande un mot de passe pour l'authentification: -

capture d'écran

Après avoir entré le mot de passe, il quitte avec erreur: -

$ pkexec gedit
error: XDG_RUNTIME_DIR not set in the environment.

(gedit:6135): Gtk-WARNING **: cannot open display:

Il semble donc que quelque chose ne va pas avec l'environnement d'affichage.

J'ai aussi essayé DISPLAY=:0 pkexec geditmais ça ne marche pas.


Les informations suivantes sont disponibles auprès de man pkexec: -

L'environnement que PROGRAM exécutera, sera défini sur un environnement minimal connu et sûr afin d'éviter d'injecter du code via LD_LIBRARY_PATH ou des mécanismes similaires. De plus, la variable d'environnement PKEXEC_UID est définie sur l'ID utilisateur du processus appelant pkexec. Par conséquent, pkexec ne vous permettra pas d'exécuter des applications X11 en tant qu'autre utilisateur car les variables d'environnement $ DISPLAY et $ XAUTHORITY ne sont pas définies. Ces deux variables seront conservées si l'annotation org.freedesktop.policykit.exec.allow_gui sur une action est définie sur une valeur non vide; ceci est cependant découragé et ne devrait être utilisé que pour les programmes existants.

Maintenant, je ne sais pas quoi faire pour y parvenir.

Ainsi, aidez-moi à découvrir comment exécuter des applications GUI en tant que root au moyen de pkexec. Ou est-ce possible ou non?


BTW, inspiré par la gparted-pkexeccommande qui fonctionne bien. Comment gpartedutiliser pkexec?

Pandya
la source
(Plus tard, trouvé) Connexes: Comment configurer pkexec?
Pandya
Consultez ce lien, cela a fonctionné pour moi.
TinyRickHole

Réponses:

11

Cela peut être fait en ajoutant des actions personnalisées à policykit. Si vous souhaitez exécuter gedit en tant que root avec pkexecvous devez créer un nouveau fichier /usr/share/polkit-1/actions/org.freedesktop.policykit.gedit.policypar exemple:

<?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="org.freedesktop.policykit.pkexec.gedit">
    <description>Run gedit program</description>
    <message>Authentication is required to run the gedit</message>
    <icon_name>accessories-text-editor</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>

Enfin pkexec geditdevrait fonctionner comme prévu.


Visitez la page de manuel ou le manuel de référence qui l'explique avec un EXEMPLE comme: -

$ man pkexec | grep -i ^Example -A 60
EXAMPLE
       To specify what kind of authorization is needed to execute the program /usr/bin/pk-example-frobnicate as
       another user, simply write an action definition file like this

           <?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>

             <vendor>Examples for the PolicyKit Project</vendor>
             <vendor_url>http://hal.freedesktop.org/docs/PolicyKit/</vendor_url>

             <action id="org.freedesktop.policykit.example.pkexec.run-frobnicate">
               <description>Run the PolicyKit example program Frobnicate</description>
               <description xml:lang="da">Kør PolicyKit eksemplet Frobnicate</description>
               <message>Authentication is required to run the PolicyKit example program Frobnicate (user=$(user), program=$(program), command_line=$(command_line))</message>
               <message xml:lang="da">Autorisering er påkrævet for at afvikle PolicyKit eksemplet Frobnicate (user=$(user), program=$(program), command_line=$(command_line))</message>
               <icon_name>audio-x-generic</icon_name>
               <defaults>
                 <allow_any>no</allow_any>
                 <allow_inactive>no</allow_inactive>
                 <allow_active>auth_self_keep</allow_active>
               </defaults>
               <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/pk-example-frobnicate</annotate>
             </action>

           </policyconfig>

       and drop it in the /usr/share/polkit-1/actions directory under a suitable name (e.g. matching the namespace of
       the action). Note that in addition to specifying the program, the authentication message, description, icon
       and defaults can be specified. Note that occurences of the strings $(user), $(program) and $(command_line) in
       the message will be replaced with respectively the user (of the form "Real Name (username)" or just "username"
       if there is no real name for the username), the binary to execute (a fully-qualified path, e.g.
       "/usr/bin/pk-example-frobnicate") and the command-line, e.g. "pk-example-frobnicate foo bar". For example, for
       the action defined above, the following authentication dialog will be shown:

           [IMAGE][2]

               +----------------------------------------------------------+
               |                     Authenticate                     [X] |
               +----------------------------------------------------------+
               |                                                          |
               |  [Icon]  Authentication is required to run the PolicyKit |
               |          example program Frobnicate                      |
               |                                                          |
               |          An application is attempting to perform an      |
               |          action that requires privileges. Authentication |
               |          is required to perform this action.             |
               |                                                          |
               |          Password: [__________________________________]  |
               |                                                          |
               | [V] Details:                                             |
               |  Command: /usr/bin/pk-example-frobnicate                 |
               |  Run As:  Super User (root)                              |
               |  Action:  org.fd.pk.example.pkexec.run-frobnicate        |
               |  Vendor:  Examples for the PolicyKit Project             |
               |                                                          |
               |                                  [Cancel] [Authenticate] |
               +----------------------------------------------------------+
taliezin
la source
Oui, je l'ai enfin trouvé dans manpage ( man pkexec) aussi!
Pandya
Pouvez-vous m'aider sur unix.stackexchange.com/q/204638/66803 ?
Pandya
@Pandya, la vraie erreur est "Refuser de rendre le service aux parents décédés", il y a quelques rapports de bogue quand je l'ai recherché sur Google. Pour contourner ce problème, vous pouvez créer un fichier exécutable dans / usr / local / bin qui contient quelque chose comme: #! / bin / sh "pkexec" "nautilus" et exécutez-le avec F7. Je pense que cela devrait fonctionner.
taliezin
D'ACCORD. J'ai essayé en faisant un exécutable qui fonctionne bien avec F7.
Pandya
2
Je suis vraiment déçu qu'un tel outil m'oblige à configurer quelque chose en dehors de / etc et pire encore sous / usr / share au lieu de / usr / local / share.
niels