web-dev-qa-db-ja.com

グラフィカルなSudoプロンプトを使用してsystemctlを停止します

私の質問は、Sudoと入力するのを忘れたときに、この迷惑なポップアップを開かないようにsystemd(?)を構成するにはどうすればよいですか。テキストベースのSudoプロンプトを表示するか、エラーを表示するだけで、間違いをすばやく修正できます。

これは最新のArchLinux(systemd 238.133)です。

enter image description here

4
MightyPork

これは「Sudo」プロンプトではなく、「polkit」プロンプトです。これを回避する1つの方法は、systemctlだけでなくallソフトウェアに対してグローバルであり、アクションを即座に拒否する(またはすぐに許可する)polkitルールを作成することです。 。

polkit.addRule(function(action, subject) {
    if (subject.user !== "root") {
        if (/^org\.freedesktop\.systemd1\./.test(action.id)) {
            return polkit.Result.NO;
        }
    }
});

(ルートバイパスpolkitによって呼び出されたアクションは完全にチェックするため、subject.userテストは省略できます。)

polkitルールは/etc/polkit/rules.d/*.rulesに保存され、通常は80-custom.rulesのように名前が付けられます(昇順で処理されます)。詳細については、 polkit(8) を参照してください。


(とはいえ、Sudo構成にパスワードがない場合、「Sudo」を使用することとpolkitにアクションをすぐに許可させることの間に実際的なセキュリティの違いはありません。逆に、Sudoが必要な場合パスワード...それなら、polkitダイアログに入力してみませんか?同じパスワードです。)

4
user1686

オプションがあります--no-ask-password。エイリアスを作成します。

alias systemctl='systemctl --no-ask-password'

(Bash、Kubuntuでテスト済み)。

2

SystemctlにSudoを使用しないでくださいever; areメンテナンスを許可されている場合は、polkitを適切に設定してください。

RationaleSudoは、要求されたユーザー(通常:root)によって効果的に実行されるプログラムを作成します。リンクされているすべてのツールキットを含みます。プログラム、ライブラリ、または... Sudo構成にバグがあると、脆弱になります。 systemdの場合、systemctlバイナリはコントローラー(一般的に)のみです。 必要ありませんそれ自体では特権操作を実行しないため、root特権が必要です(ほとんどのユースケース)が、initに要求します。実際のrootアカウントを(直接またはSudo経由で)使用することは、オールオアナッシングのアトミック(爆弾)ソリューションですが、のみ必要なことは承認not:authenticatesystemdに対してsystemd承認polkitを理解するため、認証済みrootを使用することは許可されている権限が多すぎます。

systemctlのバグを考えてみましょう。これにより、(systemdを介さずに)任意のコマンドを直接呼び出すことができます。 root権限がSudoによって付与されている場合、EUID = 0で任意のコマンドを実行できます。 systemctlが非特権ユーザーとして実行されている場合、そのようなコマンドは、以前にアクセスを取得したアカウントでのみ実行できます。これは、いくつかの基本的なセキュリティルールの単純な結果です。

  • 必要な権限のセットのみを使用してください(完全なセットではありません== root)、
  • これらの権限を必要なコードにのみ付与します(systemdに権限を付与せずにsystemctlで承認します)。

マシンの唯一のユーザーであることに関しては、rootアカウントではなく、非特権アカウントを使用して作業している場合、実行するプログラムが不要なアクセス許可を取得するのを制限したいと思います。 systemctlアカウントがrootであるという理由だけでそれらをauthorizedに与えることは、systemdをコマンドするためのそのような余分な許可です。

さらに、polkitを使用すると、さまざまなアクション(開始/停止/再読み込み/その他)およびさまざまなサービスに対してさまざまなアクセス基準を設定できます。正確なコマンドをsudoersに入れることができますが、polkitソリューションはそのようなコマンドの特定の部分を認識しています。

結論:あまり特権のない方法が利用できる場合は、Sudoを使用しないでください。 Sudoは、オールオアナッシングのラストリゾートソリューションです。

パスワードプロンプトをグラフィックではなくテキストで表示したい場合は、 設定されていないDISPLAY、例: 認証エージェントを実行するグ​​ラフィカルセッションから端末のバインドを解除します。

0
Tomasz Pala