Linuxカーネル開発の本を読んでいます。第5章「システムコールの実装」77ページにあります
たとえば、capable(CAP_SYS_NICE)は、呼び出し元が他のプロセスの適切な値を変更する
機能を持っているかどうかをチェックします。デフォルトでは、
スーパーユーザーはすべての機能を所有し、非ルートは何も所有していません。
例として、reboot()システムコールを示します。その最初のステップが
呼び出しプロセスにCAP_SYS_REBOOTがあることを確認する方法に注意してください。その1つの
条件文が削除された場合、どのプロセスでも
システムを再起動できます。
ただし、Debian Sidでは、gnomeを使用するか、sudoまたはsuを使用せずに/ sbin / restartを実行することで、マシンを再起動できます。
これはどのように可能ですか?
たぶんsystemctlで?
ls -l /sbin/reboot
lrwxrwxrwx 1 root root 14 Jun 28 04:23 /sbin/reboot -> /bin/systemctl
編集:私のユーザーグループ
[[email protected]:~]$ groups
damian sudo wireshark bumblebee
編集2:systemctlパーミッション
[[email protected]:~]$ ls -l /bin/systemctl
-rwxr-xr-x 1 root root 626640 Jun 28 04:23 /bin/systemctl
承認された回答:
これは、polkit
と呼ばれる承認マネージャーを介して行われます。 :
polkitは、特権プログラム( "MECHANISMS")が非特権プログラム
( "SUBJECTS")にサービスを提供することを目的とした承認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
Active=yes