Доступ користувачів до цих дій контролюється polkit. Зокрема, вони відповідають наступним діям:
org.freedesktop.consolekit.system.stop
org.freedesktop.consolekit.system.restart
org.freedesktop.upower.suspend
org.freedesktop.upower.hibernate
Усі ці дії за замовчуванням дозволені для активних місцевих користувачів (хоча consolekit
надалі обмежує перші два дозволи працювати лише тоді, коли в систему входить один користувач).
Якщо ви хочете відключити ці дії, створіть файл, /etc/polkit-1/50-local.d/disable-shutdown.pkla
що містить щось на зразок:
[Disable shutdown/whatever]
Identity=unix-user:*
Action=org.freedesktop.consolekit.system.stop;org.freedesktop.consolekit.system.restart;org.freedesktop.upower.suspend;org.freedesktop.upower.hibernate
ResultAny=no
ResultInactive=no
ResultActive=no
Це повинно запобігти завершенню цих дій. Більше інформації про ці файли політики можна знайти, запустивши man pklocalauthority
.
Якщо ви намагаєтесь обмежити root
, це буде лише незначною незручністю. За визначенням, root
це необмежений обліковий запис відповідно до традиційної дискреційної системи контролю доступу UNIX. Якщо ви не можете довіряти користувачам, яким ви отримали повний root
доступ, то у вас виникають більші проблеми, ніж їх просто вимкнення системи.
Зауважте, що в пізніших версіях Ubuntu хтось вирішив порушити сумісність. Як відповів у розділі Як відключити відключення / перезавантаження з lightdm у 14.04? дія, схоже, змінилася на "org.freedesktop. login1 .reboot" (і подібне).
Наприклад, у 14.04 додавання наступних рядків як /etc/polkit-1/localauthority/50-local.d/restrict-login-powermgmt.pkla
робіт:
[Disable lightdm PowerMgmt]
Identity=unix-user:*
Action=org.freedesktop.login1.reboot;org.freedesktop.login1.reboot-multiple-sessions;org.freedesktop.login1.power-off;org.freedesktop.login1.power-off-multiple-sessions;org.freedesktop.login1.suspend;org.freedesktop.login1.suspend-multiple-sessions;org.freedesktop.login1.hibernate;org.freedesktop.login1.hibernate-multiple-sessions
ResultAny=no
ResultInactive=no
ResultActive=no
Крім того, зауважте, що цей метод блокує виключно перезавантаження / тощо команди, видані з GUI. Для блокування команд перезавантаження / тощо з командного рядка можна використовувати molly-guard - як пояснено в команді "Відключення команди відключення" для всіх користувачів, навіть root - наслідки?
shutdown
іpm-suspend
з/sbin/
і/bin/