ヘッドレスLinuxボックスでプライベートゲームサーバーを実行しています。私はばかではないので、サーバーは、更新プログラムをダウンロードしてワールドデータベースを変更するために必要な最小限のアクセス権限を持つ、独自の非特権ユーザーとして実行されています。
また、必要に応じてサーバーを適切に起動、停止、再起動するためのsystemdユニットファイルも作成しました(上記の更新など)。
ただし、実際にsystemctl
またはservice <game> start/stop/restart
を呼び出すには、rootまたはSudo
対応ユーザーとしてログインする必要があります。
Systemdに<game>
サービスの非特権ユーザーgamesrv
がstart/stop/restartコマンドの実行を許可されていることを通知する方法はありますか?
これを行うには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以上が必要です(JavaScriptのrules.dファイルの場合はPolicyKit> = 0.106-pkaction --version
で確認してください)。
新しい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
を使用せずに、指定されたサービスを管理できます。
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
パッケージをインストールする必要がある場合があります。
Sudo
をroot
と同等のアクセス権の提供に関連付けることもできますが、これを使用して、特定の限られたコマンドセットに対して特定のユーザーのrootアクセスを許可することもできます。
[ Sudoを使用せずに一連のコマンドに非rootユーザーにアクセス権を付与する Sudoを使用せずに非rootユーザーに一連のコマンドにアクセスすることで、サーバーフォールトでどのように既に回答されていますか? 。
PolicyKitの使用はまだ一般的ではありません。 systemdの「ユーザーユニット」の使用は問題なく機能するはずですが、歴史的には、ユーザーが特定のコマンドをrootとして実行できるようにするSudo
の機能を使用することで、何度も目標を達成してきました。