Запуск програм від імені root без розпізнавання
У багатьох операційних системах на базі Linux досвідчені користувачі можуть використовувати файл /etc/sudoers, щоб налаштувати можливість виконання певних команд через sudo без запиту щодо розпізнавання. У KDE Linux немає ні файла /etc/sudoers, ні sudo — тож як можна досягти того самого результату?
Рішення полягає в тому, щоб налаштувати службу systemd, яка виконує вказану команду, а також правило polkit, яке дозволяє запускати цю системну службу без необхідності проходити розпізнавання.
Служба systemd
Ось приклад служби systemd, яка запускає /usr/bin/systemd-sysext refresh --always-refresh=yes для освіження розширень systemd:
/etc/systemd/system/sysext-refresh.service
[Unit]
Description=Refresh systemd extensions
[Service]
Type=oneshot
ExecStart=/usr/bin/systemd-sysext refresh --always-refresh=yes
Правило Polkit
А ось приклад правила polkit, яке дозволяє активним учасникам групи wheel, що увійшли до системи локально, запускати цю службу systemd без проходження розпізнавання:
/etc/polkit-1/rules.d/50-sysext-refresh.rules
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.systemd1.manage-units" &&
action.lookup("unit") == "sysext-refresh.service" &&
action.lookup("verb") == "start" &&
subject.local &&
subject.active &&
subject.isInGroup("wheel")) {
return polkit.Result.YES;
}
});
Щоб уточнити це правило так, аби воно скасовувало розпізнавання лише для вас, замініть «wheel» на своє ім’я користувача.
Використання
Після створення обох файлів ви можете оновлювати розширення systemd без проходження розпізнавання, запустивши службу systemd: systemctl start sysext-refresh.
Те саме можна зробити для будь-яких інших команд — просто створіть для них відповідні служби systemd та правила polkit.
Докладніші відомості
Статтю надіслано Nate Graham, умови ліцензування — CC-BY-4.0.