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

32

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

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

  • Как настроить 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)?

Луис Альварадо
источник
1
В лейбле Ubuntu, отвечающем за бизнес в этом отношении в 13.04, это то, что я делаю для gedit & nautilus. Здесь отлично работает, но не будет публиковать ответ, так как это всего лишь мое решение до тех пор, пока Ubuntu не позаботится о нем. ubuntuforums.org/...
Дуги
Хм, не могу добавить комментарий - поэтому приходится прибегать к ответу ... Использование: alias pkexec = 'pkexec env DISPLAY = $ DISPLAY XAUTHORITY = $ XAUTHORITY' Означает, что графический интерфейс входа в систему возвращает путь env, а не команду в конечном итоге выполняется. Есть ли способ организовать использование «env DISPLAY = $ DISPLAY XAUTHORITY = $ XAUTHORITY», чтобы pkexec gui возвращал путь к команде, которая в конечном итоге выполняется? Смотрите рисунок

Ответы:

39

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

Раду Рэдяну
источник
4
какой красивый ответ !! Большое спасибо. Теперь я понимаю, почему я не мог работать doublecmdс ROOT PRIVELEGES, поскольку мне нужно было экспортировать среды с помощью DISPLAY & XAUTHORITY!! Просто небольшие вопросы: есть ли разница в написании политики или просто в запуске программы с командой pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY doublecmdвсе время?
Илья Ростовцев
@IliaRostovtsev это я думаю, pkexecстанет так же небезопасно, как gksudoесли бы запустить через такой псевдоним? может быть, вместо псевдонима это может быть скрипт с привилегиями root, может быть безопаснее?
Водолей Сила
@ AquariusPower Каким образом вы видите, что это может стать небезопасным? Конечно, можно попробовать, но я не уверен. Проблема возникает, когда вам нужно использовать GUI (X-сервер), который работает под именем «вы», и другую программу с графическим интерфейсом, которую нужно запускать от имени пользователя root. Поиграйте и пост-обратно, пожалуйста, на случай, если вы что-нибудь найдете.
Илья Ростовцев
@ radu-rădeanu По-видимому, Utopic auth_admin_keepне работает. Если я запускаю synaptic из GUI (что эквивалентно pkexec synaptic), он запрашивает пароль каждый раз. Есть идеи почему?
Хуршид Алам
0

В дополнение к ответу Раду: я бы не использовал псевдоним 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 не поддерживает параметры в ссылках
DarkTrick
источник