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 comandofuser: ¿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.serviceutilizando los siguientes comandos:systemctl list-units --type=service --state=running | grep -i wiki
ps aux | grep node
ls -l /etc/systemd/system/ | grep wikiExplique cómo estos comandos permiten confirmar la existencia de un servicio
systemdactivo. 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
systemdidentificado 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 stopysystemctl 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-cglsss -lptnfuser -k 3000/tcpjournalctl -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.serviceestá 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 stopsystemctl disablermdaemon-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 -9suele ser insuficiente en el caso de un servicio gestionado porsystemd?- 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-reloades 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
- ¿Qué comando detectó el directorio problemático?
Respuesta: ...............................................................................................................................
- ¿Cuál era el nombre exacto del proceso malicioso?
Respuesta: ...............................................................................................................................
- ¿Qué comando permitió obtener su PID?
Respuesta: ...............................................................................................................................
13.2. Detención del proceso
- ¿Comando utilizado para una detención forzada?
Respuesta: ...............................................................................................................................
- ¿El proceso volvió automáticamente?
Respuesta: ...............................................................................................................................
- ¿Comando eficaz para detener definitivamente el servicio?
Respuesta: ...............................................................................................................................
13.3. Desactivación y limpieza
- ¿Comando utilizado para eliminar definitivamente el servicio?
Respuesta: ...............................................................................................................................
- ¿Comando utilizado para eliminar los archivos generados?
Respuesta: ...............................................................................................................................
13.4. Preguntas de comprensión
- ¿Por qué
kill -9es insuficiente contra ciertos servicios?
Respuesta: ...............................................................................................................................
- ¿Qué significa
Restart=alwaysen un archivo.service?
Respuesta: ...............................................................................................................................
- ¿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