root権限なしでGNOMEを再起動するには?

root権限なしでGNOMEを再起動するには?

本を読んでいますLinuxカーネルの開発77ページの第5章「システムコールの実装」で説明しました。

たとえば、Capable(CAP_SYS_NICE)は、呼び出し元が他のプロセスのnice値を変更できるかどうかを確認します。デフォルトでは、スーパーユーザーはすべての機能を持ち、root以外の人は何もしません。たとえば、ここで再起動()システムコールがあります。最初のステップは、呼び出しプロセスにCAP_SYS_REBOOTがあることを確認することです。条件文を削除すると、すべてのプロセスがシステムを再起動できます。

しかし、私のDebian Sidでは、gnomeを使用するか、/sbin/rebootを実行してsudoやsuなしでコンピュータを再起動できます。どうやってこれができますか?

systemctlを使用しますか?

ls -l /sbin/reboot 
lrwxrwxrwx 1 root root 14 Jun 28 04:23 /sbin/reboot -> /bin/systemctl

編集:私のユーザーグループ

[damian@xvz:~]$ groups 
damian sudo wireshark bumblebee

編集2:systemctl権限

[damian@xvz:~]$ ls -l /bin/systemctl 
-rwxr-xr-x 1 root root 626640 Jun 28 04:23 /bin/systemctl

ベストアンサー1

これは、次の承認マネージャを介して行われます。polkit:

polkitは、特権プログラム(「メカニズム」)で使用するための認証APIを提供し、通常はプロセス間通信メカニズムの形で無許可プログラム(「サブジェクト」)を提供します。

リモートセッションではないユーザーは、電源関連コマンドを実行できますsystemd。登録されているpolkitすべてのジョブを一覧表示polkitし、それらの詳細を取得できますpkaction(引数なしで呼び出すと、すべてのジョブIDが一覧表示されます)。この特別な場合に次のジョブを実行すると、
ジョブIDは次のようになります。org.freedesktop.login1.reboot

pkaction --action-id org.freedesktop.login1.reboot --verbose

出力は次のようになります。

org.freedesktop.login1.reboot:
  description:       Reboot the system
  message:           Authentication is required for rebooting the system.
  vendor:            The systemd Project
  vendor_url:        http://www.freedesktop.org/wiki/Software/systemd
  icon:              
  implicit any:      auth_admin_keep
  implicit inactive: auth_admin_keep
  implicit active:   yes

ここではactive: yes、アクティブセッションのユーザーにシステムを再起動する権限があることを示します(暗黙的な許可の詳細については、ページを参照polkit)。次のことで、セッションがアクティブであることを確認できます。

loginctl show-session $XDG_SESSION_ID --property=アクティブ
Active=yes

おすすめ記事