Як налаштувати pkexec, щоб не запитувати пароль?


12

У мене є програма GUI, якій потрібно викликати демон (написаний на Python) з правами суперпользователя. Я хотів би це зробити, не спонукаючи користувача до пароля.

Оскільки демон є сценарієм, я не можу встановити біт SUID безпосередньо. Я можу написати для цього обгортку C, але я краще не винаходити колесо, особливо коли помилка з мого боку могла призвести до серйозних порушень безпеки системи.

Що я зазвичай роблю в цій ситуації - це додати рядок, /etc/sudoersякий дозволяє користувачам виконувати демон як пароль без пароля, використовуючи директиву NOPASSWD. Це добре працює з командного рядка. Однак коли я це роблю з графічного інтерфейсу, pkexecз'являється діалогове вікно із запитом пароля користувача. Схоже, що в Ubuntu sudoякось перехоплюються дзвінки з GUI pkexec.

Чи є чистий спосіб цього? Я дійсно не хотів би мати справу з клопотами встановленого сценарію.


Про яку програму ви говорите?
Раду Радеану

Будь-який додаток GUI. Коли програма GUI намагається запустити sudo somecommand, діалогове вікно, що з'являється, - це pkexecдіалогове вікно з паролем, незалежно від того, чи існує політика судерів, що дозволяє виконувати програму.
Чінмай Канчі

Відповіді:


14

Неправильно сказати, що: "Схоже, що на Ubuntu sudoякось перехоплюються дзвінки з GUI pkexec" . pkexecне має багато спільного з sudo. На відміну від sudo, pkexecне надає кореневого дозволу на весь процес, а навпаки, дозволяє більш тонкий рівень контролю над централізованою системною політикою.

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

gparted автентифікувати

Натисніть Деталі, і діалогове вікно буде виглядати так:

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, вас більше не запитують пароль.


Так, pkexec дійсно перехоплює дзвінки на sudo. Дозвольте мені побачити, чи можу я побудувати мінімальний приклад такої поведінки.
Chinmay Kanchi

Я не можу повторити це в простому додатку, це може статися лише в деяких дуже конкретних ситуаціях, і я не маю часу простежити помилку. Я прийму вашу відповідь. Ура.
Chinmay Kanchi

@ChinmayKanchi Давайте будемо більш чіткими. Я візьму для прикладу ще раз gparted. Запускаючи з терміналу sudo gparted, ви запускаєте /usr/sbin/gpartedфайл з правами root. Коли ви починаєте gpartedз графічного інтерфейсу, ви починаєте насправді gparted-pkexec(ви можете перевірити цей внутрішній /usr/share/applications/gparted.desktopфайл), /usr/bin/gparted-pkexecтобто сценарій оболонки, метою якого є виконання наступної команди: pkexec "/usr/sbin/gparted"що еквівалентно pkexec gparted. Отже, нічого спільного sudo. І цю команду ви повинні використовувати в терміналі, не sudo gparted.
Radu Rădeanu

1
@ChinmayKanchi sudoслід використовувати лише для оболонок, а не для GUI. Дивіться man sudoі man pkexecв цьому сенсі.
Radu Rădeanu

Так, я знаю обидва ваші моменти. Моя ситуація полягає в тому, що у мене є додаток GUI (написаний мною), який намагається запустити програму оболонки (демон, також написаний мною), використовуючи sudo. Чомусь це призводить до того, що pkexec викликається замість sudo, а це означає, що будь-які політики судо, створені для демона, ігноруються.
Chinmay Kanchi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.