2012-04-11 6 views
10

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

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

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

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

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

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

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

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

+0

Это, как правило, не будет работать слишком хорошо, потому что расширение вашей оболочки (в JavaScript) будет запущено в том же процессе, что и сама оболочка, тем самым всевозможные «утечки» безопасности. - Безопасная ставка, по сути, заключалась бы в использовании «pkexec» или иначе изолировать «небезопасный» бит привилегированного кода в отдельном процессе ... PS: Повторное приглашение пароля с помощью ' sudo' и др. - это системная настройка безопасности; по умолчанию обычно требуется повторное приглашение после (long), тогда как – BRFennPocock

+0

@BRPocock да, используя 'pkexec' - это то, что я хочу сделать. Как мне сделать это из расширения? – Jay

ответ

2

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

<?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> 

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

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

Изменение значения allow_active на «yes» должно прекратить требования аутентификации.

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

Hugo,

1

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

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

Далее я использовал 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") 

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