Kiedy używać pkexec vs. gksu / gksudo?

77

Istnieją dwa ogólne sposoby graficznego uruchamiania aplikacji jako root (lub, bardziej ogólnie, jako inny użytkownik). Programy takie jak gksu, gksudoi kdesudosą graficzne nakładki na sudo. Natomiast pkexecjest graficznym frontendem dla PolicyKit .

Kiedy ręcznie uruchamiasz programy jako root (lub jako inny użytkownik inny niż root), jakie są zalety / wady (jeśli w ogóle) używania pkexec, w porównaniu z bardziej tradycyjną metodą korzystania z sudointerfejsu użytkownika?

Eliah Kagan
źródło
Powiązane: askubuntu.com/questions/252962/…
Ślimak mechaniczny
Powiązane (ale nie duplikaty): Czy sudo -i jest mniej bezpieczne niż pkexec?
Eliah Kagan

Odpowiedzi:

25

PolicyKit jest bardziej konfigurowalny, ale pkexecnie korzysta z tej możliwości konfiguracji. Ponadto, pkexecpokazać użytkownikowi pełną ścieżkę do programu, który jest uruchamiany, na które użytkownik jest nieco bardziej pewny tego, co się wydarzy. Tak zwane „zasady” PolicyKit mogą być użyte do ustawienia większej liczby zaawansowanych ustawień. Na przykład, czy hasło powinno zostać zapamiętane.

Coś, co dostałem z pkexecinstrukcji:

Środowisko, w którym PROGRAM je uruchomi, zostanie ustawione na minimalne znane i bezpieczne środowisko, aby uniknąć wstrzykiwania kodu przez LD_LIBRARY_PATH lub podobne mechanizmy. Ponadto zmienna środowiskowa PKEXEC_UID jest ustawiona na identyfikator użytkownika procesu wywołującego pkexec. W rezultacie pkexec nie pozwoli na uruchamianie np. Aplikacji X11 jako inny użytkownik, ponieważ zmienna środowiskowa $ DISPLAY nie jest ustawiona.

Więcej informacji na temat definicji polityk lub akcji z pkexecpodręcznika:

   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).
RobinJ
źródło
1
Chyba powinienem powiedzieć, że są dwa aplikacje do uruchamiania jako root z graficznym uwierzytelnieniem . Zakładałem, że istnieje sposób na pkexecuruchomienie aplikacji graficznych (po prostu nigdy tego nie zrobiłem ...). Twoja odpowiedź wyjaśnia, dlaczego nie ma (a przynajmniej dlaczego należy określić niestandardowe środowisko, aby to zrobić).
Eliah Kagan,
1
Mam jednak jedno pytanie dotyczące twojej odpowiedzi - kiedy program jest uruchamiany jako root pkexec, w jakim sensie można ograniczyć jego możliwości („uprawnienia”)? Przyznaję program zdolność do niczego gdy uruchamiam go sudolub sudonakładka ... w jakim sensie uruchomiony program jako root z pkexecnie również to zrobić?
Eliah Kagan, 12.11.11
3
Rozumiem, że PolicyKit jest używany, aby umożliwić programom wykonywanie tylko określonych rodzajów działań. Ale czy to pkexecułatwia, czy pkexecpo prostu uruchamia rzeczy jako root z nieograniczonymi zdolnościami? pkexecInstrukcja fragment ty zawarte w dokumentach Odpowiedź Jak napisać zasady określają, kto może uruchomić program jako administrator (lub jako inny użytkownik, nie root), a nie to, co program może zrobić.
Eliah Kagan,
4
Chcę zaakceptować twoją odpowiedź, ponieważ zawiera wiele dobrych informacji. Ale czuję, że jest to bardzo mylące, ponieważ mówi, że pkexecjest to bardziej konfigurowalne niż sudo, a biorąc pod uwagę dyskusję, którą mieliśmy tutaj w komentarzach, wydaje się, że tak nie jest. Czy zastanowiłbyś się nad edycją swojej odpowiedzi, aby wyjaśnić sudokonfigurowalność i porównać / porównać z nią pkexec, czy zredagować swoją odpowiedź, aby powiedzieć, że różnica jest czymś innym niż konfigurowalność?
Eliah Kagan
2
„po prostu napisz”, a następnie fragment XML. Potrzebowałem tego śmiechu.
Jürgen A. Erhard
14

Dzięki sudo możesz ustawić zasady dotyczące użytkownika i programu, aby zachować lub zresetować środowisko dzwoniącego w kontekście sudo. Polityka env_reset jest ustawiona domyślnie.

Nie można uruchamiać aplikacji graficznych za pomocą pkexec bez wyraźnej konfiguracji. Ponieważ jest to jedynie wynik resetu środowiska, jest to oczywiście prawdą również w przypadku sudo. Należy jednak pamiętać, że ani pkexec, ani sudo nie mogą uniemożliwić złośliwej aplikacji działającej jako root w celu pobrania wszystkich niezbędnych informacji od menedżerów wyświetlania lub pliku cookie X11 użytkowników. To ostatnie, oba lub podobne, może być nawet wykonane przez aplikacje użytkownika innego niż root, w zależności od okoliczności.

