グループのユーザーが次のことを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;
}
}
}
});
答え2
私は解決策を探していますが、実際に私を満たす解決策を見つけることができません。満足のいく解決策は、でグループサポートを提供することですsystemd
。ところで、この回避策を見つけました。アクセス権を付与したいユーザーが と仮定しますann
。彼らはすべて1つのグループに属している必要があります。ben
chris
awesomeproject
- 新しいユーザーを作成し、
awesomeproject
そのユーザーをグループに追加しますawesomeproject
。
sudo adduser awesomeproject
sudo usermod -a -G awesomeproject ann
sudo usermod -a -G awesomeproject ben
sudo usermod -a -G awesomeproject chris
systemctl
グループ内のすべてのユーザーを新しいユーザーのsudoerに追加します。
sudo visudo
これらの項目は次のようにする必要があります。
ann ALL=(awesomeproject) NOPASSWD: /bin/systemctl
ben ALL=(awesomeproject) NOPASSWD: /bin/systemctl
chris ALL=(awesomeproject) NOPASSWD: /bin/systemctl
に入れるよりも、ディストリビューションによっては、使用するよりも入れる方が/etc/sudoers
良いかもしれません。/etc/sudoers.d/awesomeproject
sudo visudo -f /etc/sudoers.d/awesomeproject
awesomeproject
グループメンバーがアクセスできるように、ファイルとディレクトリに対する権限を適切に管理します~awesomeproject
。これで、次のコマンドが、
ann
でben
動作しますchris
。
sudo awesomeproject systemctl ...