Desativando o comando shutdown para todos os usuários, mesmo as consequências raiz?

11

Gostaria de desativar o shutdowncomando para todos os usuários, mesmo 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, pois eu SSH em muitas máquinas de produção ao mesmo tempo que esta, e eu não deseja desligar acidentalmente uma das outras máquinas digitando o comando na janela errada.

O servidor que eu quero desativar o desligamento é executado apenas dentro do VirtualBox na área de trabalho do Windows, e eu o uso apenas para testes locais, para que não seja um problema se não puder desligá-lo na linha de comando.

Eu já atenuei um pouco o problema, garantindo uma senha diferente na imagem do VirtualBox, mas, obviamente, se eu estiver dentro da sudo'janela' de uma das máquinas de produção, eu ainda poderia desligá-lo acidentalmente.

Minhas perguntas são:

  1. Como desabilito o comando shutdown?
  2. Se eu desabilitar o comando shutdown, há alguma conseqüência que eu deva tomar conhecimento? Mais especificamente, desabilitará o suporte ao desligamento da ACPI equivalente a pressionar o botão liga / desliga em uma máquina física? Isso poderia afetar outros aplicativos genéricos?

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

Rico
fonte
2
Na minha opinião, mudar um comportamento tão central do sistema para evitar erros humanos é uma má idéia. É provável que traga mais problemas a longo prazo do que resolve. Se você mantiver uma senha de usuário diferente para cada sistema, minimizará o risco (já que isso requer sudo). Você deve desenvolver bons hábitos que não dependem de uma alteração específica do sistema, desastres muito mais sérios são freqüentemente causados ​​com rm / cp / chmod, que são usados ​​com muito mais frequência, e acho que você não os desabilitará.
João Pinto
Embora eu concorde com isso, e seja definitivamente o caminho certo para fazer as coisas, isso é apenas para evitar que uma situação minúscula crie uma imagem não oficial do Ubuntu que eu tenho no meu desktop para permitir que eu experimente as coisas sem o risco de b0rking as máquinas dos meus empregadores :)
Rich

Respostas:

3

Se você geralmente executa o comando como sudo shutdown, em vez de sudo /sbin/shutdown, pode configurar um alias de shell global para "shutdown" para ecoar apenas uma mensagem no terminal. O executável real ainda estará lá para todos os outros fins.

Dave Jennings
fonte
Parece o melhor caminho a seguir, se você está apenas tentando interromper um hábito.
ændrük
2
Mas observe que a maneira óbvia de configurar um apelido de shell ( alias shutdown=sl) não terá nenhum efeito nos argumentos do sudo. No zsh, você pode definir aliases que correspondem a argumentos, mas acho que não no bash. Você pode usar sudoum alias para um script de shell que se recusa a fazer qualquer coisa se o primeiro argumento for shutdown.
poolie 23/03
2
Em outras palavras, isso realmente não funciona.
poolieby
14

Uma abordagem muito melhor para este problema é instalar o Molly-guarda programa sobre as caixas que você não quer desligar, ao invés de tentar treinar-se para não correr o desligamento.

O Molly-Guard tenta impedir que você desligue ou reinicie acidentalmente as máquinas. Isso é feito injetando algumas verificações antes dos comandos existentes: parada, reinicialização, desligamento e desligamento.

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

É possível adicionar novos scripts /etc/molly-guard/run.d(conforme documentado na página de manual , os arquivos de script devem seguir os nomes esperados por run-parts.

Se você realmente deseja desativar shutdown(e essa é uma idéia tão bizarra), basta

chmod 0 /sbin/shutdown

então, se você precisar usá-lo, faça o chmod de volta para 0755.

poolie
fonte
Uma ótima idéia, mas infelizmente não é possível, pois não tenho controle suficiente sobre os sistemas para poder instalar meu próprio software. Infelizmente eu tenho controle suficiente para poder desligá-los!
Rich
4
Você está falando sério? Isso é muito estranho. Se você tiver acesso ao sudo para executar apenas o desligamento, talvez possa convencer as pessoas a mudar o sudo para emitir um prompt grande ou sempre exigir uma senha. Se houver o risco de você desligá-los acidentalmente, seria do interesse dos administradores instalar o molly-guard.
Pool #
1

Para desativar o comando shutdown, apenas torne o binário não executável, ou seja, sudo chmod a-x /sbin/shutdown também não acho que ele afetará qualquer outro método de desligamento, porque, como diz a entrada man

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

portanto, qualquer outro comando / script pode fazer isso mesmo depois de desativar o comando shutdown, por exemplo, ainda posso desligar meu sistema usando o shutdown no menu GNOME. Além disso, você ainda pode reiniciar o computador a partir da linha de comando usando o comando reboot

binW
fonte
1

O shutdowncomando está em /sbin/shutdown. Você pode desativá-lo fazendo o seguinte:

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

Mas : isso significa que quase nenhum dos métodos usuais de desligamento do sistema funcionará mais. Desligar o gnome na minha máquina de teste para obter esta resposta faz com que você saia do sistema e o retorne ao GDM.

Se você deseja desligar o sistema posteriormente, precisará fazer

sudo init 0

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

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

    sudo cp /bin/ps /sbin/shutdown
    

    Isso ocorre depois que você removeu o original do caminho com segurança.

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

Não faça apenas backup de / sbin / shutdown, também tenha um plano de recuperação em vigor, caso isso cause algum problema. Não faça isso em um servidor que você não pode acessar, por exemplo. E testar seu plano de recuperação de antemão, assumindo que o sistema não inicializar em tudo (ele será inicializado, é claro - Eu testei isso - mas por favor estar no lado seguro).

Stefano Palazzo
fonte
0

Eu acho que deve 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 uma caixa de diálogo especial exibida no console, como no Windows, para inserir a senha de desligamento "por que" e a "senha de desligamento especial" . Para isso, o botão liga / desliga deve ser protegido por senha no uso do servidor.

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


fonte
0

Eu você deseja desativar o shutdowncomando.

cp / sbin / shutdown / sbin / shutdown-backup

rm / sbin / shutdown

Isso ocorre porque, se alguém tentar usar esse comando com força, ele também não poderá

agora ninguém será capaz de usar o comando shutdown.

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

vim /etc/bash.bashrc

Adicione uma linha no último bash.bashrc

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

se você quiser de volta (ativado). apenas copie de volta

cp / sbin / backup de desligamento / sbin / shutdown

Dishank Jindal
fonte