Vraag Wanneer gebruik ik pkexec vs. gksu / gksudo?


Er zijn twee algemene manieren om applicaties grafisch uit te voeren als root (of, meer algemeen, als een andere gebruiker). Programma's zoals gksu, gksudo, en kdesudo zijn grafische frontends voor sudo. In tegenstelling tot, pkexec is een grafische frontend voor PolicyKit.

Wanneer handmatig draaiende programma's als root (of als een andere, niet-root gebruiker), wat zijn de voordelen / nadelen (indien aanwezig) van het gebruik pkexec, vergeleken met de meer traditionele methode van het gebruik van a sudo voorkant?


73
2017-11-11 20:44


oorsprong


Zie ook Waarom is gksu niet langer standaard geïnstalleerd? (in 13.04 Raring) - nealmcb
Verwant: askubuntu.com/questions/252962/... - Mechanical snail
Gerelateerd (maar geen duplicaat): Is sudo -i minder veilig dan pkexec? - Eliah Kagan


antwoorden:


PolicyKit is echter meer configureerbaar pkexec maakt geen gebruik van deze configureerbaarheid. Ook, pkexec toon de gebruiker het volledige pad van het programma dat zal worden gestart, zodat de gebruiker iets meer zeker weet wat er zal gebeuren. Het zogenaamde 'beleid' van PolicyKit kan worden gebruikt om meer geavanceerde instellingen in te stellen. Bijvoorbeeld of het wachtwoord moet worden onthouden.

Iets dat ik kreeg van de pkexec met de hand:

De omgeving die PROGRAM zal gebruiken, zal minimaal zijn   bekende en veilige omgeving om te voorkomen dat code wordt geïnjecteerd   LD_LIBRARY_PATH of vergelijkbare mechanismen. Daarnaast de PKEXEC_UID   omgevingsvariabele wordt ingesteld op de gebruikers-ID van het proces dat wordt opgeroepen   pkexec. Als gevolg hiervan staat pkexec je niet toe om b.v. X11   applicaties als een andere gebruiker sinds de $ DISPLAY omgevingsvariabele   is niet ingesteld.

Meer informatie over beleid of actiedefinities van de pkexec met de hand:

   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).

25
2017-11-12 15:35



Ik denk dat ik had moeten zeggen er zijn er twee om applicaties uit te voeren als root met grafische authenticatie. Ik had aangenomen dat er een manier was om te gebruiken pkexec om grafische applicaties te draaien (ik had dit nog nooit gedaan ...). Uw antwoord legt uit waarom er niet is (of op zijn minst waarom een ​​aangepaste omgeving moet worden gespecificeerd, om het te doen). - Eliah Kagan
Ik heb echter één vraag over uw antwoord - wanneer een programma als root wordt uitgevoerd pkexec, in welke zin kan het vermogen ("permissies") worden beperkt? Ik verleen een programma de mogelijkheid om alles te doen wanneer ik het uitvoer sudo of a sudo frontend ... in welke zin werkt een programma draaien als root pkexec dit ook niet doen? - Eliah Kagan
ik begrijp dat PolicyKit wordt gebruikt om programma's toe te staan ​​om alleen specifieke soorten acties uit te voeren. Maar doet pkexec faciliteren of doen pkexec gewoon dingen als root uitvoeren met onbeperkte mogelijkheden? De pkexec uittreksel van de handleiding dat u in uw antwoorddocumenten hebt opgenomen hoe regels moeten worden geschreven om te bepalen wie een programma als root (of als een andere, niet-rootgebruiker) kan uitvoeren, in plaats van wat het programma kan doen. - Eliah Kagan
Ik wil uw antwoord accepteren, want het biedt veel goede informatie. Maar ik vind dat het erg misleidend is, omdat het dat zegt pkexec is meer configureerbaar dan sudoen gezien de discussie die we hier in de commentaren hebben gehad, lijkt dat niet het geval te zijn. Zou je overwegen om je antwoord te bewerken om expliciet te maken? sudoconfigureerbaarheid en vergelijk / contrasteer het met pkexecis, of je antwoord bewerken om te zeggen dat het verschil iets anders is dan configureerbaarheid? - Eliah Kagan
"gewoon schrijven" en vervolgens een stuk XML. Ik had die lach nodig. - Jürgen A. Erhard


Met sudo kunt u per gebruikers- en per programmabeleid bepalen of de bellersomgeving moet worden behouden of opnieuw moet worden ingesteld in de context van sudo. Het env_resetsbeleid is standaard ingesteld.

U kunt geen grafische applicaties uitvoeren via pkexec zonder het expliciet te configureren om dit te doen. Omdat dit slechts een resultaat is van de reset van de omgeving, is dit vanzelfsprekend ook waar voor sudo. Merk echter op dat noch pkexec noch sudo kan voorkomen dat een kwaadwillende toepassing als root wordt uitgevoerd om alle benodigde informatie van de display-managers of het X11-cookiebestand van de gebruiker op te halen. De laatste, zowel of vergelijkbaar, kan zelfs worden gedaan door niet-roottoepassingen afhankelijk van de omstandigheden.

