Quel effet cela a-t-il sur un serveur lorsque vous tuez tous les processus racine?

9

Il y avait d'autres développeurs connectés en tant que root que je voulais supprimer.

J'ai donc émis

pkill -KILL -u root

Puis j'ai réalisé que j'avais probablement tué toutes sortes de processus racine.

Ai-je endommagé mon système? Je ne peux pas l'atteindre via SSH maintenant.

MISE À JOUR: le serveur Web est toujours en cours d'exécution. Mais je ne peux pas me connecter par SSH maintenant. Je n'ai aucune idée de ce que j'ai fait.

Buttle Butkus
la source
1
Vous allez presque certainement avoir besoin de le redémarrer. Si vous le pouvez, envoyez-lui un signal d'arrêt ACPI au lieu de simplement retirer la prise.
Skyhawk
1
Iain, IME ce n'est pas entièrement vrai. Ils doivent commencer en tant que root, pour se lier aux ports privilégiés, puis faire tourner tout un tas de processus appartenant à tout utilisateur non privé configuré, pour la séparation des privilèges. Dans le cas d'Apache, cependant, il y a généralement un seul processus appartenant à la racine qui se trouve à la tête de tout cela. Mais je suis d'accord avec vous que tous les processus effectuant le service Web réel ne sont pas détenus par root.
MadHatter
5
Faire des erreurs est la meilleure façon d'apprendre . S'il vous plaît, ne votez pas simplement parce que quelqu'un a fait une mauvaise erreur. Cette question est controversée mais ne doit pas être close. Au lieu de cela, je vous mets au défi de lire plus profondément dans la pensée derrière la question et d'expliquer: Que se passe-t-il lorsque je tue tous les processus racine? Pourquoi l'hôte est-il toujours vivant? Pourquoi SSHD ne peut-il pas servir les demandes mais le serveur Web le peut? Comment est-il possible que le serveur Web soit vivant? Nous ne pensons pas avoir une bonne réponse canonique à ce genre de questions. Les réponses pourraient fournir de précieuses explications sur le fonctionnement d'Unix.
Stefan Lasiewski
2
Merci Stefan, d'avoir utilisé ta tête et ton cœur et de ne pas avoir compulsivement cliqué sur le bouton downvote comme tant d'autres. Si personne ne publie jamais de questions sur leurs erreurs sur les sites stackexchange, de peur d'être déclassé, personne ne les apprendra. J'aide les gens avec ma question et je ne devrais pas être puni pour cela.
Buttle Butkus
1
J'ai voté contre la question parce que c'était bon pour rire, sans offense. C'est comme regarder une vidéo de quelqu'un qui tombe dans un trou pendant un texto.
UncaAlby

Réponses:

15

