È venerdì sera, ore 19:00. Sei rimasto l'ultimo ancora in ufficio, e hai fretta di tornare a casa dalla fidanzata che già sclera per il ritardo. Impartisci un sudo poweroff in tutta fretta nel Terminale per spegnere il PC, poi chiudi il portatile e scappi fuori. Ma non fai nemmeno in tempo ad arrivare alla macchina che ti suona il telefono: è il cliente in panico, perché il suo sito non funziona più. Ti si raggela il sangue nelle vene mentre realizzi di aver lanciato il sudo poweroff sul server di produzione, invece che sul tuo PC. Oltre a rimediare puntualmente il problema riaccendendo il server, la seconda domanda è: come posso disattivare il comando poweroff e/o shutdown sul server Linux per evitare che succeda di nuovo?

Come disattivare poweroff / shutdown server Linux (Ubuntu) impedire spegnimento accidentale - spegnimento accidentale linux spotlight

La storia raccontata in apertura è una estremizzazione di quanto mi è successo personalmente, con la differenza che, nel mio caso, erano le 15:00 e il server spento erroneamente era un ambiente di test che nessuno stava usando. Ciò nonostante, la mia fantasia ha concepito lo scenario da incubo raccontato in apertura, ed immediatamente mi sono messo alla ricerca di una soluzione.

Come disattivare poweroff / shutdown sul server Linux

Il modo più rapido per impedire lo spegnimento accidentale di un server Linux è tramite questo comando:

sudo systemctl mask poweroff.target

Ho testato la soluzione con Ubuntu 22.04 (Server e Desktop), ma dovrebbe essere valida un po' con tutte le distribuzioni principali.

Come spiegato qui, il comando in questione maschera il servizio che si occupa dello spegnimento del server. Così facendo, pur tentando di spegnere il sistema con i classici comandi sudo poweroff oppure sudo shutdown now non succederà nulla

Come disattivare poweroff / shutdown server Linux (Ubuntu) impedire spegnimento accidentale

Rimarrà comunque possibile riavviare il sistema tramite sudo reboot oppure shutdown -r now - cosa che, comunque, è altamente desiderabile per completare l'installazione di alcuni aggiornamenti

Come disattivare poweroff / shutdown server Linux (Ubuntu) impedire spegnimento accidentale

Da questa situazione: per annullare la modifica e consentire di nuovo lo spegnimento del sistema basta impartire:

sudo systemctl unmask poweroff.target

Così facendo, sudo poweroff e sudo shutdown now ricominceranno a funzionare esattamente come prima.

Come disattivare poweroff / shutdown sul server Linux tramite script

La soluzione appena indicata funziona perfettamente, ma ho preparato uno script che esegue il comando in questione, gestendo però anche questi casi speciali:

  1. ri-esecuzione automatica del comando ad ogni avvio del sistema - per avere una sicurezza in più che la modifica resti attiva anche in caso qualcuno provi a disattivarla
  2. predisposizione di un comando zzserver-poweroff, che consente di annullare temporaneamente la modifica e spegnere il server senza dover ricordare tutto il comando "di unmask" visto poco fa

Lo script è compatibile con Ubuntu 22.04 (Server e Desktop).

Per installarlo eseguire:

sudo apt install curl -y && curl -s https://raw.githubusercontent.com/TurboLabIt/webstackup/master/script/power/poweroff-disabler.sh?$(date +%s) | sudo bash

Come disattivare poweroff / shutdown server Linux (Ubuntu) impedire spegnimento accidentale

Da questa situazione è di nuovo impossibile spegnere il server tramite sudo poweroff oppure sudo shutdown now.

Se però siamo sicuri di quello che stiamo facendo e desideriamo davvero spegnere il server remoto, impartiamo zzserver-poweroff - basta anche digitare solo zz e poi battere Tab una o due volte per attivare il completamento automatico, o la visualizzazione dei comandi disponibili

Come disattivare poweroff / shutdown server Linux (Ubuntu) impedire spegnimento accidentale

Per ridurre ulteriormente la confusione, ho fatto in modo che zzserver-poweroff funzioni solo in caso sia stato disattivato lo spegnimento seguendo la procedura sopra indicata. Così facendo, non ci "abitueremo" mai ad utilizzare questo comando, e lo eseguiremo unicamente con la chiara ed esplicita intenzione di spegnere un server sul quale lo spegnimento sia stato disattivato.

Conclusioni

In questa guida abbiamo visto come impedire lo spegnimento accidentale di un server Linux. Trovo che svolgere questa operazione, in particolare sui "VPS" o sui server dedicati che si trovano in housing presso i datacenter dei fornitori, sia assolutamente critico per impedire disastri accidentali.