ユーザー制御を必要とするいくつかのサービスがありますが、それをユーザーサービスとして使用することはできず(その要件はルートアクセス可能なシステムサービスです)、修正できない奇妙な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; } });
質問:
- 選択したサービスのみがユーザーのユーザー名で実行できるようにsudoステートメントを変更するにはどうすればよいですか?この方の記事を読んで、自分で直してみましたが失敗しました。
- 私はpolkitを使用することを好みます。私はpolkitバージョン0.112を持っています。 Journalctlでは、polkitが新しいルールを追加するのを見ることができますが、正しいルールを取得できません。静的サービス名を使用しても制御できません。私は何が間違っていましたか?
答え1
多くのテストと研究の最後に、ついに自分で答えることができるようになりました。
1)それ自体は不可能です。 [a-zA-Z0-9_-]* 正規表現のようなものを書く方法はありません。文字列の文字数を正確に知っていれば可能ですが、状況によって異なります。
2)私がコメントで述べたように、オプション2も出ました。私のsystemdバージョンにはsystemdサポートは必要ありません。必要なシステムパッケージをアップグレードすることは可能ですが、時間はありません。
だから少し変更されたオプションを選択しました。ユーザーがサービスを直接制御することを許可せず、起動スクリプトがsudoで実行できないすべてのチェックを実行できるようにします。すべてがうまくいけばそれからサービスが呼び出されます。