Эскалация привилегий оболочки Gnome

Я создаю расширение оболочки Gnome, и я хочу иметь возможность делать некоторые вещи с повышенными привилегиями. Итак, я думаю, что мне нужно использовать "набор политик", но я не знаю, как это сделать.

Итак, скажем, я хотел сделать что-то вроде ifconfig eth0 down или ifconfig eth0 up

Я могу работать с терминалом: pkexec ifconfig eth0 down и он будет запрашивать пароль, а затем сделать это.

Но как я должен делать это изнутри расширения?

Я уверен, что он имеет какое-то отношение к созданию файла в /usr/share/polkit -1/action, но я не могу найти что-либо в Интернете или в противном случае.

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

Я знаю, что это действительно плохая идея, позволяющая запускать любую команду. Это не то, о чем я прошу, я хочу иметь возможность запускать только одну программу/команду.

EDIT: Я не уверен, но я думаю, что не может быть необходимости вводить пароль. Я просто знаю, что sudo не запрашивает пароль какое-то время после первого раза, поэтому я вроде как хочу подобную функциональность. Не уверен, что возможно.

Ответ 1

Это долгое время, когда я не работал с PolicyKit, но из того, что я помню, вы действительно должны создать файл в каталоге actions/с содержимым вроде:

<?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="org.freedesktop.policykit.pkexec.run-ifconfig">
    <description>Configure network</description>
    <message>Authentication is required to set ifconfig parameters</message>
    <defaults>
      <allow_any>no</allow_any>
      <allow_inactive>no</allow_inactive>
      <allow_active>...</allow_active>
    </defaults>
    <annotate key="org.freedesktop.policykit.exec.path">/sbin/ifconfig</annotate>
  </action>

</policyconfig>

Вы должны изменить значение в:

<allow_active>...</allow_active>

Значение, которое вы хотите. Выбор значения:

  • "no" будет запрещать доступ
  • "да" неявно разрешает доступ
  • "auth_user" требует аутентификации пользователя.
  • "auth_admin" требует аутентификации администратора.
  • "auth_user_keep" и "auth_admin_keep" аналогично, но сохраняют аутентификацию в течение нескольких минут после этого.
  • Плюс некоторые другие значения, просмотрите здесь.

Изменение значения allow_active на "yes" должно прекратить требования проверки подлинности.

Затем вам нужно адаптировать файл действия к вашим потребностям и вызвать его.

Уго,

Ответ 2

У меня была такая же проблема, чтобы попытаться реализовать селектор для настройки. Вот что я придумал.

Как и другие, вам может потребоваться написать файл политики (я использовал "auth_admin" ). Я поместил его в "/usr/share/polkit-1/actions/tuned-adm.policy." Я не думаю, что могу распространять это через модель расширений, поэтому мне нужно будет спросить, как включить его.

Затем я использовал pkexec и мою команду, чтобы получить всплывающее окно sudo и заставить его работать.

const GLib = imports.gi.GLib;
const Util = imports.misc.util;
this.pkexec_path = GLib.find_program_in_path('pkexec');
this.tunedadm_path = GLib.find_program_in_path('tuned-adm');
let result = Util.trySpawnCommandLine(this.pkexec_path + " " + this.tunedadm_path  + " list")

Настоящим кикером здесь я использовал несколько других методов для запуска командной строки, и они заблокировали бы gnome-shell. Я нашел код здесь: https://github.com/nodefourtytwo/gnome-shell-extension-cpu-freq/blob/master/extension.js, чтобы быть особенно удобным.