systemdは、グループ内の権限のないユーザーで始まります。

systemdは、グループ内の権限のないユーザーで始まります。

グループのユーザーが次のことをfoogroup実行できることを願っています。

  • systemctl start foo.service
  • systemctl stop foo.service
  • systemctl status foo.service
  • journalctl -u foo.service

昇格された権限を使用しないでください。それは可能ですか?


次のシステムサービスがあります。

[Unit]
Description=foo service

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

foobotシステムユーザーはどこにいますか?

権限のないユーザーがsystemdを使用できるようにユニットファイルをインストールできることを知っていますが、~/.config/systemd/user/これはコミュニティには役に立ちません。

注:使用する予定です。SDバスAPIのlibsystem-devそしてコックピットしたがって、追加してもsystemctl役に立ち/etc/sudoersません。

あまり気にしませんsystemctl enable。より高い権限が必要かどうかは重要ではありません。

ベストアンサー1

これが私がついに思いついた解決策です。私が作る:

/etc/polkit-1/localauthority/50-local.d/service-auth.pkla
---
[Allow foogroup to start/stop/restart services]
Identity=unix-group:foogroup
Action=org.freedesktop.systemd1.manage-units
ResultActive=yes

これは特にDebian / Ubuntuで使用されるpolkit <106に適用されます。他のディストリビューションでは、以下を実行する最新バージョンの polkit を使用します。

/etc/polkit-1/rules.d/foogroup.rules
---
polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.systemd1.manage-units" &&
        subject.isInGroup("foogroup")) {
        return polkit.Result.YES;
    } });

単一のサービスに制限し、開始/停止/再起動のみを行うには、次のように使用します。

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

(からhttps://wiki.archlinux.org/title/Polkit)

おすすめ記事