Desativando o comando de desligamento para todos os usuários, mesmo as conseqüências raiz?

10

Eu gostaria de desabilitar o comando shutdown para todos os usuários, mesmo o root, em uma instalação do Ubuntu Server.

A razão pela qual eu quero fazer isso é garantir que eu não tenha o hábito de desligar a máquina dessa maneira, como eu SSH em muitas máquinas de produção ao mesmo tempo que esta, e eu não quer desligar acidentalmente uma das outras máquinas digitando o comando na janela errada.

O servidor que eu quero desabilita o shutdown somente em execuções dentro do VirtualBox na minha área de trabalho do Windows, e eu só o uso para testes locais, então não é um problema se eu não puder desligá-lo da linha de comando.

Eu já diminuí um pouco o problema, garantindo que eu tenha uma senha diferente na imagem do VirtualBox, mas obviamente, se eu estiver na janela sudo 'em uma das máquinas de produção, eu ainda posso desligá-la acidentalmente .

Minhas perguntas são:

  1. Como desativo o comando de desligamento?
  2. Se eu desabilitar o comando de desligamento, há alguma consequência que eu deva ter conhecimento? Mais especificamente, desativará o suporte para o encerramento da ACPI que é o equivalente a pressionar o botão liga / desliga em uma máquina física? Isso poderia afetar outros aplicativos genéricos?

Para informações, eu apenas uso essa imagem do VirtualBox para testar scripts de shell, executando Tomcat e Java, e esse tipo de coisa.

    
por Rich 13.12.2010 / 10:08

6 respostas

2

Se você costuma executar o comando como sudo shutdown , em vez de sudo /sbin/shutdown , você pode simplesmente configurar um alias de shell global para "shutdown" para apenas fazer eco de uma mensagem ao terminal. O executável real ainda estará lá para todos os outros propósitos.

    
por Dave Jennings 13.12.2010 / 14:29
12

Uma abordagem muito melhor para esse problema é instalar o molly-guard programa nas caixas que você não quer desligar, em vez de tentar se treinar para nunca executar o desligamento.

  

O molly-guard tenta impedir que você desligue ou reinicialize acidentalmente as máquinas. Ele faz isso injetando algumas verificações antes dos comandos existentes: interromper, reinicializar, desligar e desligar.

A configuração típica é que ele pede para você digitar o nome do host da máquina para confirmar que você está realmente certo.

É possível adicionar novos scripts a /etc/molly-guard/run.d (conforme documentado no manpage , os arquivos de script devem seguir a nomenclatura esperada por run-parts .

Se você realmente quiser desabilitar shutdown (e essa é uma ideia tão bizarra), faça

chmod 0 /sbin/shutdown

então, se você precisar usá-lo, volte para 0755.

    
por poolie 14.12.2010 / 01:01
1

Para desativar o comando shutdown, torne o binário não executável, por exemplo, sudo chmod a-x /sbin/shutdown Também eu não acho que ele irá afetar qualquer outro método de desligamento porque como a entrada do homem para desligamento diz

  

o desligamento envia uma solicitação para o init   daemon para trazer o sistema para baixo   o nível de execução apropriado

para que qualquer outro comando / script possa fazer isso mesmo depois de desabilitar o comando shutdown, por exemplo, eu ainda posso desligar meu sistema usando o desligamento do menu GNOME. Além disso, você ainda pode reinicializar seu computador a partir da linha de comando usando o comando reboot

    
por binW 13.12.2010 / 10:29
1

O comando shutdown está em /sbin/shutdown . Você pode desativá-lo fazendo isso:

sudo mv /sbin/shutdown /sbin/really-do-shutdown

Mas : Isso significa que quase nenhum dos métodos usuais de desligar o sistema funcionará por mais tempo. Desligar o gnome na minha máquina de teste para esta resposta faz com que você simplesmente efetue o logout e retorne ao GDM.

Se você quiser desligar seu sistema depois, você precisa fazer

sudo init 0

O desligamento "Desativando" afeta todos os aplicativos que usam o comando para qualquer coisa. Como init 0 não é a maneira recomendada de desligar um sistema, todos os programas que precisam desligar o sistema usam shutdown para ele, o que não funcionará mais.

  • Os aplicativos também podem gerar exceções devido ao arquivo ausente ou ao arquivo que não é não executável , o que pode causar falhas, mesmo que o desligamento não seja necessário. Este é um caso extremo que você pode contornar movendo algum arquivo binário, idealmente executável (não um shell script - que não funcionará) em seu lugar. Por exemplo:

    sudo cp /bin/ps /sbin/shutdown
    

    Isso é depois que você moveu o original para fora do caminho com segurança.

Agora, tudo isso é bastante hacky, e eu recomendo contra ele , pelas razões expostas no comentário de João Pinto. Mas eu não vou impedi-lo de fazer isso. : -)

Não apenas faça um backup do / sbin / shutdown, também, tenha um plano de recuperação no lugar, caso isso cause algum problema. Não faça isso em um servidor que você não pode acessar, por exemplo. E teste seu plano de recuperação de antemão, supondo que o sistema não inicialize (ele irá inicializar, é claro - eu testei - mas por favor esteja no lado seguro).

    
por Stefano Palazzo 13.12.2010 / 10:36
0

Acho que deveria ser uma outra solução, os servidores devem ter uma política ssh para desativar o desligamento e o init 0 sobre o ssh, ou deve haver um diálogo especial exibido no console como no Windows para digitar o "porquê" e "senha de desligamento" especial. Para isso, o botão de energia deve ser protegido por senha no uso do servidor.

No momento, usamos um "interruptor de chave física = 4Euros" em vez de um botão de pressão.

    
por user12646 19.03.2011 / 07:19
0

Eu quero desabilitar o comando shutdown .

  

cp / sbin / shutdown / sbin / desligamento-backup

     

rm / sbin / shutdown

isto porque, se alguém tentar forçar o uso desse comando, ele também não poderá

agora ninguém poderá usar o comando shutdown.

exibirá um comando de mensagem não encontrado, instale-o.

  

vim /etc/bash.bashrc

Adicione uma linha no último do bash.bashrc

  

alias shutdown="echo 'Você não tem permissão para usar este comando'"

se você quiser de volta (ativado). basta copiá-lo de volta

  

cp / sbin / desligamento-backup / sbin / desligamento

    
por Dishank Jindal 28.07.2014 / 09:55