¿Qué efecto tiene en un servidor cuando elimina todos los procesos raíz?

9

Hubo otros desarrolladores registrados como root que quería eliminar.

Entonces emití

pkill -KILL -u root

Entonces me di cuenta de que probablemente eliminé todo tipo de procesos raíz.

¿He dañado mi sistema? No puedo alcanzarlo a través de SSH ahora.

ACTUALIZACIÓN: el servidor web todavía se está ejecutando. Pero no puedo conectarme por SSH ahora. No tengo idea de lo que he hecho.

Buttle Butkus
fuente
1
Es casi seguro que va a necesitar reiniciarlo. Si puede, envíele una señal de apagado ACPI en lugar de simplemente desconectarlo.
Skyhawk
1
Iain, IME eso no es del todo cierto. Deben comenzar como root, para unirse a los puertos privilegiados, pero luego activar un montón de procesos propiedad de cualquier usuario no privado configurado para la separación de privilegios. Sin embargo, en el caso de apache, por lo general todavía hay un único proceso propiedad de la raíz al frente de todo. Pero estoy de acuerdo con usted en que todos los procesos que realizan el servicio web real no son propiedad de root.
MadHatter
55
Cometer errores es la mejor manera de aprender . Por favor, no haga un voto negativo simplemente porque alguien cometió un grave error. Esta pregunta es controvertida pero no debe cerrarse. En cambio, te desafío a que leas más profundamente el pensamiento detrás de la pregunta y te explique: ¿Qué sucede cuando elimino todos los procesos raíz? ¿Por qué el anfitrión sigue vivo? ¿Por qué SSHD no puede atender solicitudes, pero el servidor web sí? ¿Cómo es posible que el servidor web esté vivo? No creemos que tengan una buena respuesta canónica a este tipo de preguntas. Las respuestas podrían proporcionar valiosas explicaciones sobre cómo funciona Unix.
Stefan Lasiewski
2
Gracias Stefan, por usar tu cabeza y tu corazón y no hacer clic compulsivamente en el botón de voto negativo como tantos otros lo hacen. Si nadie publica preguntas sobre sus errores en los sitios de stackexchange, por temor a ser rechazado, NADIE aprenderá de ellos. Estoy ayudando a las personas con mi pregunta, y no debería ser castigada por ello.
Buttle Butkus
1
Elegí la pregunta porque fue bueno para reír, sin ofender. Es como mirar un video de alguien cayendo en un agujero mientras envía mensajes de texto.
UncaAlby

Respuestas:

15

Una respuesta rápida es que mató a sshd (y Dios sabe qué más) y no podrá volver a iniciar sesión en el sistema utilizando SSH. A menos que tenga algún otro método para obtener acceso al sistema (como una consola remota, IPMI, etc.), deberá reiniciar el sistema que restaurará el servicio SSH y otros servicios.

Esperemos que tenga acceso físico a la caja, en cuyo caso probablemente solo necesite presionar el botón de encendido. Date cuenta de que mataste muchos procesos y prepárate para la corrupción. Linux está diseñado para recuperarse de un bloqueo del sistema, y ​​esencialmente desencadenó un bloqueo 'manual'. La mayoría de las cosas deberían recuperarse bien después de un reinicio. Puede tener todo tipo de mensajes de error interesantes en los archivos de registro.


Respuesta larga:

Este es un gran experimento mental y una buena pregunta para una entrevista de trabajo. "¿Qué sucede si hiciste X ...?" Es algo divertido de probar en tu propia máquina virtual privada, pero nunca se debe hacer en una caja real. Todos cometemos errores. Recuerda y aprende de tu error. Cometer errores es la mejor manera de aprender. Cometer errores en la producción es una lección dolorosa que sucederá ocasionalmente en su carrera.

pkill -KILL -u raíz

Este comando enviará un 'SIGKILL' (por ejemplo, kill -9KILL es un alias para SIGKILL) a todos los procesos propiedad de root. Es algo muy malo hacer en un sistema. kill -9debe evitarse excepto como último recurso.

