Когда использовать pkexec vs. gksu / gksudo?

73

Существует два основных способа запуска приложений графически как root (или, в более общем плане, как другой пользователь). Такие программы, как gksu , gksudo и kdesudo являются графическими интерфейсами для sudo . Напротив, pkexec является графическим интерфейсом для PolicyKit .

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

    
задан Eliah Kagan 11.11.2011 в 21:44
источник

3 ответа

25

PolicyKit более настраивается, хотя pkexec не использует эту конфигурацию. Кроме того, pkexec показывает пользователю полный путь к программе, которая будет запущена, чтобы пользователь немного более уверен, что произойдет. Так называемые «политики» PolicyKit могут использоваться для установки дополнительных настроек. Например, следует ли помнить пароль.

Что-то я получил из руководства pkexec :

The environment that PROGRAM will run it, will be set to a minimal known and safe environment in order to avoid injecting code through LD_LIBRARY_PATH or similar mechanisms. In addition the PKEXEC_UID environment variable is set to the user id of the process invoking pkexec. As a result, pkexec will not allow you to run e.g. X11 applications as another user since the $DISPLAY environment variable is not set.

Дополнительная информация о политиках или определениях действий из руководства 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).
    
ответ дан RobinJ 12.11.2011 в 16:35
источник
14

С помощью sudo вы можете установить для каждого пользователя и для каждой политики программ, чтобы сохранить или сбросить среду звонящих в контексте sudo. Политика env_reset устанавливается по умолчанию.

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

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

sudo также позволяет пользователю оставаться аутентифицированным в течение определенного времени. Опция называется timeout, настраивается глобально, для каждого пользователя или для каждого приложения. Аутентификация может быть сохранена за каждый или по всему миру на пользователя.

В то время как pkexec не может выполнять проверку ARGUMENTS, переданных в PROGRAM, sudo действительно имеет эту функцию. Принято, однако, вы можете легко испортить это, и обычно это не делается.

Вы можете немного настроить, как вы хотите, чтобы программы запускались через pkexec: значок, текст для отображения, вы даже можете иметь материал локализации и все такое. В зависимости от обстоятельств это может быть действительно здорово. Ужасно, однако, что кто-то почувствовал необходимость изобретать колесо для этой функции. Это, вероятно, было бы чем-то помещено в графические оболочки gtksudo / kdesu.

Policykit - это только централизованная структура конфигурации. К сожалению, не очень. XML-файлы PKs намного сложнее, чем что-либо, что приложение может предоставить изначально двоичные файлы. И никому не было бы так бесполезно использовать двоичный ... ой gconf ... неважно.

    
ответ дан Paul Hänsch 26.10.2012 в 14:47
8

Несколько вещей, как pkexec отличается от sudo и его интерфейсов:

  1. Вы не можете запускать графические приложения через pkexec без явной настройки для этого.
  2. Вы можете немного настроить, как вы хотите, чтобы программы запускались через значок pkexec : значок, текст для отображения, следует ли запоминать пароль или нет, разрешать ли его выполнять графически и еще несколько.
  3. Любой может запускать «Запуск от имени» суперпользователя (при условии, что он может аутентифицироваться как таковой), %%_de% вы должны быть указаны в файле sudo как admin .
  4. sudoers блокирует клавиатуру, мышь и фокус при запросе пароля, gksudo - нет. В обоих случаях нажатия клавиш являются неуязвимыми, хотя .
  5. С pkexec вы работаете в немного более дезинфицированной среде.

Попробуйте, например:

cd /etc/init.d
sudo cat README
# and now the same with pkexec
pkexec cat README
# nice, huh?
    
ответ дан arrange 15.11.2011 в 23:59