解決策 1:
これを行うには 2 つの方法が考えられます:
1 つは、サービスをシステム サービスではなくユーザー サービスにすることです。
システム ユニットを作成する代わりに、systemd ユニットが $HOME/.config/systemd/user/daemon-name.service
のサービス ユーザーのホーム ディレクトリに配置されます。 .同じユーザーが systemctl --user <action> daemon-name.service
でサービスを管理できます .
ユーザーユニットが起動時に開始できるようにするには、root がアカウントのリンガーを有効にする必要があります (例:sudo loginctl enable-linger username
)。 .単位も WantedBy=default.target
でなければなりません .
もう 1 つの方法は、ユーザーが PolicyKit を介してシステム ユニットを管理できるようにすることです。これには systemd 226 以上 (および PolicyKit>=0.106 の JavaScript rules.d ファイルが必要です – pkaction --version
で確認してください) )。 Debian は PolicyKit を 10 年近く前のバージョン 0.105 に故意に差し控えており、これは明らかに 1 人の個人的な意見のため、この機能をサポートしておらず、Debian もそれから派生したディストリビューション (Ubuntu など) もこの方法を使用できないことに注意してください。
新しい PolicyKit 構成ファイルを作成します。 /etc/polkit-1/rules.d/57-manage-daemon-name.rules
許可する属性をチェックします。例:
// Allow alice to manage example.service;
// fall back to implicit authorization otherwise.
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.systemd1.manage-units" &&
action.lookup("unit") == "example.service" &&
subject.user == "alice") {
return polkit.Result.YES;
}
});
名前付きユーザーは、systemctl
を使用して名前付きサービスを管理できます。 sudo
を使用せずに .
解決策 2:
sudo
そのために作られています。 /etc/sudoers
を編集します visudo
のファイル Cmd_alias
を追加するには 非特権ユーザーが使用できるようにするコマンド:
# game server commands
Cmnd_Alias GAME_CMDS = /usr/bin/systemctl start <game service>, /usr/bin/systemctl stop <game service>
非特権ユーザーが次のようにエイリアスで定義されたコマンドを使用できるようにする行を追加します。
unprivileged_user ALL=(ALL) NOPASSWD: GAME_CMDS
sudo コマンドのさまざまなパラメーターについては、トピックに関するその他のドキュメントを参照してください。
sudo
をインストールする必要があるかもしれません sudo
を持つパッケージ お使いのシステムで利用できます。