Коли використовувати pkexec проти gksu / gksudo?


77

Існує два загальних способи графічного запуску програм як root (або, загалом, як іншого користувача). Такі програми, як gksu, gksudoі kdesudoє графічними фронтами для sudo. На відміну від цього, pkexecце графічний інтерфейс для PolicyKit .

Якщо вручну запускаються програми як root (або як інший, некористувальний користувач), які переваги / недоліки (якщо такі є) у використанні pkexec, порівняно з більш традиційним методом використання sudoінтерфейсу?




Пов’язані (але не дублікат): чи sudo -i менш безпечний, ніж pkexec?
Eliah Kagan

Відповіді:


25

PolicyKit є більш налаштованим, хоча pkexecне використовує цю конфігурацію. Також pkexecпокажіть користувачеві повний шлях програми, яка буде запущена, щоб користувач був трохи впевненіший у тому, що станеться. Так звані "політики" PolicyKit можна використовувати для встановлення додаткових налаштувань прогресу. Наприклад, чи слід пам’ятати пароль.

Щось я отримав із pkexecпосібника:

Навколишнє середовище, в якому його запустить PROGRAM, буде встановлено на мінімально відоме та безпечне середовище, щоб уникнути введення коду через LD_LIBRARY_PATH або подібні механізми. Крім того, змінна середовища PKEXEC_UID встановлюється ідентифікатором користувача процесу, що викликає pkexec. Як результат, pkexec не дозволить запускати, наприклад, програми X11 як інший користувач, оскільки змінна середовища $ DISPLAY не встановлена.

Більше інформації про політику чи визначення дій у pkexecпосібнику:

   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
Я думаю, я мав би сказати, що для запуску додатків як root із двома графічними аутентифікацією я мав би сказати . Я припускав, що існує спосіб використання pkexecграфічних програм (я ніколи цього не робив ...). Ваша відповідь пояснює, чому цього немає (або принаймні, чому для цього потрібно вказати спеціальне середовище).
Елія Каган

1
У мене є одне питання щодо вашої відповіді - коли програма запускається як root pkexec, в якому сенсі її можливості ("дозволи") можуть бути обмежені? Я допускаю програму здатність робити що - небудь , коли я запускаю його sudoабо sudoзовнішній інтерфейс ... в якому сенсі працює програма як корінь з pkexecтакож не робити цього?
Елія Каган

3
Я розумію, що PolicyKit використовується для того, щоб програми могли виконувати лише певні типи дій. Але чи pkexecсприяє це чи pkexecпросто запускає речі як корінь з необмеженими здібностями? pkexecКерівництво Уривок ви включили в свою відповідь документи , як писати правила для визначення , які можуть запускати програму з правами адміністратора (або як інший, не суперкористувача), а не те , що програма може зробити.
Елія Каган

4
Я хочу прийняти вашу відповідь, оскільки вона дає багато хорошої інформації. Але я вважаю, що це дуже вводить в оману, тому що це говорить, що pkexecце більше налаштовується, ніж sudo, і враховуючи обговорення, які ми мали тут у коментарях, це, мабуть, не так. Чи могли б ви відредагувати свою відповідь або sudoна конфігурацію експлікації , і порівняти / порівняти її pkexecз, або відредагувати свою відповідь, щоб сказати, що різниця - це щось інше, ніж налаштування?
Елія Каган

2
"просто написати", а потім фрагмент XML. Мені потрібен був той сміх.
Юрген А. Ерхард

14

За допомогою sudo ви можете встановити для кожного користувача та програмну політику про те, щоб зберегти або скинути середовище виклику в контексті sudo. Політика env_reset встановлена ​​за замовчуванням.

Ви не можете запускати графічні програми через pkexec, не чітко налаштовуючи це для цього. Оскільки це лише результат перезавантаження середовища, це, очевидно, справедливо і для судо. Однак зауважте, що ні pkexec, ні sudo не можуть запобігти запущенню зловмисного додатка як root для отримання всієї необхідної інформації у менеджерів дисплеїв або файлів cookie X11 користувачів. Останнє, як або подібне, може бути зроблено навіть некореневими програмами залежно від обставин.

