Как настроить pkexec, чтобы он не запрашивал пароль?

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

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

В этой ситуации я обычно добавляю строку /etc/sudoers, которая позволяет пользователям запускать демон от имени пользователя root без пароля, используя директиву NOPASSWD. Это отлично работает из командной строки. Однако когда я делаю это из графического интерфейса, появляется диалоговое окно pkexec с запросом пароля пользователя. Похоже, что в Ubuntu вызовы sudo из GUI каким-то образом перехватываются pkexec.

Есть ли чистый способ обойти это? Я действительно предпочел бы не иметь дело с трудностями сценария setuid.

12
задан 10 December 2013 в 14:31

1 ответ

Неверно говорить, что: «Похоже, что в Ubuntu вызовы sudo из GUI каким-то образом перехватываются pkexec» . pkexec не имеет много общего с sudo. В отличие от sudo, pkexec не дает корневого разрешения для всего процесса, а скорее обеспечивает более тонкий уровень контроля над политикой централизованной системы.

Теперь, если вы хотите запустить приложение с графическим интерфейсом без запроса пароля от pkexec, это не сложно сделать. Возьмем для примера GParted . Когда вы откроете его, вы увидите следующее диалоговое окно, запрашивающее у вас пароль:

gparted authenticate

Нажмите Подробно , и диалоговое окно будет выглядеть теперь вроде:

gparted authenticate - details

Отсюда все, что вам нужно сделать, это открыть файл /usr/share/polkit-1/actions/com.ubuntu.pkexec.gparted.policy, используя, например, следующую команду:

gksu gedit /usr/share/polkit-1/actions/com.ubuntu.pkexec.gparted.policy

и измените следующие строки:

      <allow_any>auth_admin</allow_any>
      <allow_inactive>auth_admin</allow_inactive>
      <allow_active>auth_admin</allow_active>

следующим образом:

      <allow_any>yes</allow_any>
      <allow_inactive>yes</allow_inactive>
      <allow_active>yes</allow_active>

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

0
ответ дан 10 December 2013 в 14:31

Другие вопросы по тегам:

Похожие вопросы: