Disabilitare il comando di arresto per tutti gli utenti, anche le conseguenze di root?


11

Vorrei disabilitare il shutdowncomando per tutti gli utenti, anche root, su un'installazione di Ubuntu Server.

Il motivo per cui voglio fare questo è assicurarmi di non prendere l'abitudine di spegnere la macchina in questo modo, poiché inserisco molte macchine di produzione contemporaneamente a questa, e non lo faccio vuoi spegnere accidentalmente una delle altre macchine digitando il comando nella finestra sbagliata.

Il server che desidero disabilitare l'arresto su viene eseguito solo all'interno di VirtualBox sul desktop di Windows e lo uso solo per i test locali, quindi non è un problema se non riesco a spegnerlo dalla riga di comando.

Ho già mitigato un po 'il problema assicurandomi di avere una password diversa sull'immagine VirtualBox, ma ovviamente se mi trovassi nella sudo' finestra 'su una delle macchine di produzione, potrei comunque spegnerlo accidentalmente.

Le mie domande sono:

  1. Come disabilito il comando shutdown?
  2. Se disabilito il comando shutdown, ci sono conseguenze di cui dovrei essere informato? Più specificamente, disabiliterà il supporto per l'arresto ACPI che equivale a premere il pulsante di accensione su una macchina fisica? Potrebbe influenzare altre applicazioni generiche?

Per informazioni, utilizzo questa immagine di VirtualBox per provare script di shell, eseguire Tomcat e Java e quel genere di cose.


2
A mio avviso, cambiare un comportamento così fondamentale del sistema per prevenire errori umani è una cattiva idea. È probabile che a lungo termine porti più problemi di quanti ne risolva. Se si mantiene una password utente diversa per ogni sistema, si minimizza il rischio (poiché richiede sudo). Dovresti sviluppare buone abitudini che non dipendono da un particolare cambiamento del sistema, disastri molto più gravi sono spesso causati da rm / cp / chmod che sono usati molto più frequentemente, e immagino che non li disabiliti.
João Pinto,

Anche se sono d'accordo con questo, ed è sicuramente il modo giusto di fare le cose, questo è solo per evitare che una, minuscola situazione contenga un'immagine non ufficiale di Ubuntu che ho sul mio desktop al fine di permettermi di provare le cose senza il rischio di b0rking macchine del mio datore di lavoro :)
Rich

Risposte:


3

Se di solito si esegue il comando come sudo shutdown, piuttosto che sudo /sbin/shutdown, è possibile semplicemente impostare un alias di shell globale per "shutdown" per fare semplicemente eco a un messaggio al terminale. Il vero eseguibile sarà ancora lì per tutti gli altri scopi.


Sembra il modo migliore per andare se stai solo cercando di interrompere un'abitudine.
ændrük,

2
Ma nota che il modo ovvio di impostare un alias di shell ( alias shutdown=sl) non avrà alcun effetto sugli argomenti su sudo. In zsh puoi definire gli alias che corrispondono agli argomenti, ma penso che non in bash. Si potrebbe alias sudodi uno script di shell che rifiuta di fare qualsiasi cosa se il primo argomento è shutdown.
Poolie,

2
In altre parole, questo in realtà non funzionerà.
poolie,

14

Un approccio molto migliore a questo problema è installare il programma Molly-Guard sulle scatole che non si desidera arrestare, piuttosto che cercare di allenarsi per non eseguire mai l'arresto.

molly-guard tenta di impedirti di spegnere o riavviare accidentalmente le macchine. Lo fa iniettando un paio di controlli prima dei comandi esistenti: arresto, riavvio, spegnimento e spegnimento.

La configurazione tipica è che ti chiede di digitare il nome host della macchina per confermare che sei davvero su quella giusta.

È possibile aggiungere nuovi script a /etc/molly-guard/run.d(come documentato nella manpage , i file di script devono seguire i nomi previsti da run-parts.

Se vuoi davvero disabilitare shutdown(e questa è un'idea così bizzarra), fallo

chmod 0 /sbin/shutdown

quindi se è necessario utilizzarlo, modificarlo di nuovo a 0755.


Un'ottima idea, ma purtroppo non è possibile in quanto non ho abbastanza controllo sui sistemi per poter installare il mio software. Purtroppo ho abbastanza controllo per riuscire a spegnerli!
Rich

4
Sei serio? È molto strano. Se si dispone dell'accesso sudo per eseguire solo l'arresto, è possibile persuadere le persone a cambiare sudo per emettere un grande prompt o richiedere sempre una password. Se esiste il rischio che tu li spenga accidentalmente, sarebbe nell'interesse degli amministratori installare Molly-Guard.
poolie,

1

Per disabilitare il comando di arresto, è sufficiente rendere il file binario non eseguibile, ad esempio, sudo chmod a-x /sbin/shutdown inoltre, non penso che avrà effetto su nessun altro metodo di arresto perché, come dice la voce man per arresto

shutdown invia una richiesta al demone init per far scendere il sistema nel runlevel appropriato

quindi qualsiasi altro comando / script può farlo anche dopo aver disabilitato il comando di spegnimento, ad esempio, posso ancora spegnere il mio sistema usando l'arresto dal menu GNOME. Inoltre è ancora possibile riavviare il computer dalla riga di comando utilizzando il comando reboot


1

Il shutdowncomando è in /sbin/shutdown. Puoi disabilitarlo facendo questo:

sudo mv /sbin/shutdown /sbin/really-do-shutdown

Ma : Ciò significa che quasi nessuno dei soliti metodi di spegnimento del sistema funzionerà più. L'arresto di gnome sul mio computer di prova per questa risposta provoca il logout e il reindirizzamento a GDM.

Se vuoi spegnere il sistema in seguito, devi farlo

sudo init 0

La disattivazione dell'arresto influirà su ogni applicazione che utilizza il comando per qualsiasi cosa. Poiché init 0non è il modo consigliato di arrestare un sistema, tutti i programmi che devono arrestare il sistema lo utilizzano shutdown, che non funzionerà più.

  • Le applicazioni possono inoltre generare eccezioni a causa del file mancante o del file non eseguibile , causandone potenzialmente l'arresto anomalo anche se non è necessario un arresto. Questo è un caso limite su cui puoi aggirare spostando al suo posto un file binario, idealmente eseguibile (non uno script shell - che non funzionerà). Per esempio:

    sudo cp /bin/ps /sbin/shutdown
    

    Questo dopo aver spostato l'originale fuori strada in modo sicuro.

Ora, tutto questo è abbastanza confuso, e lo sconsiglio , per le ragioni delineate nel commento di João Pinto. Ma non ti impedirò di farlo. :-)

Non solo eseguire il backup di / sbin / shutdown, ma avere anche un piano di ripristino nel caso in cui causi problemi. Non farlo su un server che non puoi raggiungere, per esempio. E prova in anticipo il tuo piano di ripristino, supponendo che il sistema non si avvii affatto (si avvierà ovviamente - l'ho provato - ma per favore sii al sicuro).


0

Penso che dovrebbe essere presa un'altra soluzione, i server dovrebbero avere una politica ssh per disabilitare lo spegnimento e init 0 su ssh, oppure deve esserci una finestra di dialogo speciale visualizzata sulla console come su Windows per inserire il "perché" e la speciale "password di spegnimento" . Per questo il pulsante di accensione dovrebbe essere protetto da password durante l'utilizzo del server.

Al momento utilizziamo un "interruttore a chiave fisica = 4 euro" invece di un pulsante.


0

Voglio disabilitare il shutdowncomando.

cp / sbin / shutdown / sbin / shutdown-backup

rm / sbin / shutdown

questo perché se qualcuno cerca di usare con forza questo comando, allora non può farlo

ora nessuno sarà in grado di usare il comando shutdown.

visualizzerà un comando di messaggio non trovato installarlo.

vim /etc/bash.bashrc

Aggiungi una riga nell'ultimo di bash.bashrc

alias shutdown = "echo 'Non puoi usare questo comando'"

se lo vuoi indietro (abilitato). basta copiarlo indietro

cp / sbin / shutdown-backup / sbin / shutdown

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.