La mejor manera de eliminar el comando de apagado, pero seguir reiniciando

La mejor manera de eliminar el comando de apagado, pero seguir reiniciando

Tengo un dispositivo tipo raspi en un centro de datos y recientemente accidentalmente toqué y pegué un comando de apagado en el terminal equivocado de mi pantalla. ¿Hay alguna manera de conservar shutdown -rpero eliminar #poweroff #shutdown -P -Hopciones?

Quiero mantener shutdown -r el mando. Me gusta ponerle un temporizador si logro congelar el sistema o bloquearme con las reglas de la tabla de IP. ejemploshutdown -r +10

Respuesta1

Deberías utilizar una distribución de Linux basada en systemd. En este caso, debería podermascarillael objetivo de apagado, de modo que systemd se negará a ejecutarlo (y se apagará). p.ej:

systemctl mask poweroff.target

Esto hace que sea completamente imposible apagar el sistema, salvo reiniciando. Mira que no pasa nada:

Demostración animada de Debian9

En este caso, el interruptor de encendido virtual de esta VM ya ni siquiera funciona para apagar el sistema. Pero aun así se reinicia perfectamente.

Para deshacer el cambio, por supuesto, simplemente desenmascare el objetivo. Entonces puedes apagar el sistema.

systemctl unmask poweroff.target

Respuesta2

Hay algunas maneras de lograr esto. Se trabajaría con una cuenta normal sin privilegios, lo que requerirá ejecutar el comando con sudo e ingresar una contraseña. Luego puede agregar lo siguiente a /etc/sudoers (ejecutando visudo):

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

Además, para deshabilitar el almacenamiento en caché de credenciales de sudo, agregue también lo siguiente:

Defaults timestamp_timeout=0

Esto evitará el almacenamiento en caché de credenciales en caso de que haya invocado un comando con sudo antes.

Ejemplo:

[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 cómo en el ejemplo anterior no se me pidió que ingresara mi contraseña cuando ejecuté sudo shutdown -r +10, pero en el resto sí. Si desea eliminar la necesidad de escribir sudo antes del comando ( sudo shutdown -r +10), agregue lo siguiente a su .bash_profile o .bashrc:

alias shutdown="sudo shutdown"

Ejemplo:

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

Tenga en cuenta que es una buena práctica trabajar con una cuenta sin privilegios y escalar con sudo cuando sea necesario.

Respuesta3

Hay una herramienta llamadaguardia mollyeso requiere que indique el nombre de host de la máquina que desea apagar o reiniciar.

En caso de que no estés usando Debian, debería ser trivial compilarlo desde el código fuente, dado que el programa es bastante primitivo.

Respuesta4

Cambie el nombre del ejecutable de apagado a algo imposible de invocar accidentalmente.

Entonces alias shutdownpara ser(whatever) -r

información relacionada