Che effetto ha su un server quando si interrompono tutti i processi di root?


9

C'erano altri sviluppatori registrati come root che volevo cacciare.

Quindi ho emesso

pkill -KILL -u root

Poi ho capito che probabilmente avrei ucciso tutti i tipi di processi di root.

Ho danneggiato il mio sistema? Non riesco a raggiungerlo tramite SSH ora.

AGGIORNAMENTO: il server Web è ancora in esecuzione. Ma ora non riesco a collegarmi con SSH. Non ho idea di cosa ho fatto.


1
Quasi sicuramente dovrai riavviarlo. Se puoi, inviagli un segnale di spegnimento ACPI invece di staccare semplicemente la spina.
Skyhawk,

1
Iain, IME non è del tutto vero. Devono iniziare come root, per legarsi alle porte privilegiate, ma poi far girare un intero gruppo di processi di proprietà di qualsiasi utente non privato configurato, per la separazione dei privilegi. Nel caso di apache, tuttavia, di solito c'è ancora un singolo processo di proprietà di root seduto alla testa di tutto. Ma sono d'accordo con te sul fatto che tutti i processi che svolgono l'effettivo servizio web non sono di proprietà di root.
MadHatter,

5
Fare errori è il modo migliore per imparare . Per favore, non sottovalutare semplicemente perché qualcuno ha fatto un brutto errore. Questa domanda è controversa ma non dovrebbe essere chiusa. Invece ti sfido a leggere più profondamente il pensiero dietro la domanda e spiegare: cosa succede quando uccido tutti i processi di root? Perché l'host è ancora vivo? Perché SSHD non può servire richieste ma il webserver può farlo? Com'è possibile che il webserver sia vivo? Non vediamo di avere una buona risposta canonica a questo tipo di domande. Le risposte potrebbero fornire preziose spiegazioni sul funzionamento di Unix.
Stefan Lasiewski,

2
Grazie Stefan, per aver usato la tua testa e il tuo cuore e non aver cliccato compulsivamente il pulsante downvote come fanno molti altri. Se nessuno pubblica mai domande sui propri errori su siti di stackexchange, per paura di essere sottoposti a downgrade, NESSUNO imparerà da loro. Sto aiutando le persone con la mia domanda e non dovrei essere punito per questo.
Buttle Butkus il

1
Ho votato a favore della domanda perché era buona per una risata, senza offesa. È come guardare un video di qualcuno che cade in un buco mentre manda un sms.
UncaAlby,

Risposte:


15

Una risposta rapida è che hai ucciso sshd (e il signore sa cos'altro) e non sarai in grado di accedere nuovamente al sistema usando SSH. A meno che non si disponga di altri metodi per ottenere l'accesso al sistema (ad esempio una console remota, IPMI, ecc.), Sarà necessario riavviare il sistema che ripristinerà il servizio SSH e altri servizi.

Spero che tu abbia accesso fisico alla scatola, nel qual caso probabilmente devi solo premere il pulsante di accensione. Renditi conto che hai ucciso molti processi e preparati a un po 'di corruzione. Linux è progettato per il ripristino da un arresto anomalo del sistema e in sostanza è stato attivato un arresto anomalo "manuale". La maggior parte delle cose dovrebbe recuperare bene dopo un riavvio. Potresti avere tutti i tipi di messaggi di errore interessanti nei file di registro.


Risposta lunga:

Questo è un grande esperimento mentale e una buona domanda per un colloquio di lavoro. "Cosa succede se hai fatto X ..." Questa è una cosa divertente da provare sulla tua macchina virtuale privata, ma non dovrebbe mai essere eseguita su una vera scatola. Tutti fanno degli errori. Ricorda e impara dal tuo errore. Fare errori è il modo migliore per imparare. Fare errori nella produzione è una lezione dolorosa che accadrà di tanto in tanto nella tua carriera.

pkill -KILL -u root

Questo comando invierà un 'SIGKILL' (es kill -9. KILL è un alias per SIGKILL) a tutti i processi di proprietà di root. È una brutta cosa da fare su un sistema. kill -9dovrebbe essere evitato, tranne come ultima risorsa.

Il tuo comando ha ucciso in modo aggressivo tutti i processi di proprietà di root, i processi sono stati immediatamente eliminati e non è stata data loro la possibilità di ripulire. Per avere un'idea di ciò che hai ucciso, accedi a un box Linux sano ed elenca i processi di proprietà di root, usando un comando come uno di questi. In genere non è necessario essere root per eseguire questi comandi:

$ pgrep -u root -l
$ ps aux | grep root

Potresti aver ucciso Init (PID # 1) che genera nuovi processi. Il tuo sistema potrebbe non essere in grado di creare nuovi processi. Quindi, potrebbe continuare a funzionare per ora, ma è malato e deve essere riparato il prima possibile. Col passare del tempo, il sistema si ammalerà sempre di più. Più aspetti, più andrà peggio.

AGGIORNAMENTO: il server Web è ancora in esecuzione. Ma ora non riesco a collegarmi con SSH. Non ho idea di cosa ho fatto.

Immagino che tu stia usando Apache. Sembra che i processi figlio del server web siano ancora in esecuzione perché non sono di proprietà dell'utente 'root'. Tuttavia, il processo del server web genitore è normalmente di proprietà di root e tu l'hai ucciso. Di conseguenza, i nuovi processi figlio non verranno generati. Questo andrà bene per un po ', perché probabilmente hai abbastanza processi figlio per soddisfare le richieste, e in genere quei processi figlio persistono fino a quando non vengono uccisi o si bloccano. Ancora una volta, la soluzione più rapida è riavviare il computer.


Non ho accesso fisico ma scoprirò qualcosa. Sono stato piacevolmente sorpreso di vedere che Apache funziona ancora. Quindi la macchina sta andando bene senza root. PS se hai annullato il voto della domanda, ho migliorato il titolo.
Buttle Butkus,

1
@ButtleButkus Non ho sottovalutato la domanda. Ho iniziato a rispondere alla domanda e poi mi sono interessato al perché le cose funzionano nel modo in cui funzionano.
Stefan Lasiewski,

1
Stefan, grazie per la risposta. È l'unica risposta che ho votato dall'inizio, dato che aveva senso. Ho riavviato il sistema in circa 10 minuti e da allora tutto sembra funzionare meravigliosamente.
Buttle Butkus il

4

Molto probabilmente dovrai riavviare il sistema poiché hai ucciso praticamente tutti i servizi critici su di esso. Il modo in cui lo fai dipende dagli strumenti che hai o dal trasporto che devi raggiungere per il data center.


In realtà non sembra che abbia ucciso tutti i processi critici. Altrimenti, perché il server web avrebbe ancora pubblicato pagine Web perfette?
Buttle Butkus,

@ButtleButkus: il tuo server web non funzionerà come root.
user9517

@lain Se anche un singolo servizio "critico" venisse ucciso, penso che farebbe crollare l'intero server. Sembra che il comando in realtà non abbia ucciso un singolo servizio critico. Ha ucciso un servizio conveniente, però: sshd.
Buttle Butkus,

2
Solo perché un servizio critico viene ucciso, non significa che la macchina si spegne immediatamente. Considererei ad esempio il mio demone di controllo della ventola critico - quando l'utilizzo della cpu aumenta, voglio che la ventola giri di più. Potrei uccidere il servizio e avere un basso utilizzo della CPU per giorni, poi improvvisamente 1000 persone accedono al mio sito e la mia CPU prende fuoco. E ci sono molti altri modi meno evidenti di danneggiare ...
Unhammer,

3

Il sistema è in esecuzione perché il kernel è in esecuzione. Non puoi accedere a sshd perché hai ucciso il demone. Probabilmente anche init è stato terminato, il che significa che non è possibile creare nuovi processi. Pertanto, le nuove connessioni apache potrebbero non essere stabilite (parametri di configurazione applicati;)).

Non è possibile inviare un segnale ai thread del kernel, ecco perché il sistema è in esecuzione ma i servizi di proprietà root sono stati terminati e per una normale resurrezione, è necessario riavviarlo.


Grazie per i dettagli interessanti. Ti ho dato un voto, ma sto dando a Stefan il segno di spunta.
Buttle Butkus il
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.