Как gnome перезагружается без прав root?

8

Я читаю книгу « Разработка ядра Linux» , в главе 5 «Реализация системных вызовов» на странице 77 написано

Например, способный (CAP_SYS_NICE) проверяет, имеет ли вызывающая сторона возможность изменять хорошие значения других процессов. По умолчанию суперпользователь обладает всеми возможностями, а не root не обладает всеми возможностями. Например, вот системный вызов reboot (). Обратите внимание, как его первый шаг - убедиться, что вызывающий процесс имеет 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
osdamv
источник
Может быть , это systemctl . Что ls -l /bin/systemctlтебе сказать?
G-Man говорит: «Восстанови Монику»

Ответы:

12

Это делается через менеджер авторизации, который называется polkit:

polkit предоставляет API авторизации, предназначенный для использования привилегированными программами («МЕХАНИЗМАМИ»), предлагающими обслуживание непривилегированным программам («СУБЪЕКТАМ»), часто посредством некоторой формы механизма межпроцессного взаимодействия.

С помощью systemdи polkitпользователи с не удаленным сеансом могут выдавать команды, связанные с питанием. Вы можете перечислить все polkitзарегистрированные действия и получить подробную информацию о любом из них с помощью pkaction(вызывается без аргументов, будут перечислены все идентификаторы действий).
В данном конкретном случае идентификатор действия таков, 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
don_crissti
источник
1
это означает, что любая программа, которую я запускаю, может перезагрузить мой компьютер без моего разрешения?
osdamv
1
@osdamv - как и любая другая программа, которую вы запускаете, rm -rfваши пользовательские файлы ...
don_crissti
3
@osdamv Обратите внимание , что вы можете запустить все программы , которые вы не доверяете , используя , sudo --user=jimmyгде пользователь jimmyделает не имеет права на выполнение этой команды polkit ...
Bakuriu
Как мне на самом деле запустить этот pkaction?
Джеремия
@ Джеремия - я не понимаю вопроса.
don_crissti