Перейти к содержимому

Запуск команд от имени root без проверки подлинности

Во многих операционных системах на основе Linux опытные пользователи могут настроить файл /etc/sudoers так, чтобы определённые команды выполнялись через sudo без запроса проверки подлинности. В KDE Linux нет ни /etc/sudoers, ни sudo. Как добиться того же?

Для этого нужно создать службу systemd, которая выполняет нужную команду, и правило polkit, которое разрешает запускать эту системную службу без проверки подлинности.

Служба systemd

Вот пример службы systemd, которая выполняет /usr/bin/systemd-sysext refresh --always-refresh=yes, чтобы обновить системные расширения:

/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: systemctl start sysext-refresh.

То же самое можно сделать для любых других команд: достаточно создать для них соответствующие службы systemd и правила polkit.

Дополнительные сведения


Статья предоставлена и распространяется под лицензией CC-BY-4.0.