¿Qué es un demonio?

Para cumplir con la disponibilidad de un servicio (de acuerdo a la tríada de la ciberseguridad), se pueden utilizar demonios de Linux, cuya definición es la siguiente:

Un demonio de Linux es un proceso que se ejecuta en segundo plano en el sistema operativo sin necesidad de alguna manipulación directa en una terminal.

Para habilitar y administrar los demonios en Linux se suele utilizar el gestor systemctl, que es el encargado de mostrar si algún servicio del sistema se ha detenido.

systemctl y systemd

systemctl es una herramienta de línea de comandos que permite controlar el sistema de init systemd. Sus funciones principales son:

  • Iniciar, detener y reiniciar servicios
  • Habilitar o deshabilitar servicios para que arranquen automáticamente
  • Ver el estado de los servicios
  • Gestionar demonios personalizados
systemd vs SysV init: systemd es el sistema de inicio moderno en la mayoría de distribuciones Linux (Ubuntu, Debian, Fedora, CentOS), reemplazando al tradicional SysV init.

Archivo de configuración .service

1

Estructura básica del archivo .service

server1.service
[Unit]
Description = Sistema de Registro
[Service]
ExecStart = /usr/bin/python3 /home/rasp/Servers/Registro/app.py
WorkingDirectory = /home/rasp/Servers/Registro
StandardOutput = inherit
StandardError = inherit
Restart = always
User = rasp
[Install]
WantedBy = multi-user.target

Secciones del archivo de configuración

El archivo de configuración consta de tres secciones principales:

1

Unit - Identidad del servicio

Define la identidad y metadata del servicio. La opción Description proporciona una descripción legible del servicio.

2

Service - Detalles y ubicación de la aplicación

Indica las opciones que definen cómo se ejecuta el servicio, qué programa corre y bajo qué condiciones.

OpciónDescripción
ExecStartComando exacto que systemd ejecuta para iniciar el servicio
WorkingDirectoryDefine el directorio de trabajo desde donde se ejecuta el programa
StandardOutput/StandardErrorLa salida se hereda y se registra en el journal de systemd
RestartEl servicio se reiniciará automáticamente si se detiene o falla
3

Install - Arranque automático

Define cómo y en qué momento el servicio debe integrarse al proceso de arranque del sistema.

WantedBy = multi-user.target: Indica que el servicio debe iniciarse automáticamente cuando el sistema alcance el estado multi-user, es decir, cuando el sistema ya está operativo, con red activa y listo para ejecutar servicios.

Creación de un demonio

Para crear un demonio de Linux, primero debemos implementar una aplicación. En este caso, será un servidor Web en Python con Flask.

1

Estructura de directorios

Estructura
Servers/
└── Registro/
├── app.py
└── templates/
└── index.html
Crear directorios
$ mkdir -p ~/Servers/Registro/templates
$ cd ~/Servers/Registro
2

Código del servidor (app.py)

app.py
from flask import Flask, render_template, request
import json
app = Flask(__name__)
@app.route("/", methods=["GET", "POST"])
def index():
if request.method == "GET":
return render_template("index.html")
resumen = {
"method": request.method,
"url": request.url,
"ip": request.remote_addr,
"user_agent": request.headers.get("User-Agent")
}
print(json.dumps(resumen, indent=4))
return resumen
if __name__ == "__main__":
app.run(host="0.0.0.0", port=30031, debug=False)
3

Plantilla HTML (templates/index.html)

templates/index.html
<!DOCTYPE html>
<html>
<head>
<title>Formulario</title>
</head>
<body>
<h1>Formulario</h1>
<form method="POST" action="/">
<input type="text" name="mensaje" placeholder="Escribe algo" required>
<button type="submit">Enviar</button>
</form>
</body>
</html>
4

Archivo de configuración del servicio

/etc/systemd/system/server1.service
[Unit]
Description = Sistema de Registro
[Service]
ExecStart = /usr/bin/python3 /home/usuario/Servers/Registro/app.py
WorkingDirectory = /home/usuario/Servers/Registro
StandardOutput = inherit
StandardError = inherit
Restart = always
User = usuario
[Install]
WantedBy = multi-user.target
Importante: Debes verificar las rutas donde se encuentra app.py, el usuario y el directorio de trabajo. Para identificar estos datos usa pwd y whoami.
Crear archivo de servicio
$ sudo nano /etc/systemd/system/server1.service
(Pegar código modificado, Ctrl+S, Ctrl+X)

Activación y comandos útiles

1

Comandos para habilitar un demonio

Comandos systemctl
$ sudo systemctl daemon-reload # Recargar la configuración de systemd
$ sudo systemctl enable server1.service # Habilitar para arranque automático
$ sudo systemctl start server1.service # Iniciar el servicio
$ sudo systemctl status server1.service # Verificar el estado
¡Servicio activo! Una vez colocados estos comandos, visita la URL del servidor: http://localhost:30031 y deberás ver una página web.
Prueba final: Reinicia el sistema operativo, espera a que arranque y vuelve a visitar la misma dirección. El servicio debería seguir funcionando automáticamente.
Comandos útiles para systemctl
$ sudo systemctl status server1.service # Ver estado de un servicio
$ sudo systemctl stop server1.service # Detener un servicio
$ sudo systemctl restart server1.service # Reiniciar un servicio
$ sudo journalctl -u server1.service -f # Ver logs de un servicio
$ sudo systemctl disable server1.service # Deshabilitar un servicio
$ systemctl list-units --type=service --state=running # Listar servicios activos
$ systemctl is-enabled server1.service # Verificar si está habilitado

¿Qué sigue?

Con demonios en Linux puedes mantener servicios siempre disponibles:

Base de Datos

Configura MySQL/PostgreSQL como demonio

Servidor Web

Apache/Nginx siempre activos

Monitoreo

Servicios de vigilancia continua

Docker

Contenedores como servicios

¡Has completado el tutorial!

Ahora sabes cómo crear y configurar demonios en Linux usando systemctl. Esto te permite mantener servicios siempre disponibles, cumpliendo con el principio de disponibilidad de la tríada de ciberseguridad.