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 -r
mas remover #poweroff
#shutdown -P -H
opçõ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:
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 shutdown
para ser(whatever) -r