グループのユーザーが次のことを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;
}
}
}
});