Su comando mató agresivamente todos los procesos propiedad de root, los procesos se eliminaron de inmediato y no se les dio la oportunidad de limpiar. Para tener una idea de lo que mató, inicie sesión en un cuadro de Linux saludable y enumere los procesos que posee root, usando un comando como uno de estos. Por lo general, no necesita ser root para ejecutar estos comandos:

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

Es posible que haya matado a Init (PID # 1) que genera nuevos procesos. Es posible que su sistema no pueda crear nuevos procesos. Por lo tanto, puede continuar funcionando por ahora, pero está enfermo y debe repararse lo antes posible. A medida que pasa el tiempo, el sistema se enfermará cada vez más. Cuanto más esperes, peor será.

ACTUALIZACIÓN: el servidor web todavía se está ejecutando. Pero no puedo conectarme por SSH ahora. No tengo idea de lo que he hecho.

Supongo que estás usando Apache. Parece que los procesos secundarios del servidor web todavía se están ejecutando porque no son propiedad del usuario 'root'. Sin embargo, el proceso del servidor web principal normalmente es propiedad de root y lo eliminó. Como resultado, no se generarán nuevos procesos secundarios. Esto estará bien por un tiempo, porque probablemente tenga suficientes procesos secundarios para atender solicitudes, y típicamente esos procesos secundarios persistirán hasta que se eliminen o se bloqueen. Nuevamente, la solución más rápida es reiniciar la máquina.

Stefan Lasiewski
fuente
No tengo acceso físico, pero resolveré algo. Me sorprendió gratamente ver que Apache sigue funcionando. Entonces la máquina está funcionando bien sin root. PD: si rechazaste la pregunta, he mejorado el título.
Buttle Butkus
1
@ButtleButkus No rechacé la pregunta. Comencé a responder la pregunta y luego me interesé bastante por qué las cosas funcionan de la manera en que lo hacen.
Stefan Lasiewski
1
Stefan, gracias por tu respuesta. Es la única respuesta que voté desde el principio, ya que tenía sentido. Reinicié el sistema en unos 10 minutos y todo parece estar funcionando maravillosamente desde entonces.
Buttle Butkus
4

Lo más probable es que tenga que reiniciar su sistema, ya que ha matado a casi todos los servicios críticos en él. Cómo lo haga depende de las herramientas que tenga o del transporte que tenga para llegar al centro de datos.

usuario9517
fuente
No parece que haya matado todos los procesos críticos, en realidad. De lo contrario, ¿por qué el servidor web seguiría sirviendo páginas web perfectas?
Buttle Butkus
@ButtleButkus: su servidor web no se ejecutará como root.
user9517
@lain Si incluso un solo servicio "crítico" fue asesinado, entonces creo que eso haría que todo el servidor se cayera. Parece que el comando en realidad no mató a un solo servicio crítico. Sin embargo, mató un servicio conveniente: sshd.
Buttle Butkus
2
El hecho de que se elimine un servicio crítico no significa que la máquina se apagará de inmediato. Por ejemplo, consideraría que mi demonio de control de ventilador es crítico: cuando el uso de la CPU aumenta, quiero que el ventilador gire más. Podría matar el servicio y tener un bajo uso de CPU por días, luego de repente 1000 personas acceden a mi sitio y mi CPU se incendia. Y hay muchas otras formas menos notorias de hacer daño ...
desanime el
3

El sistema se está ejecutando porque el kernel se está ejecutando. No puedes acceder a sshd porque has matado al demonio. Probablemente init también haya finalizado, lo que significa que no puede crear nuevos procesos. Por lo tanto, es posible que no se establezcan nuevas conexiones apache (parámetros de configuración aplicados;)).

No puede enviar una señal a los hilos del kernel, es por eso que el sistema se está ejecutando, pero los servicios propiedad de la raíz se han cancelado y, para una resurrección normal, debe reiniciarlo.

Soham Chakraborty
fuente
Gracias por los detalles interesantes. Te di un voto a favor, pero le doy a Stefan la marca de verificación.
Buttle Butkus