
答え1
これは「sudo」プロンプトではなく、「polkit」プロンプトです。これを回避する方法の1つは、全てsystemctl だけでなくソフトウェアでも、アクションを即座に拒否する (または即座に許可する) polkit ルールを記述することが非常に重要です。
polkit.addRule(function(action, subject) {
if (subject.user !== "root") {
if (/^org\.freedesktop\.systemd1\./.test(action.id)) {
return polkit.Result.NO;
}
}
});
( subject.user
root によって呼び出されるアクションは polkit チェックを完全にバイパスするため、テストは省略できます。)
polkitルールは に保存され/etc/polkit/rules.d/*.rules
、通常は のように名前が付けられます80-custom.rules
(昇順で処理されます)。詳細については、ポルキット(8)。
(ただし、sudo設定がパスワードなしの場合、「sudo」を使用することとpolkitにすぐにアクションを許可させることの間に実質的なセキュリティ上の違いはありません。また、sudo必要パスワード... では、それを polkit ダイアログに入力すればいいのではないでしょうか。同じパスワードです。
答え2
オプションがあります--no-ask-password
。エイリアスを作成します。
alias systemctl='systemctl --no-ask-password'
(Bash、Kubuntu でテスト済み)。
答え3
systemctlにはsudoを使用しないでください。これまで; もし、あんたがはメンテナンスを許可し、polkit を適切にセットアップします。
根拠: は、sudo
要求されたユーザー(通常は )によって効果的に実行されるプログラムを作成しますroot
。リンクされたすべてのツールキットを含みます。プログラム、ライブラリ、または...sudo構成にバグがあると、脆弱になります。 の場合systemd
、systemctl
バイナリはコントローラ(一般的に)。それはではないは(ほとんどの使用例では)ルート権限を必要とします。これは、それ自体では特権操作を実行せず、 を要求するためですinit
。実際のroot
アカウント(直接または 経由sudo
)を使用することは、全か無かの原子爆弾の解決策ですが、のみ必要なのは、許可する(いいえ: 認証)に対してsystemd
systemd
理解してpolkit
いるので承認、使用認証済みroot
付与された権限が多すぎるだけです。
のバグを考えてみましょうsystemctl
。このバグにより、任意のコマンドを直接 ( 経由ではなくsystemd
) 呼び出すことができます。root
によって権限が付与されている場合sudo
、EUID=0 で任意のコマンドを実行できます。systemctl
権限のないユーザーとして実行する場合、そのようなコマンドは、以前にアクセスを取得したアカウントでのみ実行できます。これは、いくつかの基本的なセキュリティ ルールの単純な結果です。
- 必要な権限セットのみを使用する(完全なセットではない ==
root
)、 - これらの権限は、それを必要とするコードにのみ付与します (
systemd
に権限を付与せずにを承認しますsystemctl
)。
マシンの唯一のユーザーであることに関して言えば、特権のないアカウント (1 つではない) を使用して作業する場合、root
実行するプログラムが余分な権限を取得しないように制限する必要があると思います。アカウントがコマンドを実行するsystemctl
ためだけに権限を付与することは、そのような余分な権限です。root
authorized
systemd
さらに、 を使用すると、polkit
さまざまなアクション (開始/停止/リロードなど) やさまざまなサービスに対して、異なるアクセス基準を設定できます。 に正確なコマンドを入力することもできますsudoers
が、polkit ソリューションはそのようなコマンドの特定の部分を認識します。
結論sudo
:より権限の低い方法が利用できる場合は使用しないでください。sudo
これは、すべてまたは何もない最後の手段の解決策です。
パスワードプロンプトをグラフィックではなくテキストで表示したい場合は、DISPLAY の設定を解除します。例:認証エージェントを実行するグラフィカル セッションからターミナルをアンバインドします。