Судо не вимагає явних списків користувачів. Перерахування будь-якої групи користувачів або навіть встановлення дозволу для всіх користувачів в цілому можна зробити. Директива target_pw дозволяє цим користувачам пройти автентифікацію за допомогою облікових даних користувача в тому, у якому контексті вони хочуть запустити додаток, тобто root. Крім того, не менш традиційну програму su (su / gtksu / kdesu) можна використовувати для того ж, щоб не робити спеціальної конфігурації.

sudo теж дозволяє користувачеві залишатися автентифікованим протягом певного часу. Параметр називається таймаутом, який можна налаштувати в усьому світі, на кожного користувача або на додаток. Аутентифікацію можна зберігати на кожну тисячу або глобально на кожного користувача.

Хоча pkexec не може перевірити аргументи, передані ПРОГРАМІ, sudo дійсно має цю особливість. Однак, зізнавшись, ви легко можете зіпсувати це, і зазвичай це не робиться.

Ви можете трохи налаштувати, як ви хочете, щоб програми запускалися через pkexec: значок, текст для відображення, ви навіть можете мати інформацію про локалізацію та все таке. Залежно від обставин це справді може бути чудовим. Сумно, що хтось відчув необхідність винаходити колесо для цієї функції. Це, мабуть, було б щось помістити в графічні обгортки gtksudo / kdesu.

Тоді Policykit - це лише централізована структура конфігурації. На жаль, не дуже. Файли XML-файлів ПК набагато складніші, ніж усе, що додаток може надати дефіцит бінарних файлів. І ніхто не буде такою самотньою використовувати бінарне ... о gconf ... неважливо


8
Я схвалив, оскільки ця публікація насправді не відповідь, це критика іншої відповіді. Якщо ви вважаєте, що зазвичай кращий вибір використовувати судо над pkexec, скажіть так, пояснюючи свою думку цими спростуваннями.
Flimm

4
Дякую Пол, за багато корисного аналізу тут! Але я також погоджуюся з Flimm. Чи можете ви почати з простої відповіді на запитання?
nealmcb

1
Ні, pkexec можна запустити графічний інтерфейс без налаштування: askubuntu.com/a/332847/89385
akostadinov

8

Кілька речей, чим pkexecвона відрізняється від sudoїї фронту:

  1. Не можна запускати графічні програми за допомогою, pkexecне чітко налаштовуючи це на це.
  2. Ви можете трохи змінити, як ви хочете запускати програми через pkexec: піктограму, текст для відображення, пам’ятати пароль чи ні, чи дозволяти йому графічно запускатись та інше.
  3. Будь-хто може запустити "Запустити як" суперпользователь (за умови, що він може підтвердити автентифікацію як такий), і sudoви повинні бути вказані у sudoersфайлі як адміністратор .
  4. gksudoблокує клавіатуру, мишу та фокус під час запиту пароля pkexec. В обох випадках натискання клавіш можна понюхати .
  5. З pkexecвами працюєте в трохи більш санітарному середовищі.

Спробуйте, наприклад:

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

Хороше запитання (# 3) про те , як ви можете перевірити справжність інших користувачів для запуску програм , як rootз pkexec. Чи може це налаштовуватися, яким користувачі можуть користуватися pkexecвзагалі (навіть якщо вони знають пароль іншого користувача, якому це дозволено)? suконфігурується таким чином. Коли я намагаюся звернутися suдо іншого некористувача, rootяк guestу системі Oneiric, він говорить мені, що я не дозволяю цього робити. (На відміну від цього, коли я намагаюся використовувати pkexecяк guestна Oneiric або Precision, я отримую те, що виглядає як помилка твердження, про яку незабаром я можу повідомити про помилку, оскільки я не повинен цього зрозуміти, навіть якщо це не дозволено.)
Eliah Kagan

2
Але sudoі її фронти можна також змінити, як описано в пункті 2. Ви можете запускати програму з gksuабо gksudo відображати налаштований текст , припиняючи потребу в паролях деяких користувачів, редагуючи /etc/sudoersvisudo), і змінювати, як довго вони запам'ятовуються в сенсі зміни способу Довго потрібен час, щоб час вийшов із судо (хоча я не впевнений, як це зробити на Ubuntu, який налаштований так, що питання про те, sudoпотрібен пароль чи ні , і скільки часу, поки він знову знадобиться, залежать від терміналу ).
Елія Каган

№4 не відповідає дійсності, якщо ви використовуєте GNOME Shell.
muru

Ні, pkexec можна запустити графічний інтерфейс без налаштування: askubuntu.com/a/332847/89385
akostadinov
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.