Я читаю книгу « Разработка ядра 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
systemctl
. Чтоls -l /bin/systemctl
тебе сказать?Ответы:
Это делается через менеджер авторизации, который называется
polkit
:С помощью
systemd
иpolkit
пользователи с не удаленным сеансом могут выдавать команды, связанные с питанием. Вы можете перечислить всеpolkit
зарегистрированные действия и получить подробную информацию о любом из них с помощьюpkaction
(вызывается без аргументов, будут перечислены все идентификаторы действий).В данном конкретном случае идентификатор действия таков,
org.freedesktop.login1.reboot
если вы запустите:вывод должен быть что-то вроде:
Здесь
active: yes
означает, что пользователь в активном сеансе авторизован для перезагрузки системы (подробности о неявных авторизациях наpolkit
странице). Вы можете проверить, активен ли ваш сеанс с:источник
rm -rf
ваши пользовательские файлы ...sudo --user=jimmy
где пользовательjimmy
делает не имеет права на выполнение этой команды polkit ...