Soluzione 1:
Dovresti usare una distribuzione Linux basata su systemd. In questo caso, dovresti essere in grado di mascherare il target poweroff, in modo che systemd si rifiuti di eseguirlo (e si spenga). ad esempio:
systemctl mask poweroff.target
Ciò rende assolutamente impossibile spegnere il sistema, se non riavviando. Assicurati che non accada nulla:
In questo caso, l'interruttore di alimentazione virtuale di questa VM non funziona nemmeno più per spegnere il sistema. Ma si riavvia ancora perfettamente.
Per annullare la modifica, ovviamente, basta smascherare il bersaglio. Quindi puoi spegnere il sistema.
systemctl unmask poweroff.target
Soluzione 2:
Ci sono alcuni modi per raggiungere questo obiettivo. Uno lavorerebbe con un normale account non privilegiato che richiederà l'esecuzione del comando con sudo e l'inserimento di una password. Quindi puoi aggiungere quanto segue a /etc/sudoers (eseguendo visudo):
## user is allowed to execute reboot -r only
jdoe ALL=NOPASSWD: /sbin/shutdown -r *
Inoltre, per disabilitare la memorizzazione nella cache delle credenziali sudo , aggiungi anche quanto segue :
Defaults timestamp_timeout=0
Ciò impedirà la memorizzazione nella cache delle credenziali nel caso in cui tu abbia richiamato un comando con sudo prima.
Esempio:
[[email protected] ~]# su - jdoe
[[email protected] ~]$ sudo shutdown -c
[sudo] password for jdoe:
[[email protected] ~]$ sudo shutdown -r +10
Shutdown scheduled for Mon 2018-09-03 18:51:13 IDT, use 'shutdown -c' to cancel.
[[email protected] ~]$ sudo shutdown -H
[sudo] password for jdoe:
^[[A[[email protected] ~]$ sudo shutdown -c
[sudo] password for jdoe:
Nota come nell'esempio sopra non mi è stato richiesto di inserire la mia password durante l'esecuzione di sudo shutdown -r +10
, ma per il resto lo ero . Se vuoi eliminare la necessità di digitare sudo prima del comando (sudo shutdown -r +10
), aggiungi quanto segue al tuo .bash_profile o .bashrc:
alias shutdown="sudo shutdown"
Esempio:
[[email protected] ~]$ source ~/.bash_profile
[[email protected] ~]$ shutdown -r +10
Shutdown scheduled for Mon 2018-09-03 19:03:14 IDT, use 'shutdown -c' to cancel.
[[email protected] ~]$ shutdown -c
[sudo] password for jdoe:
Tieni presente che è consigliabile lavorare con un account non privilegiato e inoltrare l'escalation con sudo quando richiesto.
Soluzione 3:
C'è uno strumento chiamato molly-guard che richiede di dichiarare il nome host della macchina che vuoi spegnere o riavviare.
Nel caso in cui non utilizzi Debian, dovrebbe essere banale compilarlo dai sorgenti, dato che il programma è piuttosto primitivo.
Soluzione 4:
Per prevenire incidenti, le distribuzioni basate su RHEL hanno già impostato degli alias per rm
, cp
e mv
che può essere in qualche modo più distruttivo se eseguito dall'utente root.
Potresti aggiungere il tuo, ad esempio:
#/root/.bashrc
alias poweroff='echo "poweroff: Command disabled - THINK before you type.
Use /usr/sbin/poweroff if you really want to drive to the DC to restore power."'
Soluzione 5:
Rinomina l'eseguibile di spegnimento in qualcosa che non può essere richiamato accidentalmente.
Poi alias shutdown
essere (whatever) -r