Ghost AcademySecLearn// Seguridad Informática
🖥️ Linux · Personalización · Banners de Login
Personalización del Servidor

Configura mensajes de bienvenida, banners de acceso y MOTD dinámico en tu servidor Linux. Cubre /etc/issue, /etc/issue.net, /etc/motd y arte ASCII con figlet.

/etc/issue/etc/issue.net /etc/motdupdate-motd.d figletlolcatSSH banner

Flujo de Login y Mensajes

Linux permite personalizar varios mensajes que aparecen durante el proceso de autenticación. Cada uno se muestra en un momento diferente y sirve un propósito distinto.

Los 3 Archivos Clave

/etc/issue
⏱ Antes del login (consola)
Banner que aparece en terminales TTY físicas antes de pedir usuario/contraseña. Soporta códigos de escape como \d, \t, \n, \4.
/etc/issue.net
⏱ Antes del login (SSH/Telnet)
Equivalente a /etc/issue pero para conexiones remotas. Requiere Banner /etc/issue.net en sshd_config. Ideal para advertencias legales.
/etc/motd
⏱ Después del login exitoso
Message of the Day. Se muestra tras autenticación correcta en consola y SSH. Puede ser estático o dinámico vía /etc/update-motd.d/.

/etc/issue — Banner Pre-Login (Consola)

Este mensaje se presenta al solicitar los datos de autenticación cuando se accede directamente desde una terminal física al sistema.

bash — Editar
sudo nano /etc/issue

Códigos de escape disponibles

El archivo /etc/issue soporta códigos de escape especiales: una barra inversa \ seguida de una letra.

CódigoMuestra
\bVelocidad en baudios de la línea actual.
\dFecha actual.
\tHora actual.
\sNombre del sistema operativo.
\lNombre de la línea TTY actual.
\mArquitectura de la máquina (ej. x86_64).
\nNombre de host (hostname).
\oNombre de dominio del equipo.
\rVersión del kernel (ej. 6.5.0).
\uNúmero de usuarios actualmente logueados (solo el número).
\UCadena completa «N usuario(s) logueados».
\vVersión del SO (fecha de compilación, etc.).
\4Dirección IP de la máquina.
\4{eth0}Solo la IP de la interfaz eth0 (si hay varias).
💡 Ver todas las opciones: man getty muestra la referencia completa de los códigos de escape admitidos en tu sistema.

/etc/issue.net — Banner SSH/Telnet

Cumple una función similar a /etc/issue, pero se muestra cuando un usuario intenta conectarse al servidor de forma remota a través de SSH o Telnet, antes de que se solicite la autenticación.

  • Cuándo se muestra: Antes del prompt de usuario del servicio SSH.
  • Códigos de escape: Soporta los mismos que /etc/issue (\r, \m, \4, etc.).
  • Uso recomendado: Advertencias legales de acceso, logo del sistema, información de contacto.
bash — Editar
sudo nano /etc/issue.net

Ejemplo de contenido

Ejemplo — /etc/issue.net
FEVAL SERVER
-----------------------------------
ACCESO RESTRINGIDO - SERVIDOR PRIVADO
USER: feval
===================================
\S
Kernel \r en \m
IP: \4
Hostname: \n
Fecha: \d
Hora: \t
Usuarios Logueados: \u
ℹ️ Activación en SSH: Para que /etc/issue.net se muestre al conectar por SSH, hay que añadir la línea Banner /etc/issue.net en /etc/ssh/sshd_config y reiniciar el servicio SSH con sudo systemctl restart sshd.

/etc/motd — Message of the Day

El MOTD es probablemente el más útil para la personalización. Se muestra al usuario después de que inicia sesión correctamente, tanto en consola como por SSH.

A diferencia de /etc/issue, el MOTD puede ser dinámico a través de scripts en /etc/update-motd.d/.

/etc/motd
Contenido estático
Texto fijo que se muestra siempre igual. Puedes añadir contenido directamente aquí.
/etc/update-motd.d/
Scripts dinámicos (recomendado)
Scripts ejecutables numerados que generan contenido en tiempo real cada vez que alguien inicia sesión.

Crear un script de MOTD dinámico

PASO 1 — Crear el script
bash
sudo nano /etc/update-motd.d/90-custom-message
PASO 2 — Contenido del script
bash — Script con información dinámica
#!/bin/bash
echo "============================================================"
echo "¡BIENVENIDO AL SERVIDOR, ${USER}!"
echo "El uso actual del disco en / es: $(df -h / | awk 'NR==2 {print $5}')"
echo "Último inicio de sesión: $(last -1 | grep -v 'wtmp' | awk '{print $4, $5, $6}')"
echo "============================================================"
PASO 3 — Dar permisos de ejecución
bash
sudo chmod +x /etc/update-motd.d/90-custom-message
💡 Numeración de scripts: Los scripts en /etc/update-motd.d/ se ejecutan en orden numérico ascendente. Usa prefijos como 00-, 10-, 90- para controlar el orden. Los números bajos se ejecutan primero.

