Como desativar o desligamento / reinicialização / suspensão / hibernação?

12

Eu tenho um PC desktop Ubuntu 10.04 LTS com GNOME.

Como posso desativar completamente as funções de reinicialização / desligamento / suspensão / hibernação no GNOME ou mesmo com o root? Para que o root dê o comando "reboot" ou "pm-suspend", ele não faz nada e a máquina continua. Como posso desativar completamente esses "recursos" básicos?

LanceBaynes
fonte
Não sei? Como um quiosque? você acabou de remover shutdowne pm-suspendde /sbin/e/bin/
Amith KK
Esses arquivos podem estar em cache, não? Removê-los desabilitará permanentemente a função de reinicialização / desligamento / suspensão / hibernação, mesmo no GNOME?
precisa saber é o seguinte
Sim, provavelmente faria isso @Lance Baynes
Amith KK

Respostas:

15

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 consolekitrestrinja 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.pklacontendo 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 rootacesso 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.pklafunciona:

[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?

James Henstridge
fonte
3
Parou de trabalhar aqui com o Ubuntu 13.10 !!!
GabrieleV
@GabrieleV Talvez a versão com login1 funcione na 13.10? Eu testei no 14.04 - e espero que ninguém na Canonical quebre a compatibilidade com versões anteriores no polkit em todos os lançamentos por diversão.
reduzindo a atividade
Como outro ponto de dados, eu apenas usei isso com sucesso no novo Ubuntu 18.04.1 LTS, para impedir o desligamento e a reinicialização (mas permitir a hibernação e a suspensão). Observe que eu precisava usar esses nomes de 'login1'; que eu também desabilitei 'halt' e 'halt-multiple-sessions'; que fiz isso porque encontrei essas ações em /usr/share/polkit-1/actions/org.freedesktop.login1.policy; e, finalmente, que na interface do usuário gdm3 do Ubuntu 18.04, os botões na caixa de diálogo de confirmação não estão ocultos, mas simplesmente não têm efeito.
MarnixKlooster ReinstateMonica
6

Considere instalar o molly-guard .

sudo apt-get install molly-guard

Este pacote evitará o desligamento / reinicialização / suspensão / hibernação não intencional, solicitando interativamente que você digite o nome do host do sistema.

No entanto, é trivial configurar o molly-guard para desativar completamente o shutdown / reboot / suspend / hibernate. Basta criar um arquivo executável em /etc/molly-guard/run.d/99-prevent-all que contenha isso:

#!/bin/sh
exit 1

Observe que ele protege apenas contra comandos emitidos pela linha de comando, o desligamento / reinicialização / suspensão / hibernação emitido pela GUI está ignorando-o. Para bloquear também a GUI usando a reinicialização, pode-se usar regras polkit .

Dustin Kirkland
fonte
Essa é uma boa solução para um computador com vários usuários em que o administrador precisa trabalhar e impedir que todos os outros usuários sejam desligados por um tempo.
Alexis Wilke
1
Funciona a partir do console, mas mesmo com o molly-guard no lugar (e definido como 'sempre perguntar'), o desligamento prossegue sem perguntar ao iniciá-lo no GNOME (3.4).
Janeiro
Sim, isso não está mais funcionando ... Desde 13.10, talvez 13.04.
Alexis Wilke
3

ATENÇÃO! Os comandos listados aqui são perigosos de usar. Não os utilize exceto por seu próprio risco!

chmod -x /usr/sbin/pm-suspend
chmod -x /sbin/reboot
chmod -x /sbin/shutdown
LanceBaynes
fonte
4
Você pode comprovar sua resposta? Eu certamente não acho que ele queria eliminar as possibilidades de reiniciar e desligar.
viyyer
Como alguém poderia reativar a hibernação dessa maneira?
Gabriel Fair
use "chmod + x" não "chmod -x"
LanceBaynes 6/12/12
5
Atenção! Não faça isso Esses comandos estão vinculados /bin/systemctle removerão o bit executável dele. Este é um executável crítico que também controla service SERVICE_NAME [stop|start|restart]. Provavelmente seu sistema não inicializará mais (se você conseguir desligá-lo).
Daniel F
Eu executei esses comandos em um ubuntu VPS. Encerre o VPS do host, o encerramento falhou. Ele matou o daemon SSH. Força parou e começou, pode SSH em muito bem. Após o reinício /bin/systemctlestá definido para leitura e escrita única-rw-r--r-- 1 root root
Kryo
0

Com base na resposta do OP, você pode fazer

for file in $(/sbin/shutdown /sbin/reboot /usr/sbin/pm-suspend); do
    mv $file $file.bak && touch $file
done

Isso renomeia os links simbólicos e os substitui por arquivos em branco. Isso impedirá o desligamento da linha de comando; não sei se os comandos da GUI o chamam ou fazem suas próprias coisas; assim, você pode ter que fazer a resposta aceita também.

speedstyle
fonte