ユーザーとしてsystemdシステムサービスを制御する

ユーザーとしてsystemdシステムサービスを制御する

ユーザー制御を必要とするいくつかのサービスがありますが、それをユーザーサービスとして使用することはできず(その要件はルートアクセス可能なシステムサービスです)、修正できない奇妙なGROUP / 216エラーもあります。私が何を試しても構いません。

名前でテンプレートサービスを作成しました。[Eメール保護]だから始める必要がありますsystemctl start my-daemon@<parameter>.service。パラメータは英数字文字列であり、スペース、タブ、特殊文字などを含めることはできません。

私が読んで特定のユーザーだけでシステムサービスを再起動しますか?「sudoメソッド」を試しましたが、テンプレートサービスを使用しているため、かなりのセキュリティ問題が発生します。

ユーザーのユーザー名でサービスを停止できる sudo 行の例:

username ALL= NOPASSWD: /bin/systemctl stop my-daemon@*.service

ただし、この行を使用すると、次のコマンドも実行できるため、セキュリティ上の悪夢であることに精通しています。

sudo systemctl stop my-daemon@xyz firewalld.service

以下は2つのサンプルpolkitファイルです。 1 つは静的サービス名、もう 1 つはテンプレートです。どちらも/etc/polkit-1/rules.d/にあります。

polkit.addRule(function(action, subject) { if (action.id == "org.freedesktop.systemd1.manage-units" && action.lookup("unit") == "my-daemon2.service" && subject.user == "username") { return polkit.Result.YES; } });

polkit.addRule(function(action, subject) { if (action.id == "org.freedesktop.systemd1.manage-units" && action.lookup("unit") == "[email protected]" && subject.user == "username") { return polkit.Result.YES; } });

質問:

  1. 選択したサービスのみがユーザーのユーザー名で実行できるようにsudoステートメントを変更するにはどうすればよいですか?この方の記事を読んで、自分で直してみましたが失敗しました。
  2. 私はpolkitを使用することを好みます。私はpolkitバージョン0.112を持っています。 Journalctlでは、polkitが新しいルールを追加するのを見ることができますが、正しいルールを取得できません。静的サービス名を使用しても制御できません。私は何が間違っていましたか?

ベストアンサー1

多くのテストと研究の最後に、ついに自分で答えることができるようになりました。

1)それ自体は不可能です。 [a-zA-Z0-9_-]* 正規表現のようなものを書く方法はありません。文字列の文字数を正確に知っていれば可能ですが、状況によって異なります。

2)私がコメントで述べたように、オプション2も出ました。私のsystemdバージョンにはsystemdサポートは必要ありません。必要なシステムパッケージをアップグレードすることは可能ですが、時間はありません。

だから少し変更されたオプションを選択しました。ユーザーがサービスを直接制御することを許可せず、起動スクリプトがsudoで実行できないすべてのチェックを実行できるようにします。すべてがうまくいけばそれからサービスが呼び出されます。

おすすめ記事