Saltar al contenido principal

EXAMEN – SERVICIOS systemd Y GESTIÓN DE PROCESOS EN UBUNTU 24.04

  • Nombre del estudiante: _____________________________________
  • Grupo: ____________

PARTE 1 – INVESTIGACIÓN SOBRE UN SERVICIO systemd YA ACTIVO (PUERTO 3000)​

1. PRERREQUISITOS​

Antes de comenzar esta sección, asegúrese de que se cumplan las siguientes condiciones:

  • Un servidor Wiki.js configurado para ejecutarse en el puerto 3000.
  • Un servidor NGINX activo.

Comandos de preparación:

sudo apt update
sudo apt install nginx
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx

2. CONTEXTO DEL ESCENARIO​

El señor Éric, administrador de sistemas, intenta desplegar la aplicación Wiki.js. La instalación parece correcta, pero la aplicación no responde como se esperaba en el puerto 3000. Usted debe realizar una investigación detallada para identificar y resolver definitivamente este problema.


3. PASOS DE LA INVESTIGACIÓN​

Paso 1 – Verificación del puerto utilizado​

Verificación inicial del puerto 3000:

lsof -i :3000

Resultado:

COMMAND   PID   USER     FD   TYPE DEVICE SIZE/OFF NODE NAME
node 9744 wikijs 22u IPv4 59242 0t0 TCP *:3000 (LISTEN)

Pregunta 1:

¿Para qué sirve el comando lsof? Compárelo con el comando fuser: ¿tienen los mismos usos? ¿En qué se diferencian en la gestión de archivos o puertos abiertos en Linux?

Respuesta 1:

...............................................................................................................................


Paso 2 – Intento de detención manual​

Intento de detener el proceso:

kill -15 9744
kill -9 9744

Pregunta 2:

¿El proceso se reinicia automáticamente después de haber sido detenido manualmente? Explique por qué, apoyándose en los mecanismos de systemd:

Respuesta 2:

............................................................................................................................... ............................................................................................................................... ...............................................................................................................................

Pregunta 3:

¿Cuál es la diferencia entre un daemon (o proceso en segundo plano) clásico y un servicio systemd? Dé un ejemplo concreto para ilustrar cada caso.

Respuesta 3:

............................................................................................................................... ............................................................................................................................... ...............................................................................................................................


Paso 3 – Identificación del servicio responsable​

Identificación del servicio systemd:

systemctl list-units --type=service --state=running | grep -i wiki
ps aux | grep node
ls -l /etc/systemd/system/ | grep wiki

Servicio identificado:

wikijs.service

Pregunta 4:

Ha identificado el servicio wikijs.service utilizando los siguientes comandos:

systemctl list-units --type=service --state=running | grep -i wiki
ps aux | grep node
ls -l /etc/systemd/system/ | grep wiki

Explique cómo estos comandos permiten confirmar la existencia de un servicio systemd activo. Justifique por qué estos tres enfoques son complementarios.

Respuesta 4:

............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ...............................................................................................................................


Paso 4 – Verificación del vínculo entre servicio y puerto​

Confirmación final del vínculo:

sudo lsof -i -P -n | grep 3000
ps -p <PID> -o pid,cmd

Pregunta 5:

Explique cómo los comandos anteriores permiten establecer un vínculo directo entre un PID dado, el puerto 3000 y el servicio systemd identificado previamente. ¿Por qué es un paso indispensable antes de detener o desactivar un servicio?

Respuesta 5:

............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ...............................................................................................................................


Paso 5 – Desactivación definitiva del servicio​

Comandos finales:

sudo systemctl stop wikijs.service
sudo systemctl disable wikijs.service

Verificación de la liberación del puerto:

lsof -i :3000

Pregunta 6:

Explique la diferencia entre los comandos systemctl stop y systemctl disable. ¿Por qué es necesario ejecutar ambos para garantizar que el servicio no se reinicie, incluso después de un reinicio de la máquina? ¿Por qué el comando kill -9 es insuficiente en este caso?

