Melhor maneira de remover o comando shutdown, mas continue reiniciando

Melhor maneira de remover o comando shutdown, mas continue reiniciando

Eu tenho um dispositivo do tipo raspi em um data center e, recentemente, acidentalmente colei um comando de desligamento no terminal errado da minha tela. Existe uma maneira de manter, shutdown -rmas remover #poweroff #shutdown -P -Hopções?

Eu quero manter shutdown -r o comando. Gosto de colocar um cronômetro se conseguir congelar o sistema ou me bloquear com regras da tabela de IP. exemploshutdown -r +10

Responder1

Você deveria estar usando uma distribuição Linux baseada em systemd. Neste caso, você deveria ser capaz demascararo alvo poweroff, para que o systemd se recuse a executá-lo (e desligue). por exemplo:

systemctl mask poweroff.target

Isso torna totalmente impossível desligar o sistema, a não ser pela reinicialização. Veja que nada acontece:

Demonstração animada do Debian9

Nesse caso, o botão liga / desliga virtual desta VM nem funciona mais para desligar o sistema. Mas ainda reinicia perfeitamente bem.

Para desfazer a mudança, é claro, basta desmascarar o alvo. Então você pode desligar o sistema.

systemctl unmask poweroff.target

Responder2

Existem algumas maneiras de conseguir isso. Alguém estaria trabalhando com uma conta normal sem privilégios, o que exigiria a execução do comando com sudo e a inserção de uma senha. Então você pode anexar o seguinte ao /etc/sudoers (executando visudo):

## user is allowed to execute reboot -r only
jdoe ALL=NOPASSWD: /sbin/shutdown -r *

Além disso, para desabilitar o cache de credenciais do sudo, adicione também o seguinte:

Defaults timestamp_timeout=0

Isso impedirá o cache de credenciais caso você tenha invocado um comando com sudo antes.

Exemplo:

[root@ops ~]# su - jdoe
[jdoe@ops ~]$ sudo shutdown -c
[sudo] password for jdoe:
[jdoe@ops ~]$ sudo shutdown -r +10
Shutdown scheduled for Mon 2018-09-03 18:51:13 IDT, use 'shutdown -c' to cancel.
[jdoe@ops ~]$ sudo shutdown -H
[sudo] password for jdoe:
^[[A[jdoe@ops ~]$ sudo shutdown -c
[sudo] password for jdoe:

Observe como no exemplo acima não fui obrigado a digitar minha senha durante a execução sudo shutdown -r +10, mas no resto eu fui. Se você quiser eliminar a necessidade de digitar sudo antes do comando ( sudo shutdown -r +10), adicione o seguinte ao seu .bash_profile ou .bashrc:

alias shutdown="sudo shutdown"

Exemplo:

[jdoe@ops ~]$ source ~/.bash_profile
[jdoe@ops ~]$ shutdown -r +10
Shutdown scheduled for Mon 2018-09-03 19:03:14 IDT, use 'shutdown -c' to cancel.
[jdoe@ops ~]$ shutdown -c
[sudo] password for jdoe:

Observe que é uma prática recomendada trabalhar com uma conta sem privilégios e escalar com sudo quando necessário.

Responder3

Existe uma ferramenta chamadamolly-guardaisso exige que você indique o nome do host da máquina que deseja desligar ou reinicializar.

Caso você não esteja usando Debian, deve ser trivial compilar isso a partir do código-fonte, visto que o programa é bastante primitivo.

Responder4

Renomeie o executável de desligamento para algo impossível de invocar acidentalmente.

Então alias shutdownpara ser(whatever) -r

informação relacionada