Исправьте меня, если я неправ. Когда мы пытаемся завершить работу или перезагрузить от терминала при помощи sudo init 0, sudo init 6 (или любая другая команда для той же цели) команды, которые мы должны быть корнем для выполнения, они определяют задачу, но когда мы делаем то же самое из Ubuntu (я предполагаю то же самое с большинством Рабочих столов), UI, это просто не просит у корневого разрешения ни одну из задач.
Какой добрый разговор/механизм происходит в стороне здесь?
Команда, используемая для выключения, использует dbus
. На самом деле команда shutdown имеет вид:
dbus-send --system --print-reply --dest=org.freedesktop.login1 /org/freedesktop/login1 "org.freedesktop.login1.Manager.PowerOff" boolean:true
Действительно, служба systemd-logind
отвечает за потери пользователей.
В дополнение к тому, что сказал @thomasrutter, действительно, systemd-logind
предоставляет пользователям доступ на основе PolicyKit к таким операциям, как выключение системы или спящий режим.
man systemd-logind
systemd-logind is a system service that manages user logins. It is
responsible for:
· Providing PolicyKit-based access for users to operations such as
system shutdown or sleep
Пожалуйста, посмотрите мой ответ https://askubuntu.com/a/632165/150504 .
Подобные вещи контролируются Polkit (его официальное название, но его часто называют прежним именем PolicyKit).
Этот инструмент облегчает некорневым пользователям возможность выполнять определенные действия с системой, которые в противном случае потребовали бы root, и завершение работы - это одно из действий, которые обычно настраиваются для предоставления обычным пользователям. Как это работает, пользовательское программное обеспечение вызывает определенный API-интерфейс Polkit с просьбой завершить работу, и Polkit проверит, имеет ли этот пользователь полномочия на выполнение этого действия, и, если это так, облегчает его. Polkit также может запрашивать аутентификацию через агента аутентификации, если у пользователя нет полномочий для выполнения этого действия.
Больше информации об архитектуре Polkit здесь:
http://manpages.ubuntu.com/manpages/precise/man8/polkit.8.html