У меня есть приложение с графическим интерфейсом, которому нужно вызвать демона (написанного на Python) с привилегиями суперпользователя. Я хотел бы сделать это, не запрашивая у пользователя пароль.
Поскольку демон является скриптом, я не могу установить бит SUID напрямую. Я мог бы написать обертку C для этого, но я бы предпочел не изобретать велосипед, особенно когда ошибка с моей стороны может привести к серьезной угрозе безопасности системы.
В этой ситуации я обычно добавляю строку /etc/sudoers
, которая позволяет пользователям запускать демон от имени пользователя root без пароля, используя директиву NOPASSWD. Это отлично работает из командной строки. Однако когда я делаю это из графического интерфейса, появляется диалоговое окно pkexec
с запросом пароля пользователя. Похоже, что в Ubuntu вызовы sudo
из GUI каким-то образом перехватываются pkexec
.
Есть ли чистый способ обойти это? Я действительно предпочел бы не иметь дело с трудностями сценария setuid.
Неверно говорить, что: «Похоже, что в Ubuntu вызовы sudo
из GUI каким-то образом перехватываются pkexec
» . pkexec
не имеет много общего с sudo
. В отличие от sudo
, pkexec
не дает корневого разрешения для всего процесса, а скорее обеспечивает более тонкий уровень контроля над политикой централизованной системы.
Теперь, если вы хотите запустить приложение с графическим интерфейсом без запроса пароля от pkexec
, это не сложно сделать. Возьмем для примера GParted . Когда вы откроете его, вы увидите следующее диалоговое окно, запрашивающее у вас пароль:
Нажмите Подробно , и диалоговое окно будет выглядеть теперь вроде:
Отсюда все, что вам нужно сделать, это открыть файл /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 , вам больше не потребуется пароль.