Une réponse rapide est que vous avez tué sshd (et seigneur sait quoi d'autre) et ne pourrez pas vous reconnecter au système en utilisant SSH. Sauf si vous avez une autre méthode pour accéder au système (une console distante, IPMI, etc.), vous devrez redémarrer le système qui restaurera le service SSH et d'autres services.

J'espère que vous avez un accès physique à la boîte, auquel cas il vous suffit probablement d'appuyer sur le bouton d'alimentation. Sachez que vous avez tué de nombreux processus et préparez-vous à une corruption. Linux est conçu pour récupérer d'un plantage du système, et vous avez essentiellement déclenché un plantage "manuel". La plupart des choses devraient se rétablir correctement après un redémarrage. Vous pouvez avoir toutes sortes de messages d'erreur intéressants dans les fichiers journaux.


Longue réponse:

Il s'agit d'une grande expérience de réflexion et d'une bonne question d'entrevue d'emploi. "Que se passe-t-il si vous avez fait X ..." C'est une chose amusante à essayer sur votre propre machine virtuelle privée, mais cela ne devrait jamais être fait sur une vraie boîte. Tout le monde fait des erreurs. Rappelez-vous et apprenez de votre erreur. Faire des erreurs est la meilleure façon d'apprendre. Faire des erreurs de production est une leçon douloureuse qui se produira occasionnellement dans votre carrière.

pkill -KILL -u racine

Cette commande enverra un 'SIGKILL' (par exemple kill -9. KILL est un alias pour SIGKILL) à tous les processus appartenant à root. C'est une très mauvaise chose à faire sur un système. kill -9doit être évité, sauf en dernier recours.

Votre commande a tué de manière agressive tous les processus appartenant à root, les processus ont été tués immédiatement et n'ont pas eu la chance de nettoyer. Pour avoir une idée de ce que vous avez tué, connectez-vous dans une boîte Linux saine et répertoriez les processus appartenant à root, en utilisant une commande comme celle-ci. Vous n'avez généralement pas besoin d'être root pour exécuter ces commandes:

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

Vous avez peut-être tué Init (PID # 1) qui engendre de nouveaux processus. Il est possible que votre système ne puisse pas créer de nouveaux processus. Il peut donc continuer de fonctionner pour l'instant, mais il est malade et doit être réparé dès que possible. Avec le temps, le système tombera de plus en plus malade. Plus vous attendez, plus cela empire.

MISE À JOUR: le serveur Web est toujours en cours d'exécution. Mais je ne peux pas me connecter par SSH maintenant. Je n'ai aucune idée de ce que j'ai fait.

Je suppose que vous utilisez Apache. Il semble que les processus enfants du serveur Web soient toujours en cours d'exécution car ils n'appartiennent pas à l'utilisateur «root». Cependant, le processus du serveur Web parent appartient normalement à root et vous l'avez tué. Par conséquent, les nouveaux processus enfants n'apparaîtront pas. Ce sera bien pendant un certain temps, car vous avez probablement suffisamment de processus enfants pour traiter les demandes, et ces processus enfants persisteront généralement jusqu'à ce qu'ils soient tués ou qu'ils se bloquent. Encore une fois, la solution la plus rapide consiste à redémarrer la machine.

Stefan Lasiewski
la source
Je n'ai pas d'accès physique mais je trouverai quelque chose. J'ai été agréablement surpris de voir qu'Apache fonctionne toujours. Donc la machine va bien sans root. PS: si vous avez dévalorisé la question, j'ai amélioré le titre.
Buttle Butkus
1
@ButtleButkus Je n'ai pas rejeté la question. J'ai commencé à répondre à la question, puis je me suis beaucoup intéressé à savoir pourquoi les choses fonctionnent comme elles le font.
Stefan Lasiewski
1
Stefan, merci pour ta réponse. C'est la seule réponse que j'ai votée depuis le début, car elle avait du sens. J'ai redémarré le système en 10 minutes environ et tout semble fonctionner à merveille depuis lors.
Buttle Butkus
4

Vous devrez probablement redémarrer votre système car vous avez tué à peu près tous les services critiques sur celui-ci. La façon dont vous procédez dépend des outils dont vous disposez ou du moyen de transport à utiliser pour vous rendre au centre de données.

user9517
la source
Il ne semble pas que j'aie tué tous les processus critiques, en fait. Sinon, pourquoi le serveur Web aurait-il toujours servi des pages Web parfaites?
Buttle Butkus
@ButtleButkus: Votre serveur Web ne fonctionnera pas en tant que root.
user9517
@lain Si même un seul service "critique" était tué, je pense que cela ferait tomber tout le serveur. Il semble que la commande n'ait en fait tué aucun service critique. Cela a cependant tué un service pratique: sshd.
Buttle Butkus
2
Ce n'est pas parce qu'un service critique est tué que la machine s'arrêtera immédiatement. Je considérerais par exemple mon démon de contrôle des ventilateurs comme critique - lorsque l'utilisation du processeur augmente, je veux que le ventilateur tourne plus. Je pourrais tuer le service et avoir une faible utilisation du processeur pendant des jours, puis soudainement 1000 personnes accèdent à mon site et mon processeur prend feu. Et il y a beaucoup plus de façons moins visibles de faire des dégâts…
unhammer
3

Le système fonctionne car le noyau est en cours d'exécution. Vous ne pouvez pas accéder à sshd car vous avez tué le démon. L'init est probablement également terminée, ce qui signifie que vous ne pouvez pas créer de nouveaux processus. Ainsi, de nouvelles connexions Apache peuvent ne pas s'établir (paramètres de configuration appliqués;)).

Vous ne pouvez pas envoyer de signal aux threads du noyau, c'est pourquoi le système fonctionne mais les services appartenant à la racine ont été arrêtés et pour une résurrection normale, vous devez le redémarrer.

Soham Chakraborty
la source
Merci pour les détails intéressants. Je vous ai donné un vote positif, mais je coche Stefan.
Buttle Butkus