Respuesta 6:

............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ...............................................................................................................................


Pregunta 7:

7.1. ¿Por qué el proceso vinculado al puerto 3000 se reiniciaba automáticamente después de un kill -9?

Respuesta: ...............................................................................................................................

7.2. ¿Qué comando permite identificar rápidamente los servicios systemd activos que contienen una palabra clave?

Respuesta: ...............................................................................................................................

7.3. ¿Qué método le permitió confirmar el vínculo entre el puerto y el archivo wikijs.service?

Respuesta: ...............................................................................................................................

7.4. Explique por qué se recomienda utilizar systemctl stop y disable en lugar de kill -9.

Respuesta: ............................................................................................................................... ...............................................................................................................................

7.5. Proponga un script sencillo para automatizar esta búsqueda:

# Script :
...............................................................................................................................
...............................................................................................................................

Pregunta 8 (Bonus):

Para profundizar, pruebe y explique estas herramientas:

  • systemd-cgls
  • ss -lptn
  • fuser -k 3000/tcp
  • journalctl -u wikijs.service

PARTE 2 – DETECCIÓN Y NEUTRALIZACIÓN DE UN SERVICIO MALICIOSO (systemd)​

1. INSTRUCCIONES GENERALES IMPORTANTES​

  • Realización bajo Ubuntu 24.04.
  • El servicio malicioso logservice.service está activo desde el arranque.
  • Entregar un informe final preciso.
  • No se permite reiniciar ni apagar completamente el sistema.

2. CONTEXTO TÉCNICO​

Un servicio malicioso genera continuamente archivos de logs en /var/log/malicious, con el riesgo de saturar el sistema. Este servicio se reinicia automáticamente en caso de detención (Restart=always).

Archivo sospechoso:

/etc/systemd/system/logservice.service

3. OBJETIVO​

  • Identificar un servicio anómalo.
  • Detener y desactivar definitivamente un servicio systemd.
  • Limpiar los archivos generados.
  • Proporcionar un informe técnico preciso.

3.1. Crear el script malicioso​

sudo mkdir -p /opt/malicious
sudo nano /opt/malicious/logwriter.sh

Contenido del script:

#!/bin/bash

mkdir -p /var/log/malicious

while true; do
echo "$(date) - LOG ENTRY" >> /var/log/malicious/attack.log
sleep 0.1
done

3.2. Hacer el script ejecutable​

sudo chmod +x /opt/malicious/logwriter.sh

3.3. Crear el servicio systemd malicioso​

sudo nano /etc/systemd/system/logservice.service

Contenido del archivo logservice.service:

[Unit]
Description=Servicio Malicioso – Generador de Logs
After=network.target

[Service]
ExecStart=/opt/malicious/logwriter.sh
Restart=always
RestartSec=1

[Install]
WantedBy=multi-user.target

3.4. Activar e iniciar el servicio​

sudo systemctl daemon-reload
sudo systemctl enable logservice
sudo systemctl start logservice

3.5. Verificar el comportamiento​

sudo systemctl status logservice
ls -lh /var/log/malicious/
  • Verá que el archivo crece muy rápidamente.

  • Este servicio simula un comportamiento malicioso de tipo "log flooding", típico de un binario instalado discretamente y persistente al arranque. Le obliga a:

    • Identificar un archivo que crece peligrosamente (du, lsof, etc.)

    • Correlacionar PID ↔ servicio systemd

    • Intentar detener con kill -9 (fracaso)

    • Comprender Restart=always

    • Aplicar la secuencia correcta:

      • systemctl stop
      • systemctl disable
      • rm
      • daemon-reload
      • Limpieza

4. PASOS A REALIZAR​

Paso 1 – Identificación del problema​

Comandos a utilizar:

