O acesso do usuário a essas ações é controlado pelo polkit. Em particular, eles correspondem às seguintes ações:
org.freedesktop.consolekit.system.stop
org.freedesktop.consolekit.system.restart
org.freedesktop.upower.suspend
org.freedesktop.upower.hibernate
Todas essas ações são permitidas por padrão para usuários locais ativos (embora consolekit
restrinja ainda mais as duas primeiras permissões para que funcionem apenas quando houver um único usuário conectado ao sistema).
Se você deseja desativar essas ações, crie um arquivo /etc/polkit-1/50-local.d/disable-shutdown.pkla
contendo algo como:
[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
Isso deve impedir que essas ações sejam concluídas. Mais informações sobre esses arquivos de políticas podem ser encontradas executando man pklocalauthority
.
Se você estiver tentando restringir root
, isso será apenas um pequeno inconveniente. Por definição, root
é uma conta irrestrita de acordo com o sistema de controle de acesso discricionário tradicional do UNIX. Se você não pode confiar nos usuários aos quais concedeu root
acesso total , terá problemas maiores do que apenas desligar o sistema.
Observe que nas versões posteriores do Ubuntu alguém decidiu quebrar a compatibilidade. Conforme respondido em Como desativar o desligamento / reinicialização do lightdm no 14.04? a ação parece ter sido alterada para "org.freedesktop. login1 .reboot" (e similares).
Por exemplo, no 14.04, adicionar as seguintes linhas como /etc/polkit-1/localauthority/50-local.d/restrict-login-powermgmt.pkla
funciona:
[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
Além disso, observe que este método bloqueia apenas os comandos / etc / reboot emitidos a partir da GUI. Para bloquear os comandos reboot / etc da linha de comando, pode-se usar o molly-guard - como explicado em Desativando o comando shutdown para todos os usuários, mesmo que raiz - consequências?
shutdown
epm-suspend
de/sbin/
e/bin/