GNU/Linux >> Linux の 問題 >  >> Linux

systemd:特定のサービスを変更する権限を非特権ユーザーに付与する

解決策 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 を持つパッケージ お使いのシステムで利用できます。


Linux
  1. LinuxでSystemdサービスを作成する方法

  2. Linuxsystemdに新しいサービスを追加する

  3. Howto MySQL:ユーザーを作成し、データベースに権限を付与します

  1. 一連のSystemdサービスファイルのユーザーを変更するにはどうすればよいですか?

  2. systemd - サービスに複数の引数を与える

  3. Upstart:非特権ユーザーとしてサービスを実行し、root として事前開始スクリプトを実行します。

  1. systemdを使用してスタートアップを管理する

  2. Linux OS サービス「winbind」

  3. systemd ユーザー サービスをシステム ターゲットに依存させる