Quando usare pkexec vs. gksu / gksudo?


77

Esistono due modi generali per eseguire graficamente le applicazioni come root (o, più in generale, come un altro utente). Programmi come gksu, gksudoe kdesudosono frontend grafici per sudo. Al contrario, pkexecè un frontend grafico per PolicyKit .

Quando si eseguono manualmente programmi come root (o come un altro utente non root), quali sono i vantaggi / gli svantaggi (se presenti) dell'utilizzo pkexec, rispetto al metodo più tradizionale di utilizzare un sudofrontend?




Correlati (ma non un duplicato): sudo -i è meno sicuro di pkexec?
Eliah Kagan,

Risposte:


25

PolicyKit è più configurabile, sebbene pkexecnon faccia uso di questa configurabilità. Inoltre, pkexecmostra all'utente l'intero percorso del programma che verrà avviato, in modo che l'utente sia un po 'più sicuro di ciò che accadrà. Le cosiddette "politiche" di PolicyKit possono essere utilizzate per impostare più impostazioni di avanzamento. Ad esempio, se la password deve essere ricordata.

Qualcosa che ho preso dal pkexecmanuale:

L'ambiente in cui PROGRAM lo eseguirà verrà impostato su un ambiente minimo noto e sicuro per evitare l'iniezione di codice tramite LD_LIBRARY_PATH o meccanismi simili. Inoltre, la variabile di ambiente PKEXEC_UID è impostata sull'ID utente del processo che richiama pkexec. Di conseguenza, pkexec non consente di eseguire ad es. Applicazioni X11 come un altro utente poiché la variabile di ambiente $ DISPLAY non è impostata.

Maggiori informazioni su politiche o definizioni di azioni dal pkexecmanuale:

   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</message>
           <message xml:lang="da">Autorisering er påkrævet for at afvikle PolicyKit eksemplet Frobnicate</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. 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] |
           +----------------------------------------------------------+

   If the user is using the da_DK locale, the dialog looks like this:

       [IMAGE][3]

           +----------------------------------------------------------+
           |                     Autorisering                     [X] |
           +----------------------------------------------------------+
           |                                                          |
           |  [Icon]  Autorisering er påkrævet for at afvikle         |
           |          PolicyKit eksemplet Frobnicate                  |
           |                                                          |
           |          Et program forsøger at udføre en handling der   |
           |          kræver privilegier. Autorisering er påkrævet.   |
           |                                                          |
           |          Kodeord: [___________________________________]  |
           |                                                          |
           | [V] Detaljer:                                            |
           |  Bruger:   Super User (root)                             |
           |  Program:  /usr/bin/pk-example-frobnicate                |
           |  Handling: org.fd.pk.example.pkexec.run-frobnicate       |
           |  Vendor:   Examples for the PolicyKit Project            |
           |                                                          |
           |                                [Annullér] [Autorisering] |
           +----------------------------------------------------------+

   Note that pkexec does no validation of the ARGUMENTS passed to PROGRAM.
   In the normal case (where administrator authentication is required
   every time pkexec is used), this is not a problem since if the user is
   an administrator he might as well just run pkexec bash to get root.

   However, if an action is used for which the user can retain
   authorization (or if the user is implicitly authorized), such as with
   pk-example-frobnicate above, this could be a security hole. Therefore,
   as a rule of thumb, programs for which the default required
   authorization is changed, should never implicitly trust user input
   (e.g. like any other well-written suid program).