du -sh /var/log/*
ps aux | grep logservice
lsof | grep malicious
systemctl status logservice

Pregunta 9:

Explique qué hace cada uno de estos comandos y en qué ayuda a identificar un comportamiento anómalo relacionado con el servicio logservice. Su respuesta debe mencionar los elementos técnicos observables (tamaño, procesos, archivos abiertos, estado, etc.).

Respuesta:

............................................................................................................................... ...............................................................................................................................


Paso 2 – Intentos de detención​

Comando 1 (detención forzada del proceso):

sudo kill -9 <PID>

Comando 2 (detención vía systemd):

sudo systemctl stop logservice

Pregunta 10:

Ambos comandos anteriores buscan interrumpir la ejecución del servicio malicioso.

  • ¿Cuál es realmente eficaz para detener de forma duradera el servicio?
  • ¿Por qué el comando kill -9 suele ser insuficiente en el caso de un servicio gestionado por systemd?
  • Justifique su respuesta en relación con los parámetros del archivo .service.

Respuesta esperada:

............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ...............................................................................................................................


Paso 3 – Desactivación completa del servicio​

Desactivación del servicio al arranque:

sudo systemctl disable logservice

Eliminación del archivo de definición:

sudo rm /etc/systemd/system/logservice.service

Recarga de la configuración de systemd:

sudo systemctl daemon-reload

Eliminación de los archivos generados:

sudo rm -rf /var/log/malicious

Pregunta 11:

Explique con precisión el rol de cada uno de los comandos anteriores.

¿Por qué es necesario ejecutar los tres primeros comandos en este orden para desactivar totalmente un servicio systemd?

¿Por qué el comando daemon-reload es indispensable en este proceso?

Y finalmente, ¿cuál es el riesgo si se olvida la eliminación de la carpeta /var/log/malicious?

Respuesta:

............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ...............................................................................................................................


Paso 4 – Validación final​

Verificación de la detención del servicio:

sudo systemctl status logservice

Verificación de la eliminación del directorio:

ls -la /var/log/malicious

Pregunta 12:

Explique qué permiten verificar estos dos comandos.

¿Qué debería observar en su salida respectiva si el servicio ha sido neutralizado correctamente y si los archivos maliciosos han sido eliminados correctamente?

Respuesta esperada:

............................................................................................................................... ............................................................................................................................... ............................................................................................................................... ...............................................................................................................................


Pregunta 13:

13.1. Identificación​

  1. ¿Qué comando detectó el directorio problemático?

Respuesta: ...............................................................................................................................

  1. ¿Cuál era el nombre exacto del proceso malicioso?

Respuesta: ...............................................................................................................................

  1. ¿Qué comando permitió obtener su PID?

Respuesta: ...............................................................................................................................

13.2. Detención del proceso​

  1. ¿Comando utilizado para una detención forzada?

Respuesta: ...............................................................................................................................

  1. ¿El proceso volvió automáticamente?

Respuesta: ...............................................................................................................................

  1. ¿Comando eficaz para detener definitivamente el servicio?

Respuesta: ...............................................................................................................................

13.3. Desactivación y limpieza​

  1. ¿Comando utilizado para eliminar definitivamente el servicio?

Respuesta: ...............................................................................................................................

  1. ¿Comando utilizado para eliminar los archivos generados?

Respuesta: ...............................................................................................................................

13.4. Preguntas de comprensión​

  1. ¿Por qué kill -9 es insuficiente contra ciertos servicios?

Respuesta: ...............................................................................................................................

  1. ¿Qué significa Restart=always en un archivo .service?

Respuesta: ...............................................................................................................................

  1. ¿Comando para recargar la configuración de los servicios systemd?

Respuesta: ...............................................................................................................................


BONUS (OPCIONAL)​

Crear un servicio hello.service que escriba la fecha actual cada 5 segundos en /tmp/bonjour.log:

  • Script: /opt/bonjour.sh
  • Servicio: /etc/systemd/system/hello.service

Inserte su solución en el informe final si lo ha realizado.


ENTREGABLE FINAL ESPERADO​

Contenido requerido:

  • Todos los comandos utilizados en anexo
  • Observaciones detalladas
  • Respuestas completas a las preguntas
  • Solución bonus si se realizó

Examen creado el: Diciembre 2024