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

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

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

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

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

1 ответ

Решение

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

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

gparted authenticate

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

gparted authenticate - подробности

Отсюда все, что вам нужно сделать, это открыть /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, вас больше не будут спрашивать пароль.

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