Son las cinco y media de la madrugada en el SOC. Ayer saltó una alerta en Radio Onda Norte: srv-emisora, su servidor, tenía la instalación cambiada. Se cortó el acceso de fuera y ya no hay nadie dentro: el incidente está contenido. Lo que queda es lo que hoy toca: dejar el servidor como estaba antes de que la emisora salga al aire, a las siete, con su programa de la mañana.
Contener no es arreglar. Mientras lo de dentro siga cambiado, el servidor no es de fiar: puede volver a hacer lo que no debe, y la próxima comprobación saltará otra vez. Volver a la normalidad es saber qué cambió, sacar lo de antes de una copia que esté limpia (sin perder lo bueno que ha pasado desde entonces), cerrar lo que dejó entrar y cambiar lo que pudo verse: contraseñas y claves. La nota del SOC de ayer lo resume:
tecnico@srv-emisora:~$ cat ~/nota-de-ayer.txt Nota del SOC, de ayer (21/10 a las 09:40) Saltó la comprobación de integridad de srv-emisora: la instalación no casa con su lista de sumas. Se cortó el acceso de fuera; no hay nadie dentro. Pendiente, antes de que la emisora salga al aire a las 07:00: - dejar la instalación como antes, de una copia limpia (sin perder los programas); - subir lo pendiente de apt (libssl3 y openssl); - contraseñas nuevas para locutor y produccion; - quitar las claves que no sean de nadie de la ficha; - el informe.
Y la ficha dice qué es cada cosa:
tecnico@srv-emisora:~$ cat ~/ficha-emisora.txt Radio Onda Norte · srv-emisora (192.168.60.10) Ficha del SOC La emisión: onda-emision.service (el programa, /opt/onda/emitir, con la cuenta onda). En el aire cada día a las 07:00, con el programa de la mañana. La instalación: /opt/onda y su web, /var/www/onda. Su lista de sumas, la de cuando se instaló: /var/backups/onda/SHA256SUMS. Los programas: /srv/onda/programas (el de cada mañana se sube la noche antes). Las copias: cada noche a las 03:00, en /var/backups/onda (la instalación y los programas). Las cuentas: tecnico el SOC (por la VPN) locutor el estudio; su clave: locutor@estudio produccion la mesa de producción; su clave: produccion@mesa
La lista de sumas
Cuando se instaló la emisora se hizo una lista de sumas: una línea por archivo, con su SHA-256 y su ruta. La suma cambia en cuanto cambia un solo byte del archivo, y no hay forma práctica de cambiar un archivo y que su suma siga siendo la misma.
tecnico@srv-emisora:~$ cat /var/backups/onda/SHA256SUMS fe1a41acfe747a5ac11ee2b5376899b7d4a923957bfa93019391e31356caa9f6 opt/onda/emitir d09665abe15a13965553b651fe4d8136c665419cd899e6829efb2ed9a9e8e89f opt/onda/onda.conf 82af8fa0cf6774be6da6324f2b988031a42709c47ff4c7240e7ca8d3fd46528d opt/onda/parrilla.txt f1d0e7723906b4ac645cf3b4ce3b997a2ef1d1e127df9ea51b0472668700ac5c var/www/onda/index.html f510c5d90311604c34567b884ef1abbba740460ce28af72e0fafcbba3ef0ead9 var/www/onda/programas.html
sha256sum saca la suma de un archivo:
tecnico@srv-emisora:~$ sha256sum /opt/onda/onda.conf d09665abe15a13965553b651fe4d8136c665419cd899e6829efb2ed9a9e8e89f /opt/onda/onda.conf
Y con -c comprueba una lista entera: lee cada línea, saca la suma del archivo y dice OK o FAILED.
Las rutas de esta lista van sin la / del principio, así que se comprueba desde /:
tecnico@srv-emisora:~$ cd / && sha256sum -c /var/backups/onda/SHA256SUMS opt/onda/emitir: OK opt/onda/onda.conf: OK opt/onda/parrilla.txt: OK var/www/onda/index.html: OK var/www/onda/programas.html: FAILED sha256sum: WARNING: 1 computed checksum did NOT match
tecnico@srv-emisora:/$ cd /tmp && sha256sum -c --quiet /var/backups/onda/SHA256SUMS sha256sum: opt/onda/emitir: No such file or directory opt/onda/emitir: FAILED open or read sha256sum: opt/onda/onda.conf: No such file or directory opt/onda/onda.conf: FAILED open or read sha256sum: opt/onda/parrilla.txt: No such file or directory opt/onda/parrilla.txt: FAILED open or read sha256sum: var/www/onda/index.html: No such file or directory var/www/onda/index.html: FAILED open or read sha256sum: var/www/onda/programas.html: No such file or directory var/www/onda/programas.html: FAILED open or read sha256sum: WARNING: 5 listed files could not be read
tecnico@srv-emisora:/tmp$ cd
La lista solo ve lo que tiene apuntado: un archivo de más no sale. Para eso, lo que ha cambiado
desde una fecha: find -newer (más nuevo que otro archivo, aquí la primera copia) o -newermt
(más nuevo que una fecha).
tecnico@srv-emisora:~$ find /opt/onda /var/www/onda -newer /var/backups/onda/onda-2026-10-19.tar.gz /opt/onda /opt/onda/plantillas /opt/onda/plantillas/aviso.sh /var/www/onda /var/www/onda/programas.html
Ejercicio
Qué no casa: sha256sum -c contra la lista
En srv-emisora, comprueba la instalación contra su lista de sumas (/var/backups/onda/SHA256SUMS, con las rutas desde /) y busca lo que hay de más, que la lista no ve.
Preparando la máquina…
Qué copia está limpia
Hay una copia por noche, a las tres:
tecnico@srv-emisora:~$ ls -l /var/backups/onda total 14716 -rw-r--r-- 1 root root 439 Sep 20 11:00 SHA256SUMS -rw-r--r-- 1 root root 2704943 Oct 19 03:00 onda-2026-10-19.tar.gz -rw-r--r-- 1 root root 3417394 Oct 20 03:00 onda-2026-10-20.tar.gz -rw-r--r-- 1 root root 4155337 Oct 21 03:00 onda-2026-10-21.tar.gz -rw-r--r-- 1 root root 4779724 Oct 22 03:00 onda-2026-10-22.tar.gz
tar -tvzf enseña lo que lleva una copia, con la fecha de cada archivo. La de esta madrugada ya lleva
el archivo de más:
tecnico@srv-emisora:~$ tar -tvzf /var/backups/onda/onda-2026-10-22.tar.gz opt/onda drwxr-xr-x root/root 0 2026-10-19 22:15 opt/onda/ -rwxr-xr-x root/root 90 2026-09-20 11:00 opt/onda/emitir -rw-r--r-- root/root 129 2026-09-20 11:00 opt/onda/onda.conf -rw-r--r-- root/root 58 2026-09-20 11:00 opt/onda/parrilla.txt drwxr-xr-x root/root 0 2026-10-19 22:15 opt/onda/plantillas/ -rwxr-xr-x root/root 45 2026-10-19 22:15 opt/onda/plantillas/aviso.sh
La forma segura de saber si una copia está limpia es la misma lista: se saca la copia a una carpeta
aparte (nunca encima de /) y se comprueba allí.
tecnico@srv-emisora:~$ mkdir -p /tmp/c22 && tar -xzf /var/backups/onda/onda-2026-10-22.tar.gz -C /tmp/c22
tecnico@srv-emisora:~$ cd /tmp/c22 && sha256sum -c /var/backups/onda/SHA256SUMS opt/onda/emitir: OK opt/onda/onda.conf: OK opt/onda/parrilla.txt: OK var/www/onda/index.html: OK var/www/onda/programas.html: FAILED sha256sum: WARNING: 1 computed checksum did NOT match
tecnico@srv-emisora:/tmp/c22$ mkdir -p /tmp/c19 && tar -xzf /var/backups/onda/onda-2026-10-19.tar.gz -C /tmp/c19
tecnico@srv-emisora:/tmp/c22$ cd /tmp/c19 && sha256sum -c /var/backups/onda/SHA256SUMS opt/onda/emitir: OK opt/onda/onda.conf: OK opt/onda/parrilla.txt: OK var/www/onda/index.html: OK var/www/onda/programas.html: OK
Esa sí casa entera. Y diff -rq dice, carpeta contra carpeta, lo que hay distinto o solo en una:
tecnico@srv-emisora:/tmp/c19$ cd
tecnico@srv-emisora:~$ diff -rq /tmp/c19/opt/onda /opt/onda Only in /opt/onda: plantillas
Ejercicio
Qué copia está limpia: tar -t, tar -x en otra carpeta y sha256sum -c
Hay una copia por noche en /var/backups/onda. Mira qué lleva cada una y encuentra la última que casa entera con la lista, sacándola a una carpeta aparte (nunca encima de /).
Preparando la máquina…
Dejarla como antes
tar -d (o --diff) compara una copia con lo que hay ahora: la hora, el tamaño y el contenido de
cada archivo de la copia.
tecnico@srv-emisora:~$ sudo tar -dzf /var/backups/onda/onda-2026-10-19.tar.gz -C / opt/onda var/www/onda var/www/onda/programas.html: Mod time differs var/www/onda/programas.html: Size differs
Se saca solo lo de la instalación (opt/onda y var/www/onda): los programas de la emisora están en
la misma copia, pero los de después de esa noche no, y sacar la copia entera encima no los quita…
salvo que alguien borre antes la carpeta para «dejarlo limpio». Las copias de cada noche se hacen al
revés, con -c (crear): cd / && sudo tar -czf <archivo> opt/onda var/www/onda guarda lo que haya
en ese momento, así que una copia de referencia se hace cuando la lista ya da todo OK.
tecnico@srv-emisora:~$ sudo mv /opt/onda /root/onda-incidente
tecnico@srv-emisora:~$ sudo tar -xzvf /var/backups/onda/onda-2026-10-19.tar.gz -C / opt/onda var/www/onda opt/onda/ opt/onda/emitir opt/onda/onda.conf opt/onda/parrilla.txt var/www/onda/ var/www/onda/index.html var/www/onda/programas.html
tecnico@srv-emisora:~$ cd / && sha256sum -c /var/backups/onda/SHA256SUMS opt/onda/emitir: OK opt/onda/onda.conf: OK opt/onda/parrilla.txt: OK var/www/onda/index.html: OK var/www/onda/programas.html: OK
tecnico@srv-emisora:/$ ls /srv/onda/programas 2026-10-16-manana.mp3 2026-10-19-manana.mp3 2026-10-22-manana.mp3 2026-10-17-manana.mp3 2026-10-20-manana.mp3 2026-10-18-manana.mp3 2026-10-21-manana.mp3
La emisión sigue con el programa de antes cargado: se arranca de nuevo con lo restaurado.
tecnico@srv-emisora:/$ sudo systemctl restart onda-emision
tecnico@srv-emisora:/$ systemctl status onda-emision --no-pager -n 0 ● onda-emision.service - Radio Onda Norte: la emision Loaded: loaded (/etc/systemd/system/onda-emision.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2026-10-22 05:30:22 UTC; 1s ago Main PID: 403 (emitir) Tasks: 2 (limit: 4556) Memory: 4.8M CPU: 1us CGroup: /system.slice/onda-emision.service ├─403 /bin/bash /opt/onda/emitir └─404 sleep 60
tecnico@srv-emisora:~$ sudo mv /opt/onda /root/onda-incidente
tecnico@srv-emisora:~$ sudo systemctl restart onda-emision
tecnico@srv-emisora:~$ systemctl status onda-emision --no-pager -n 3 × onda-emision.service - Radio Onda Norte: la emision Loaded: loaded (/etc/systemd/system/onda-emision.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since Thu 2026-10-22 05:30:02 UTC; 1s ago Process: 407 ExecStart=/opt/onda/emitir (code=exited, status=203/EXEC) Main PID: 407 (code=exited, status=203/EXEC) CPU: 1ms Oct 22 05:30:02 srv-emisora systemd[1]: onda-emision.service: Start request…kly. Oct 22 05:30:02 srv-emisora systemd[1]: onda-emision.service: Failed with r…de'. Oct 22 05:30:02 srv-emisora systemd[1]: Failed to start Radio Onda Norte: l…ion. Hint: Some lines were ellipsized, use -l to show in full.
Ejercicio
Dejarla como antes: apartar, tar -x de lo de la instalación y systemctl
Deja la instalación (/opt/onda y /var/www/onda) como en la copia limpia, sin perder los programas subidos desde entonces, y con la emisión en marcha con lo restaurado. Lo de ahora, apártalo (no lo borres): es lo que mirará quien investigue.
Preparando la máquina…
Cerrar lo que quedó abierto
Restaurar deja los archivos como antes, pero no arregla por dónde pudo cambiar nada. La nota de ayer dice que hay paquetes pendientes:
tecnico@srv-emisora:/$ apt list --upgradable Listing... Done libssl3/jammy-updates,jammy-security 3.0.2-0ubuntu1.30 amd64 [upgradable from: 3.0.2-0ubuntu1.29] openssl/jammy-updates,jammy-security 3.0.2-0ubuntu1.30 amd64 [upgradable from: 3.0.2-0ubuntu1.29]
apt install --only-upgrade sube esos paquetes y nada más (si alguno no está instalado, no lo
instala):
tecnico@srv-emisora:/$ sudo apt install --only-upgrade -y libssl3 openssl Reading package lists... Done Building dependency tree... Done Reading state information... Done The following packages will be upgraded: libssl3 openssl 2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. Need to get 3093 kB of archives. After this operation, 4096 B of additional disk space will be used. Get:1 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libssl3 amd64 3.0.2-0ubuntu1.30 [1907 kB] Get:2 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 openssl amd64 3.0.2-0ubuntu1.30 [1186 kB] Fetched 3093 kB in 1s (2474 kB/s) (Reading database ... 71634 files and directories currently installed.) Preparing to unpack .../libssl3_3.0.2-0ubuntu1.30_amd64.deb ... Unpacking libssl3:amd64 (3.0.2-0ubuntu1.30) over (3.0.2-0ubuntu1.29) ... Preparing to unpack .../openssl_3.0.2-0ubuntu1.30_amd64.deb ... Unpacking openssl (3.0.2-0ubuntu1.30) over (3.0.2-0ubuntu1.29) ... Setting up libssl3:amd64 (3.0.2-0ubuntu1.30) ... Setting up openssl (3.0.2-0ubuntu1.30) ... Processing triggers for libc-bin (2.35-0ubuntu3.15) ... Scanning processes... Scanning linux images... Running kernel seems to be up-to-date. No services need to be restarted. No containers need to be restarted. No user sessions are running outdated binaries. No VM guests are running outdated hypervisor (qemu) binaries on this host.
Ejercicio
Lo pendiente de apt: apt list --upgradable y --only-upgrade
La nota de ayer dice que hay paquetes por subir. Mira cuáles y súbelos sin instalar nada nuevo.
Preparando la máquina…
Contraseñas y claves
Lo que se pudo ver desde dentro hay que darlo por visto. Las claves de cada cuenta, con su huella y su comentario:
tecnico@srv-emisora:/$ sudo ssh-keygen -lf /home/locutor/.ssh/authorized_keys 256 SHA256:FGKYGmgevoWP4aZsgtFsrrAyvhVIcMBv/LFw5TCvwzc locutor@estudio (ED25519) 256 SHA256:TmPMFGhXlcMnexWKVVo7fKPLUFumTom2UZGyx5h5//E admin@equipo-2 (ED25519)
La del locutor está en la ficha; la otra no es de nadie. Se quita esa línea (solo esa: si se va la de
la ficha, o se bloquea la cuenta, quien tiene que entrar se queda fuera;
cat su-clave.pub | sudo tee -a <su authorized_keys> la vuelve a poner y
sudo usermod -U <cuenta> la desbloquea) y se comprueba:
tecnico@srv-emisora:/$ sudo sed -i '/admin@equipo-2$/d' /home/locutor/.ssh/authorized_keys
tecnico@srv-emisora:/$ sudo ssh-keygen -lf /home/locutor/.ssh/authorized_keys 256 SHA256:FGKYGmgevoWP4aZsgtFsrrAyvhVIcMBv/LFw5TCvwzc locutor@estudio (ED25519)
Y contraseñas nuevas: chpasswd las lee de la entrada, usuario:contraseña por línea.
tecnico@srv-emisora:/$ printf 'locutor:Onda-Norte-2210\nproduccion:Mesa-Norte-2210\n' | sudo chpasswd
tecnico@srv-emisora:/$ sudo passwd -S locutor locutor P 10/22/2026 0 99999 7 -1
Si la contraseña nueva la tiene que poner la persona, chage -d 0 hace que la cambie al entrar:
tecnico@srv-emisora:/$ sudo chage -d 0 produccion
tecnico@srv-emisora:/$ sudo chage -l produccion Last password change : password must be changed Password expires : password must be changed Password inactive : password must be changed Account expires : never Minimum number of days between password change : 0 Maximum number of days between password change : 99999 Number of days of warning before password expires : 7
Ejercicio
Las cuentas: claves de más (ssh-keygen -lf) y contraseñas nuevas (chpasswd)
La ficha (~/ficha-emisora.txt) dice de quién es cada clave. Quita de las authorized_keys la que no es de nadie y pon contraseñas nuevas a locutor y produccion.
Preparando la máquina…
En la sala: antes de las siete
En la sala estás en el SOC a las cinco y media, con srv-emisora en tu puesto y la emisión a las siete. Cada orden gasta su tiempo en el reloj. Si restauras de una copia que no está limpia, o dejas algo de más, la comprobación de integridad vuelve a saltar. Si borras los programas de después de la copia, la emisora no tiene su programa de la mañana. Y si a las siete la emisión no está en marcha, es servicio caído. La nota mira además el paquete, las claves y las contraseñas, y el informe cuenta qué cambió, desde cuándo y de qué copia volviste.