Як налаштувати 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. Чи існує програма GUI для налаштування pkexecвикористання (Policy Kit)?


1
Що стосується Ubuntu, що займається бізнесом з цього приводу 13.04, це я роблю для gedit & nautilus. Тут добре працює, але не буде публікацією як відповідь, оскільки це лише моє рішення до тих пір, поки Ubuntu не піклується про це. ubuntuforums.org/…
30

Хм, не можу додати коментар - тому доведеться вдатися до відповіді ... Використання: alias pkexec = 'pkexec env DISPLAY = $ DISPLAY XAUTHORITY = $ XAUTHORITY' Означає, що gui для входу повертає шлях env, а не команду врешті-решт страчується. Чи є спосіб організувати використання "env DISPLAY = $ DISPLAY XAUTHORITY = $ XAUTHORITY", щоб pkexec gui повертав шлях до команди, яка в кінцевому рахунку виконується? Дивіться фото тут: polkit auth

Відповіді:


39

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

Куди зберегти файл конфігурації, якщо він ще не існує?

Файли конфігурації або визначення 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.

     Джерело: Polkit - структура

Чи є програма GUI для налаштування pkexecвикористання?

З того, що я знаю, дотепер (18.01.2014) не існує подібного. Якщо в майбутньому я щось знайду, я не забуду також оновити цю відповідь.


4
яка гарна відповідь !! Дуже дякую. Тепер я розумію, чому я не міг працювати doublecmdз ROOT PRIVELEGES, як мені потрібно було експортувати середовища DISPLAY & XAUTHORITY!! Лише невеликі запитання: Чи є якась різниця в написанні політики або просто запуску програми з командою, як pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY doublecmdвесь час?
Ілля Ростовцев

@IliaRostovtsev це, я думаю, pkexecстане настільки небезпечним, як gksudoякщо б запустити через такі псевдоніми? може бути, замість псевдоніму це може бути безпечнішим сценарій із кореневими привілеями?
Сила Водолія

@AquariusPower Як ви бачите, що це може стати небезпечним? Ви можете спробувати, звичайно, але я не впевнений. Проблема виникає, коли вам потрібно використовувати GUI (X Server), який працює під "ви" та іншу програму GUI, яку потрібно запустити як root. Пограйте і будь ласка, якщо ви щось знайдете.
Ілля Ростовцев

@ radu-rădeanu На Utopic auth_admin_keep, здається, не працює. Якщо я запускаю синаптику з 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 [...])
    • Після швидкого пошуку Google, схоже, Linux не підтримує параметри у посиланнях
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.