Sudo nie wymaga wyraźnych list użytkowników. Można sporządzić listę dowolnej grupy użytkowników, a nawet ustawić uprawnienia dla wszystkich użytkowników w ogóle. Dyrektywa target_pw pozwala tym użytkownikom uwierzytelniać się przy użyciu poświadczeń użytkownika w kontekście, w którym chcą uruchomić aplikację, tj. Root. Poza tym równie tradycyjny program su (su / gtksu / kdesu) może być używany do tego samego bez specjalnej konfiguracji.

sudo również pozwala użytkownikowi pozostać uwierzytelnionym przez określony czas. Opcja nazywa się limitem czasu, można ją konfigurować globalnie, dla użytkownika lub aplikacji. Uwierzytelnianie można zachować dla każdego tty lub globalnie dla użytkownika.

Chociaż pkexec może nie sprawdzać ARGUMENTÓW przekazanych do PROGRAMU, sudo rzeczywiście ma tę funkcję. Przyznaję, że możesz łatwo to zepsuć i zwykle nie jest to robione.

Możesz trochę ulepszyć sposób, w jaki chcesz uruchamiać programy za pomocą pkexec: ikona, tekst do wyświetlenia, możesz nawet mieć rzeczy związane z lokalizacją i tak dalej. W zależności od okoliczności może to być naprawdę fajne. Smutne jednak, że ktoś poczuł potrzebę ponownego opracowania koła dla tej funkcji. Prawdopodobnie byłoby to coś, co można umieścić w graficznych opakowaniach gtksudo / kdesu.

Policykit to wtedy tylko scentralizowana struktura konfiguracji. Niestety niezbyt ładna. Pliki XML PKs są znacznie bardziej skomplikowane niż cokolwiek, co aplikacja może zapewnić natywnie plików binarnych. I nikt nie byłby tak zwariowany, aby używać binarnych ... och gconf ... nieważne.

Paul Hänsch
źródło
8
Odrzuciłem głos, ponieważ ten post nie jest tak naprawdę odpowiedzią, jest krytyką innej odpowiedzi. Jeśli uważasz, że zwykle lepiej jest używać sudo zamiast pkexec, powiedz tak, wyjaśniając swój punkt widzenia tymi obaleniami.
Flimm
4
Dzięki Paul, za wiele przydatnych analiz tutaj! Ale zgadzam się również z Flimmem. Czy możesz zacząć od prostej odpowiedzi na zadane pytanie?
nealmcb 24.04.13
1
Nie, pkexec można uruchomić GUI bez konfiguracji: askubuntu.com/a/332847/89385
akostadinov
8

Kilka rzeczy, czym pkexecsię różni sudoi jej nakładki:

  1. Nie można uruchamiać aplikacji graficznych pkexecbez jawnej konfiguracji.
  2. Możesz nieco ulepszyć sposób, w jaki chcesz uruchamiać programy pkexec: ikona, tekst do wyświetlenia, czy pamiętasz hasło, czy nie, czy chcesz, aby działało graficznie i trochę więcej.
  3. Każdy może uruchomić „Uruchom jako” superużytkownik (pod warunkiem, że może się jako taki uwierzytelnić), z tym sudoże musisz być wymieniony w sudoerspliku jako administrator .
  4. gksudoblokuje klawiaturę, mysz i ostrość, gdy pyta o hasło, pkexecnie robi. W obu przypadkach naciśnięcia klawiszy są jednak wyczuwalne .
  5. Dzięki pkexecpracy w nieco bardziej oczyszczone środowiska.

Spróbuj na przykład:

cd /etc/init.d
sudo cat README
# and now the same with pkexec
pkexec cat README
# nice, huh?
zorganizować
źródło
Dobra uwaga (# 3) na temat tego, w jaki sposób możesz uwierzytelniać się jako inni użytkownicy, aby uruchamiać programy tak jak w rootprzypadku pkexec. Czy można go skonfigurować, z którego użytkownicy mogą pkexecw ogóle korzystać (nawet jeśli znają hasło innego użytkownika, który może to zrobić)? sujest konfigurowalny w ten sposób. Kiedy próbuję nawiązać połączenie suz innym rootużytkownikiem niebędącym użytkownikiem, jak guestw systemie Oneiric, mówi mi, że nie mogę tego robić. (W przeciwieństwie do tego, gdy próbuję używać pkexectak jak guestw Oneiric lub Precise, dostaję coś, co wygląda jak błąd asercji, który wkrótce mogę zgłosić jako błąd, ponieważ nie powinienem tego otrzymywać, nawet jeśli nie jest to dozwolone.)
Eliah Kagan
2
Ale sudojego nakładki można również dostosować, jak opisano w punkcie 2. Możesz uruchomić program z gksulub gksudo wyświetlać dostosowany tekst , przestać potrzebować haseł niektórych użytkowników, edytując /etc/sudoers(z visudo), i zmienić czas ich zapamiętywania w sensie zmiany sposobu długo trwa przekroczenie limitu czasu przez sudo (choć nie jestem pewien, jak to zrobić w Ubuntu, który jest skonfigurowany tak, aby pytania o to, czy sudopotrzebuje hasła, i jak długo trzeba będzie je ponownie, były specyficzne dla terminala ).
Eliah Kagan
# 4 nie jest prawdą, jeśli używasz GNOME Shell.
muru
Nie, pkexec można uruchomić GUI bez konfiguracji: askubuntu.com/a/332847/89385
akostadinov