Arch Linuxでは、シャットダウン、一時停止などのデフォルトのPolkit権限は何ですか?なぜこれが起こるのですか?

Arch Linuxでは、シャットダウン、一時停止などのデフォルトのPolkit権限は何ですか?なぜこれが起こるのですか?

Arch Linuxでsystemdを使用すると、次のコマンドはすべてシンボリックリンクを指しますsystemctl

/usr/bin/telinit
/usr/bin/poweroff
/usr/bin/runlevel
/usr/bin/reboot
/usr/bin/halt
/usr/bin/shutdown

承認に関連する彼らの行動は混乱していると思います。

$ shutdown
Must be root.
$ halt
Must be root.
$ telinit 3
# Asks for Polkit authorization

承認poweroffまたはreboot承認は要求されません。poweroff実際にシステムをシャットダウンする代わりに、ノートブックはオンになっており、画面には無期限に電源が切れるというテキストが表示されます。

私はPolkitのルールを変更しませんでしたが、なぜそれがうまくいくのか疑問に思います。

  • すべてのコマンドはルートではなく管理者ですwheel
  • /etc/polkit-1/rules.dデフォルトのルールセットのみが含まれているようです。

    # tail /etc/polkit-1/rules.d/*
    // DO NOT EDIT THIS FILE, it will be overwritten on update
    //
    // Default rules for polkit
    //
    // See the polkit(8) man page for more information
    // about configuring polkit.
    
    polkit.addAdminRule(function(action, subject) {
        return ["unix-group:wheel"];
    });
    

慎重に見てみると、、部品があるのに/usr/share/polkit-1/actions/org.freedesktop.login1.policyyesに設定されています。しかし、そうではありません。これが理由であれば、なぜこれが起こりますか?poweroffrebootsuspendhibernateallow_activeshutdown

ベストアンサー1

これは非常に複雑です。これらのコマンドを列挙順に説明します。

  1. telinit

    さまざまなパラメータはtelinitさまざまな(他の)サブコマンドに直接変換されますsystemctl。 ~によるとリモート初期化(8)(systemd パッケージのドキュメント):

    2、3、4、5

    SysVランレベルを変更します。これはrunlevel2.target、...のアクティブ化要求に変換され、、...runlevel3.targetと同じです。systemctl isolate runlevel2.targetsystemctl isolate runlevel3.target

    したがって、これらのコマンドはに変換され、systemctl isolateそれ自体はpolkit操作によって制御されますorg.freedesktop.systemd1.manage-units。この操作に対する権限はデフォルトで管理者認証が必要- アクティブセッション、非アクティブセッション、およびセッション外のすべてのプロセスに適用されます。

    (しかし、デフォルトでは、polkitはwheelグループ内のすべてのユーザーを管理者として処理するように構成されているため、自分自身を認証するように求められます。)

  2. halt、、、poweroffreboot

    コマンドpoweroffrebootタスクは2つのステップで行われます。

    • root以外のユーザーとして呼び出され、logind利用可能な場合はlogind操作を実行するにはpolkit操作が必要ですorg.freedesktop.login1.*
    • そうでなければほぼ同等かsystemctl poweroff実行されてsystemctl rebootいるが、ポルケットに連絡する必要はありません

    halt似ていますが、常に2番目のパスに移動します(ほぼ同じですsystemctl halt)。ログインして停止する方法はありません。

    「ほぼ同じ」に注意してください。そうすれば

    • poweroffroot以外のログインで
    • rebootroot以外のログインで
    • haltルートでない場合、

    「ルートである必要があります」というメッセージが表示されます。 polkitを介して認証する代わりにorg.freedesktop.systemd1.manage-units。また、systemctl poweroffまたはを使用するとpolkitを介して認証systemctl rebootできsystemctl haltます。これはバグかもしれません。

  3. shutdown

    このツールは、遅延停止、一時停止、または再開をスケジュールするために使用できます。引数なしで呼び出すと、1分遅れを意味します。デフォルトの動作は電源を切ることです。 ~から閉じる(8):

    時間文字列は、時間/分を表す「hh:mm」形式であり、終了実行時間を指定し、24時間形式で指定されます。あるいは、今からmまでの特定の時間を表す「+ m」構文を使用することもできます。 「now」は即時終了をトリガーする「+0」のエイリアスです。時間パラメータが指定されていない場合は、「+ 1」が暗示されます。

    タイムアウトメッセージとウォールメッセージが指定されていない場合、または(#2を参照)のいずれかとshutdown同じです。poweroffhaltreboot

    タイムアウトまたはメッセージ月が指定されている場合は、shutdownroot 権限が必要です。

  4. poweroff終了しないでください

    実際にそうしなければなりません。これはカーネルのバグかもしれません。

おすすめ記事