Sudo vereist geen expliciete lijst met gebruikers. Het toevoegen van een gebruikersgroep of zelfs het instellen van een toestemming voor alle gebruikers in het algemeen kan worden gedaan. De target_pw-richtlijn staat die gebruikers toe om te authenticeren met de inloggegevens van de gebruiker in de context waarin zij een applicatie willen uitvoeren, d.w.z. root. Afgezien daarvan kan het even traditionele su (su / gtksu / kdesu) -programma worden gebruikt om hetzelfde te doen zonder speciale configuratie.

Met sudo kan de gebruiker ook voor een bepaalde tijd worden geverifieerd. De optie heeft de naam time-out, kan wereldwijd worden geconfigureerd, per gebruiker of per toepassing. Verificatie kan per tty of globaal per gebruiker worden bewaard.

Hoewel pkexec de ARGUMENTEN die zijn goedgekeurd voor PROGRAMMA niet valideert, heeft sudo inderdaad deze functie. Toegegeven, je kunt dit gemakkelijk verpesten, en het is normaal gesproken niet gedaan.

Je kunt een beetje aanpassen aan de manier waarop je wilt dat programma's worden uitgevoerd via pkexec: pictogram, tekst om weer te geven, je kunt zelfs lokalisatie gebruiken en zo. Afhankelijk van de omstandigheden kan dit inderdaad handig zijn. Triest dat iemand de behoefte voelde om het wiel opnieuw uit te vinden voor deze functie. Dit zou waarschijnlijk iets zijn om in de grafische gtksudo / kdesu-wrappers te plaatsen.

Policykit is dan alleen een gecentraliseerd configuratiekader. Helaas geen mooie. PK's XML-bestanden zijn veel ingewikkelder dan alles wat een app kan bieden met een tekort aan binaire bestanden. En niemand zou zo gek zijn om binair te gebruiken ... oh gconf ... laat maar.


14
2017-10-26 12:47



Ik heb een lage score omdat dit bericht niet echt een antwoord is, het is een kritiek op een ander antwoord. Als je denkt dat het meestal een betere keuze is om sudo over pkexec te gebruiken, zeg dat dan, en leg je uit wat je punt is met deze weerwoorden. - Flimm
Bedankt Paul, voor veel nuttige analyse hier! Maar ik ben het ook eens met Flimm. Kun je beginnen met een eenvoudig antwoord op de vraag zoals gevraagd? - nealmcb
Nee, pkexec  kan voer GUI uit zonder te configureren: askubuntu.com/a/332847/89385 - akostadinov


Een paar dingen hoe pkexec is anders dan sudo en zijn frontends:

  1. U kunt geen grafische toepassingen uitvoeren via pkexec zonder het expliciet te configureren om dit te doen.
  2. Je kunt een beetje aanpassen aan de manier waarop je wilt dat programma's worden uitgevoerd pkexec: pictogram, tekst die moet worden weergegeven, of het wachtwoord moet worden onthouden of niet, of het grafisch moet worden uitgevoerd en nog meer.
  3. Iedereen kan "Uitvoeren als" een supergebruiker uitvoeren (mits deze als zodanig kan worden geverifieerd), met sudo je moet worden vermeld in de sudoers bestand als beheerder.
  4. gksudo vergrendelt het toetsenbord, de muis en de focus bij het vragen om een ​​wachtwoord, pkexec niet. In beide gevallen de toetsaanslagen zijn echter wel snuifbaar.
  5. Met pkexec je werkt in een iets meer opgeschoonde omgeving.

Probeer bijvoorbeeld:

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

8
2017-11-15 22:59



Goed punt (# 3) over hoe je kunt verifiëren dat andere gebruikers programma's uitvoeren zoals root met pkexec. Is het configureerbaar, welke gebruikers kunnen gebruiken pkexec überhaupt (zelfs als ze het wachtwoord kennen van een andere gebruiker die dit is toegestaan)? su is op deze manier configureerbaar. Wanneer ik probeer su naar een andere niet-root gebruiker als guest op een Oneiric-systeem vertelt het me dat ik dit niet mag doen. (Wanneer ik daarentegen probeer te gebruiken pkexec als guest op Oneiric of Precise krijg ik wat lijkt op een assertiefout, die ik binnenkort als een bug kan melden, want dat zou ik niet moeten krijgen, ook al is het niet toegestaan.) - Eliah Kagan
Maar sudo en de frontends kunnen ook worden aangepast zoals beschreven in punt 2. U kunt een programma uitvoeren met gksu of gksudo  het weergeven van aangepaste tekst, stop met het vereisen van de wachtwoorden van sommige gebruikers door ze te bewerken /etc/sudoers (met visudo), en hoe lang ze worden herinnerd in de zin van hoe lang het duurt voordat sudo time-out optreedt (hoewel ik niet zeker weet hoe dit moet worden gedaan op Ubuntu, dat zo is geconfigureerd dat de vragen over het al dan niet sudo heeft een wachtwoord nodig, en hoelang tot het weer nodig is, zijn terminal-specifiek). - Eliah Kagan
# 4 is niet waar als je GNOME Shell gebruikt. - muru
Nee, pkexec  kan voer GUI uit zonder te configureren: askubuntu.com/a/332847/89385 - akostadinov