Назад | Перейти на главную страницу

systemd запускается как непривилегированный пользователь в группе

Я хочу пользователей в группе foogroup быть способным:

без использования повышенных привилегий. Это возможно?


У меня есть служба systemd, которая выглядит так:

[Unit]
Description=foo service

[Service]
Type=simple
ExecStart=/bin/sleep infinity
User=foobot
Group=foogroup

куда foobot является системным пользователем.

Я знаю, что мы можем установить файл модуля в ~/.config/systemd/user/ чтобы позволить непривилегированному пользователю использовать systemd, но это не особо помогает группе.

Примечание: я планирую использовать кабина так что добавление systemctl к /etc/sudoers не поможет.

В /etc/polkit-1/rules.d/10-myservice.rules

polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.systemd1.manage-units" && subject.isInGroup("somegroup")) {
        if (action.lookup("unit") == "foo.service") {
            var verb = action.lookup("verb");
            if (verb == "start" || verb == "stop" || verb == "restart") {
                return polkit.Result.YES;
            }
        }
    }
});

Я бы принял ответ Толлефа Фог Хина, если бы я не был в дистрибутиве Debian, однако, поскольку debian использует polkit (<0.106), * .rules недоступны. Эквивалентный файл в Debian:

/etc/polkit-1/localauthority/50-local.d/manage-units.pkla
----
[Allow users to manage services]
Identity=unix-group:somegroup
Action=org.freedesktop.systemd1.manage-units
ResultActive=yes

Однако учтите, что это не совсем эквивалент. Он позволяет группе управлять службами, но не указывает, какими службами группе разрешено управлять. Кроме того, он не ограничивает допустимые «глаголы». Однако я заметил, что пока systemd start разрешено, такие вещи, как systemd enable все еще недоступны, что защищено правами доступа к файлам.

У меня есть еще один открытый вопрос по SO относительно различий между возможностями *.rules и *.pkla файлы этого ответа Вот.