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

Читая эти вопросы и ответы:

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

  • Как настроить 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. Есть ли приложение с графическим интерфейсом для настройки pkexec использование (Policy Kit)?

3 ответа

Решение

Как настроить pkexec избежать ошибок при запуске приложений с графическим интерфейсом?

Я нашел два возможных пути:

  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 минут, как я проверил). Недостатком здесь является то, что эта вещь применима только для одной и той же команды / приложения и действительна для всех пользователей (если только она не отменяется в более поздней конфигурации).

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

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

  • Действия определены в 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 вообще.

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

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

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

В дополнение к ответу Раду: я бы не использовал псевдоним pkexec, но gksudo.

Зачем? Вам не нужно переписывать свой скрипт.

Я использую следующую конфигурацию:

  • открыть терминал
  • cd /usr/local/bin
  • sudo gedit gksudo (создайте новый файл с именем "gksudo"
  • напишите следующее содержание:

    • pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY $@

    • (не забудьте $@ в конце. Это для перенаправления всех параметров)

  • сохранить и выйти

  • сделать файл исполняемым: chmod 755 gksudo
  • Теперь у вас должна быть полнофункциональная команда gksudo, доступная в вашей системе - постоянно.

По причинам документации напишу, что я пробовал и не получилось:

  • псевдоним pkexec='pkexec env [...]'
  • псевдоним gksudo='pkexec [...]'
    • Не был постоянным и оставался только в одном терминале
  • добавив псевдоним ~/.bash_aliases
    • Работает, если вы впервые открываете терминал. Не работает, если дважды щелкнуть по сценарию
  • Создать ссылку на pkexec с параметрами (ln -s pkexec [...])
    • После быстрого гугла кажется, что linux не поддерживает параметры в ссылках

В отличие от ответа @Radu Rădeanu, мой объясняет, как создать команду и настроить ее, чтобы она работала как gksu!

Итак, основная альтернатива версии с графическим интерфейсом sudoзаключается в использовании pkexecкоманду, но для этого вам нужно экспортировать определенные переменные среды в момент выполнения, что можно сделать, добавив следующий псевдоним в ваш ~/.bashrcфайл:

      alias gksu='pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS'

Теперь, чтобы использовать его, вы можете запустить что-то вроде следующей команды:

      # structure: gksu <cmd>
$ gksu /usr/bin/my_app

Использованная литература:

Другие вопросы по тегам