Как настроить pkexec?

24

Чтение этих вопросов и ответов:

  • Когда использовать pkexec vs. gksu / gksudo?
  • Почему gksu больше не устанавливается по умолчанию ?

принес мне еще один, который создаст проблемы для новых пользователей этой команды:

  • Как настроить pkexec для удобства использования?

Например, при выполнении следующих действий:

(Открытие файла в терминале)

pkexec nano /etc/mysql/my.cnf  

(Открытие файла в графическом интерфейсе)

pkexec gedit /etc/mysql/my.cnf  

Последняя имеет следующую ошибку:

 pkexec must be setuid root

Теперь это вызвало у меня следующие вопросы:

  1. Как настроить pkexec , чтобы избежать этого? Аналогично тому, как sudo / gksu ведут себя при выполнении одной и той же вещи (они только запрашивают пароль).

  2. Если это применимо, как сказать, чтобы он не запрашивал пароль после первого применения приложения к команде (или включая первую команду, если она настраивается)?

  3. Где сохранить файл конфигурации, если он еще не существует?

  4. Есть ли приложение GUI для настройки pkexec использования (Policy Kit)?

задан Luis Alvarado 29.04.2013 в 14:43
источник

1 ответ

31

Как настроить pkexec , чтобы избежать ошибок при запуске GUI-приложений?

Я нашел два возможных способа:

  1. Как вы можете видеть, используя следующее:

    pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gedit
    

    не будет вам никакой ошибки. И это нормально, потому что man pkexec очень ясно в этом вопросе:

           [...] pkexec will not allow you to run X11 applications
           as another user since the $DISPLAY and $XAUTHORITY environment
           variables are not set.[...]
    

    В результате вы можете создать ( постоянный ) псевдоним (это самый простой способ):

    alias pkexec='pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY'
    
  2. Или (снова), поскольку man pkexec говорит:

           [...] These two variables will be retained if the
           org.freedesktop.policykit.exec.allow_gui annotation on an action is set
           to a nonempty value; this is discouraged, though, and should only be
           used for legacy programs.[...]
    

    вы можете создать новый файл политики в /usr/share/polkit-1/actions с именем com.ubuntu.pkexec.gedit.policy со следующим кодом xml внутри, где самое главное - установить org.freedesktop.policykit.exec.allow_gui на непустое значение:

    <?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>
    
      <action id="com.ubuntu.pkexec.gedit">
        <message gettext-domain="gparted">Authentication is required to run gedit</message>
        <icon_name>gedit</icon_name>
        <defaults>
          <allow_any>auth_admin</allow_any>
          <allow_inactive>auth_admin</allow_inactive>
          <allow_active>auth_admin</allow_active>
        </defaults>
        <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/gedit</annotate>
        <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
      </action>
    
    </policyconfig>
    

Как сказать, чтобы не запрашивать пароль после первого раза, применяя его к команде?

Для этих трех тегов настройки: allow_any , allow_inactive и allow_active из файла политики доступны следующие параметры:

  • Нет . Пользователь не имеет права выполнять действие. Поэтому нет необходимости в аутентификации.
  • да . Пользователь имеет право выполнять действие без какой-либо проверки подлинности.
  • auth_self : требуется аутентификация, но пользователь не должен быть административным пользователем.
  • auth_admin : требуется аутентификация как административный пользователь.
  • auth_self_keep . То же самое, что auth_self , но, как sudo , авторизация длится несколько минут.
  • auth_admin_keep : то же самое, что auth_admin , но, как sudo , авторизация длится несколько минут.

Источник: Polkit - Структура - Действия

Итак, если вы используете опцию auth_admin_keep (или, если применимо, auth_self_keep ), pkexec не будет запрашивать пароль снова в течение некоторого времени (по умолчанию это время установлено на 5 минут, как я проверял). Недостатком здесь является то, что эта вещь применима только для одной - той же команды / приложения и действительна для всех пользователей (если только она не будет отменена в более поздней конфигурации).

Где сохранить файл конфигурации, если он еще не существует?

Конфигурационные файлы или определения полкита можно разделить на два типа:

  • Действия определены в файлах XML .policy, расположенных в /usr/share/polkit-1/actions . Каждое действие имеет набор разрешений по умолчанию, прикрепленных к нему (например, вам нужно указать администратора для использования действия GParted). По умолчанию могут быть отменены, но редактирование файлов действий НЕ является правильным. Имя этого файла политики должно иметь следующий формат:

    com.ubuntu.pkexec.app_name.policy
  • Правила авторизации определены в файлах JavaScript .rules. Они находятся в двух местах: сторонние пакеты могут использовать /usr/share/polkit-1/rules.d (хотя и немного, если они есть) и /etc/polkit-1/rules.d для локальной конфигурации. Файлы .rules обозначают подмножество пользователей, относятся к одному (или нескольким) действиям, указанным в файлах действий, и определяют, с какими ограничениями эти действия могут быть предприняты этими / этими пользователями. В качестве примера, файл правил может отменить требование по умолчанию для всех пользователей для аутентификации в качестве администратора при использовании GParted, определяя, что конкретному пользователю это не нужно. Или вообще не разрешено использовать GParted.

Источник: Polkit - Структура

Есть ли приложение GUI для настройки pkexec использования?

Из того, что я знаю, до сих пор (18.01.2014) не существует нечто подобное. Если в будущем я что-то найду, я тоже не забуду обновить этот ответ.

    
ответ дан Radu Rădeanu 15.08.2013 в 09:44
источник