1
Immagino che avrei dovuto dire che ci sono due per eseguire applicazioni come root con autenticazione grafica . Avevo supposto che ci fosse un modo di usare pkexecper eseguire applicazioni grafiche (non l'avevo mai fatto ...). La tua risposta spiega perché non esiste (o almeno perché è necessario specificare un ambiente personalizzato, per farlo).
Eliah Kagan,

1
Ho una domanda sulla tua risposta, però: quando un programma viene eseguito come root pkexec, in che senso le sue capacità ("autorizzazioni") possono essere vincolate? Concedo a un programma la possibilità di fare qualsiasi cosa quando lo eseguo sudoo con un sudofrontend ... in che senso eseguire un programma come root pkexecsenza farlo?
Eliah Kagan,

3
Comprendo che PolicyKit viene utilizzato per consentire ai programmi di eseguire solo tipi specifici di azioni. Ma ciò pkexecfacilita o fa pkexecsemplicemente funzionare le cose come root con abilità illimitate? L' pkexecestratto manuale che hai incluso nei tuoi documenti di risposta spiega come scrivere regole per determinare chi può eseguire un programma come root (o come un altro utente non root), piuttosto che cosa può fare il programma.
Eliah Kagan,

4
Voglio accettare la tua risposta, poiché fornisce molte buone informazioni. Ma ritengo che sia molto fuorviante, perché dice che pkexecè più configurabile di sudo, e data la discussione che abbiamo avuto qui nei commenti, non sembra essere il caso. Considereresti di modificare la tua risposta per spiegare sudola configurabilità e confrontarla / contrastarla con quella pkexec, o modificare la tua risposta per dire che la differenza è qualcosa di diverso dalla configurabilità?
Eliah Kagan,

2
"semplicemente scrivi" e poi un pezzo di XML. Avevo bisogno di quella risata.
Jürgen A. Erhard,

14

Con sudo è possibile impostare i criteri per utente e per programma su wether per conservare o ripristinare l'ambiente dei chiamanti nel contesto di sudo. La politica env_reset è impostata per impostazione predefinita.

Non è possibile eseguire applicazioni grafiche tramite pkexec senza configurarlo esplicitamente per farlo. Poiché questo è semplicemente il risultato del ripristino dell'ambiente, questo è ovviamente vero anche per sudo. Si noti tuttavia che né pkexec né sudo possono impedire a un'applicazione malevola in esecuzione come root di recuperare tutte le informazioni necessarie dai display manager o dal file X11-cookie degli utenti. Quest'ultimo, sia o simile, può anche essere fatto da applicazioni non root a seconda delle circostanze.

Sudo non richiede elenchi espliciti di utenti. È possibile elencare qualsiasi gruppo di utenti o anche impostare un'autorizzazione per tutti gli utenti in generale. La direttiva target_pw consente a quegli utenti di autenticarsi con le credenziali dell'utente nel contesto in cui desiderano eseguire un'applicazione, ad esempio root. A parte questo, il altrettanto tradizionale programma su (su / gtksu / kdesu) può essere usato per fare lo stesso senza una configurazione speciale.

anche sudo consente all'utente di rimanere autenticato per un periodo di tempo specificato. L'opzione è denominata timeout, configurabile a livello globale, per utente o per applicazione. L'autenticazione può essere mantenuta per tty o globalmente per utente.

Mentre pkexec potrebbe non eseguire la convalida degli ARGUMENTI passati a PROGRAM, sudo ha effettivamente questa funzione. Ammesso però, puoi facilmente sbagliare con questo, e normalmente non è fatto.

Puoi modificare un po 'come vuoi che i programmi vengano eseguiti tramite pkexec: icona, testo da visualizzare, puoi persino avere cose di localizzazione e tutto il resto. A seconda delle circostanze, ciò può essere davvero intelligente. Purtroppo però, qualcuno ha sentito il bisogno di reinventare la ruota per questa funzione. Questo sarebbe probabilmente qualcosa da mettere nei wrapper grafici gtksudo / kdesu.

Policykit è quindi solo un framework di configurazione centralizzato. Purtroppo non è carino. I file XML di PK sono molto più complicati di qualsiasi cosa un'app possa fornire nativamente a corto di file binari. E nessuno sarebbe così sciocco da usare il binario ... oh gconf ... non importa.


8
Ho annullato il voto perché questo post non è in realtà una risposta, è una critica a un'altra risposta. Se ritieni che di solito sia una scelta migliore usare sudo su pkexec, dillo, spiegando il tuo punto con queste confutazioni.
Flimm,

4
Grazie Paul, per molte utili analisi qui! Ma sono anche d'accordo con Flimm. Puoi iniziare con una semplice risposta alla domanda come posta?
nealmcb,

1
No, è pkexec possibile eseguire la GUI senza configurare: askubuntu.com/a/332847/89385
akostadinov

8

Alcune cose in che cosa pkexecè diverso sudoe dai suoi frontend:

  1. Non è possibile eseguire applicazioni grafiche pkexecsenza configurarlo esplicitamente per farlo.
  2. Puoi modificare un po 'come vuoi che i programmi vengano eseguiti tramite pkexec: icona, testo da visualizzare, se ricordare la password o meno, se permetterne l'esecuzione grafica e altro ancora.
  3. Chiunque può eseguire "Esegui come" un superutente (a condizione che possano eseguire l'autenticazione in quanto tale), sudopertanto è necessario essere elencati nel sudoersfile come admin .
  4. gksudoblocca la tastiera, il mouse e lo stato attivo quando si richiede una password, pkexecno. In entrambi i casi i tasti sono comunque sniffabili .
  5. Con pkexecte lavori in un ambiente leggermente più igienizzato.

Prova ad esempio:

cd /etc/init.d
sudo cat README
# and now the same with pkexec
pkexec cat README
# nice, huh?

Buon punto (# 3) su come è possibile autenticarsi come altri utenti di eseguire programmi come rootcon pkexec. È configurabile, che gli utenti possono utilizzare pkexec(anche se conoscono la password di un altro utente a cui è consentito farlo)? suè configurabile in questo modo. Quando provo suad un altro non rootutente come guestsu un sistema Oneiric, mi dice che non mi è permesso farlo. (Al contrario, quando provo a usare pkexeccome guestsu Oneiric o Precise, ottengo quello che sembra un errore di asserzione, che potrei presto segnalare come un bug, poiché non dovrei ottenerlo anche se non è permesso.)
Eliah Kagan,

2
Ma i sudosuoi frontend possono anche essere modificati come descritto al punto 2. Puoi eseguire un programma con gksuo gksudo visualizzare testo personalizzato , smettere di aver bisogno delle password di alcuni utenti modificando /etc/sudoers(con visudo) e cambiare per quanto tempo vengono ricordati nel senso di cambiare come quanto tempo impiega il timeout di sudo (anche se non sono sicuro di come farlo su Ubuntu, che è configurato in modo tale che le domande sull'opportunità o meno di sudouna password, e quanto tempo prima che ne abbia bisogno, siano specifiche del terminale ).
Eliah Kagan,

# 4 non è vero se stai usando GNOME Shell.
muru,

No, è pkexec possibile eseguire la GUI senza configurare: askubuntu.com/a/332847/89385
akostadinov
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.