Dostęp użytkowników do tych akcji jest kontrolowany przez polkit. W szczególności odpowiadają one następującym działaniom:
org.freedesktop.consolekit.system.stop
org.freedesktop.consolekit.system.restart
org.freedesktop.upower.suspend
org.freedesktop.upower.hibernate
Wszystkie te akcje są domyślnie dozwolone dla aktywnych użytkowników lokalnych (chociaż consolekit
dodatkowo ogranicza pierwsze dwa uprawnienia do działania tylko wtedy, gdy w systemie zalogowany jest pojedynczy użytkownik).
Jeśli chcesz wyłączyć te akcje, utwórz plik /etc/polkit-1/50-local.d/disable-shutdown.pkla
zawierający coś takiego:
[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
Powinno to uniemożliwić wykonanie tych działań. Więcej informacji na temat tych plików zasad można znaleźć, uruchamiając man pklocalauthority
.
Jeśli jednak próbujesz ograniczyć root
, będzie to tylko niewielka niedogodność. Z definicji root
jest to konto nieograniczone zgodnie z tradycyjnym systemem uznaniowego systemu kontroli dostępu UNIX. Jeśli nie możesz ufać użytkownikom, do których masz pełny root
dostęp, masz większe problemy niż tylko zamykanie systemu.
Zauważ, że w późniejszych wersjach Ubuntu ktoś postanowił zerwać kompatybilność. Jak odpowiedziano w Jak wyłączyć zamykanie / restart z lightdm w 14.04? wydaje się, że akcja zmieniła się na „org.freedesktop. login1 .reboot” (i tym podobne).
Na przykład w 14.04 dodając następujące wiersze jako /etc/polkit-1/localauthority/50-local.d/restrict-login-powermgmt.pkla
działa:
[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
Dodatkowo zauważ, że ta metoda blokuje wyłącznie polecenia restartu / etc wydane z GUI. Aby zablokować polecenia restartu / etc z linii poleceń, można użyć funkcji Molly-Guard - jak wyjaśniono w Wyłączanie polecenia zamknięcia dla wszystkich użytkowników, a nawet konsekwencji root?
shutdown
ipm-suspend
od/sbin/
a/bin/