Эскалация привилегий оболочки 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, чтобы быть особенно удобным.