Arte ASCII con figlet y lolcat

La forma más fácil de generar texto en arte ASCII es usando figlet y, opcionalmente, lolcat para darle color arcoíris.

INSTALAR herramientas
bash
sudo apt install figlet lolcat
PROBAR figlet
bash
echo "FEVAL SERVER" | figlet

# En dos líneas (más compacto):
echo -e "FEVAL\nSERVER" | figlet
Salida aproximada — fuente por defecto
 _____  _____  __     _    _     ____  _____ ____  _     _____ ____
|  ___||  ___| \ \   / /  / \   |  __||  ___| __ )| |   | ____|  _ \
| |_   | |_    \ \ / /  / _ \  | |   | |_  |  _ \| |   |  _| | |_) |
|  _|  |  _|    \ V /  / ___ \ | |   |  _| | |_) | |___| |___|  _ <
|_|    |___|     \_/  /_/   \_\|_|   |___| |____/|_____|_____|_| \_\
PROBAR lolcat (con color)
bash — Fuente slant con colores
printf "FEVAL\nSERVER\n" | figlet -f slant | lolcat
Salida aproximada — fuente slant
    ____  _    _________ __
   / __/ | |  / / ____/ //_
  / _/   | | / / __/ / ,<   
 / /___  | |/ / /___/ /| |  
/_____/  |___/_____/_/ |_|  
  _____ _____ ____  _    _____  ____
 / ___//  __// __ \| |  / ___/ / __ \
 \__ \ | |_  | |_) | | / /    / / / /
 ___/ /|  _| |  _ <| |/ /__ / /_/ /
/____/ |___| |_| \_\___\____/_____/
ℹ️ Más fuentes: Las fuentes de figlet están en /usr/share/figlet/. Prueba con figlet -f big, -f banner, -f block, -f lean etc. Lista todas con showfigfonts si lo instalas con apt install figlet-doc.

Insertar ASCII Art en /etc/issue

Como /etc/issue no soporta color (solo se ve en consola), usamos solo la salida de figlet sin lolcat. El proceso es en tres pasos.

⚠️ /etc/issue no soporta color ANSI porque se muestra antes de que el terminal esté completamente inicializado. Para color, usa el MOTD dinámico en /etc/update-motd.d/ donde lolcat sí funciona.
PASO 1 — Generar la salida y guardar en temporal
bash
# Sin lolcat — /etc/issue no soporta color
printf "FEVAL\nSERVER\n" | figlet -f slant > /tmp/temp_header.txt
PASO 2 — Concatenar y reemplazar el archivo
bash
# Fusionar: nuevo header + contenido original
cat /tmp/temp_header.txt /etc/issue > /tmp/temp_issue_merged.txt

# Mover el resultado al archivo original (requiere sudo)
sudo mv /tmp/temp_issue_merged.txt /etc/issue
PASO 3 — Limpiar el temporal
bash
rm /tmp/temp_header.txt

Script Dinámico — Regenerar en Cada Arranque

Para que /etc/issue muestre datos actualizados (como la IP actual) en cada arranque, crea un script que lo regenere automáticamente via /etc/rc.local o un servicio systemd.

bash — Script para regenerar /etc/issue en arranque
#!/bin/bash
echo "======================================" > /etc/issue
echo " SERVER - ACCESO RESTRINGIDO"         >> /etc/issue
echo " IP: $(hostname -I | awk '{print $1}')" >> /etc/issue
echo " Interfaz de red: $(hostname)"        >> /etc/issue
echo "=====================================" >> /etc/issue
uname -a                                    >> /etc/issue
🔄 Importante — Diferencia entre > y >>: La primera línea usa > para crear/sobreescribir el archivo desde cero. Las siguientes usan >> para añadir al final. Si todas usaran >>, cada arranque acumularía más líneas sin borrar las anteriores.
💡 Integración con systemd: Puedes crear una unidad systemd del tipo oneshot con After=network.target para que el script se ejecute justo después de que la red esté disponible, garantizando que la IP ya está asignada cuando se escribe en /etc/issue.

Configurar el Firewall para Telnet (Puerto 23)

Si el firewall UFW está activo, bloqueará el puerto 23 (Telnet) por defecto. Para permitir conexiones Telnet hay que abrirlo explícitamente.

bash
# Abrir el puerto 23 para Telnet
sudo ufw allow 23/tcp

# Verificar que la regla se aplicó
sudo ufw status
⚠️ Telnet no cifra el tráfico. Todas las contraseñas y datos viajan en texto plano por la red. Para acceso remoto seguro usa siempre SSH (puerto 22). Abre el puerto 23 solo en entornos de laboratorio o redes completamente aisladas.