私の質問は、Sudoと入力するのを忘れたときに、この迷惑なポップアップを開かないようにsystemd(?)を構成するにはどうすればよいですか。テキストベースのSudoプロンプトを表示するか、エラーを表示するだけで、間違いをすばやく修正できます。
これは最新のArchLinux(systemd 238.133)です。
これは「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ダイアログに入力してみませんか?同じパスワードです。)
オプションがあります--no-ask-password
。エイリアスを作成します。
alias systemctl='systemctl --no-ask-password'
(Bash、Kubuntuでテスト済み)。
SystemctlにSudoを使用しないでくださいever; areメンテナンスを許可されている場合は、polkitを適切に設定してください。
Rationale:Sudo
は、要求されたユーザー(通常:root
)によって効果的に実行されるプログラムを作成します。リンクされているすべてのツールキットを含みます。プログラム、ライブラリ、または... Sudo構成にバグがあると、脆弱になります。 systemd
の場合、systemctl
バイナリはコントローラー(一般的に)のみです。 必要ありませんそれ自体では特権操作を実行しないため、root特権が必要です(ほとんどのユースケース)が、init
に要求します。実際のroot
アカウントを(直接またはSudo
経由で)使用することは、オールオアナッシングのアトミック(爆弾)ソリューションですが、のみ必要なことは承認 (not:authenticate)systemd
に対して。 systemd
は承認のpolkit
を理解するため、認証済みroot
を使用することは許可されている権限が多すぎます。
systemctl
のバグを考えてみましょう。これにより、(systemd
を介さずに)任意のコマンドを直接呼び出すことができます。 root
権限がSudo
によって付与されている場合、EUID = 0で任意のコマンドを実行できます。 systemctl
が非特権ユーザーとして実行されている場合、そのようなコマンドは、以前にアクセスを取得したアカウントでのみ実行できます。これは、いくつかの基本的なセキュリティルールの単純な結果です。
root
)、systemd
に権限を付与せずにsystemctl
で承認します)。マシンの唯一のユーザーであることに関しては、root
アカウントではなく、非特権アカウントを使用して作業している場合、実行するプログラムが不要なアクセス許可を取得するのを制限したいと思います。 systemctl
アカウントがroot
であるという理由だけでそれらをauthorized
に与えることは、systemd
をコマンドするためのそのような余分な許可です。
さらに、polkit
を使用すると、さまざまなアクション(開始/停止/再読み込み/その他)およびさまざまなサービスに対してさまざまなアクセス基準を設定できます。正確なコマンドをsudoers
に入れることができますが、polkitソリューションはそのようなコマンドの特定の部分を認識しています。
結論:あまり特権のない方法が利用できる場合は、Sudo
を使用しないでください。 Sudo
は、オールオアナッシングのラストリゾートソリューションです。
パスワードプロンプトをグラフィックではなくテキストで表示したい場合は、 設定されていないDISPLAY、例: 認証エージェントを実行するグラフィカルセッションから端末のバインドを解除します。