El kernel de Linux es el núcleo del sistema operativo, y gran parte de su comportamiento se puede modificar sin necesidad de reiniciar el equipo. Cientos de parámetros ajustables controlan aspectos como la gestión de memoria, la pila de red, los límites de procesos y la seguridad.
15.1. Introducción: afinando el corazón del sistema
Un administrador debe saber consultar y modificar estos parámetros es fundamental para optimizar el rendimiento, resolver problemas y endurecer la seguridad. En el examen LFCS se espera que puedas:
- Leer y modificar parámetros del kernel en caliente usando
sysctl. - Hacer persistentes esos cambios mediante archivos de configuración.
- Entender la estructura del pseudo-sistema de archivos
/proc/sys/. - Aplicar ajustes comunes de red, memoria y seguridad.
15.2. El sistema de archivos virtual /proc/sys/
Toda la interfaz de parámetros del kernel se expone a través del directorio virtual /proc/sys/. Cada subdirectorio contiene “archivos” que representan variables del kernel, y cuyo contenido puede leerse o escribirse como si fueran archivos normales (aunque residen en memoria y no en disco).
15.2.1. Estructura principal
| Directorio | Ámbito |
|---|---|
/proc/sys/kernel/ | Parámetros generales del kernel (hostname, cola de mensajes, límites de procesos, etc.) |
/proc/sys/net/ | Configuración de red (IPv4, IPv6, filtros, reenvío) |
/proc/sys/vm/ | Gestión de memoria virtual (swappiness, overcommit, dirty pages) |
/proc/sys/fs/ | Límites de sistema de archivos (máximo de archivos abiertos, cuotas, inotify) |
/proc/sys/dev/ | Parámetros de dispositivos (generalmente específicos) |
/proc/sys/user/ | Límites relacionados con namespaces de usuario |
15.2.2. Consulta directa de un parámetro
Al ser archivos, podemos usar cat:
cat /proc/sys/kernel/hostname
cat /proc/sys/net/ipv4/ip_forward
Los valores suelen ser 0 (desactivado/falso) o 1 (activado/verdadero), aunque algunos contienen números enteros (tamaños, tiempos) o cadenas.
15.2.3. Modificación directa temporal
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "nuevo-nombre" > /proc/sys/kernel/hostname
Estos cambios surten efecto de inmediato, pero no sobreviven a un reinicio. Para modificaciones persistentes necesitamos la herramienta sysctl.
15.3. El comando sysctl: gestión centralizada
sysctl está diseñado para leer y escribir parámetros del kernel usando una notación de puntos en lugar de rutas de archivos. Por ejemplo, /proc/sys/net/ipv4/ip_forward se expresa como net.ipv4.ip_forward.
15.3.1. Leer valores
Leer un parámetro concreto:
sysctl net.ipv4.ip_forward
Leer todos los parámetros (o los que coincidan con un patrón):
sysctl -a | less
sysctl -a | grep swappiness
sysctl net.ipv4 # lista todos los de IPv4
Mostrar solo el valor sin el nombre de la clave (útil en scripts):
sysctl -n kernel.hostname
15.3.2. Escribir valores (temporal)
sysctl -w net.ipv4.ip_forward=1
sysctl -w vm.swappiness=10
El cambio es inmediato y se refleja tanto en /proc/sys/ como en el comportamiento del kernel.
15.3.3. Cargar configuraciones desde archivo
sysctl -p /etc/sysctl.conf
sysctl -p /etc/sysctl.d/99-mi-ajuste.conf
Si no se especifica archivo, sysctl -p carga /etc/sysctl.conf. Esta es la forma de aplicar configuraciones persistentes después de haberlas escrito en los archivos de configuración.
15.4. Persistencia de los parámetros: archivos de configuración
Para que los ajustes sobrevivan a los reinicios, se definen en los archivos de configuración de sysctl. La jerarquía es:
/etc/sysctl.conf: archivo principal, aunque en muchas distribuciones modernas es casi un placeholder./etc/sysctl.d/*.conf: directorio donde se colocan configuraciones adicionales. Los archivos se procesan en orden alfabético. Es la ubicación recomendada para cambios personalizados./run/sysctl.d/*.conf: configuración efímera (se borra al reiniciar)./usr/lib/sysctl.d/*.conf: configuraciones empaquetadas por la distribución.
El formato es simple: una línea clave = valor. Los comentarios van con #.
Ejemplo de archivo /etc/sysctl.d/99-swap.conf:
# Reducir agresividad de swap
vm.swappiness = 10
Después de crear o modificar el archivo, aplica los cambios con sysctl -p /etc/sysctl.d/99-swap.conf (o --system para cargar todos).
Consejo: usa nombres de archivo con prefijo numérico para controlar el orden de carga (ej. 50-seguridad.conf, 99-rendimiento.conf).
15.5. Parámetros esenciales que debes conocer
15.5.1. Kernel
| Parámetro | Descripción | Valor típico |
|---|---|---|
kernel.hostname | Nombre del host (FQDN) | servidor.ejemplo.com |
kernel.pid_max | PID máximo (límite de procesos) | 4194304 (por defecto 32768) |
kernel.threads-max | Número máximo de hilos | kernel.pid_max * 4 (por defecto) |
kernel.sysrq | Activar Magic SysRq (teclas de rescate) | 0 (desactivado), 1 (todas las funciones) |
kernel.core_pattern | Patrón de nombre para volcados de núcleo (core dumps) | core o una ruta |
kernel.msgmax, kernel.msgmnb | Tamaño máximo de mensajes en colas IPC | Ajustar para bases de datos |
15.5.2. Red IPv4
| Parámetro | Descripción | Valor típico |
|---|---|---|
net.ipv4.ip_forward | Reenvío de paquetes (enrutador) | 0 (desactivado) / 1 |
net.ipv4.tcp_syncookies | Protección contra SYN flood | 1 (activado) |
net.ipv4.conf.all.rp_filter | Filtro de ruta inversa (anti-spoofing) | 1 (estricto) / 2 (flexible) |
net.ipv4.conf.all.accept_redirects | Aceptar redirecciones ICMP (riesgo seguridad) | 0 (desactivar en servidores) |
net.ipv4.conf.all.send_redirects | Enviar redirecciones (solo routers) | 0 en servidores |
net.ipv4.icmp_echo_ignore_all | Ignorar todos los pings (convertir en sordo al ping) | 0 (por defecto) |
net.ipv4.tcp_keepalive_time | Segundos de inactividad antes de enviar keepalive TCP | 7200 (por defecto), a veces se reduce |
15.5.3. Memoria virtual (VM)
| Parámetro | Descripción | Valor típico |
|---|---|---|
vm.swappiness | Tendencia a usar swap (0-100) | 60 (por defecto); 10 para mantener procesos en RAM; 0 solo bajo presión extrema |
vm.vfs_cache_pressure | Tendencia a liberar caché de directorios e inodos (0-200) | 100 (por defecto); valores bajos retienen más caché |
vm.dirty_ratio | Porcentaje de RAM a partir del cual escrituras sucias se vuelven síncronas | 20 (ajustar para servidores de BD) |
vm.dirty_background_ratio | Porcentaje de RAM que activa escritura en segundo plano | 10 |
vm.overcommit_memory | Política de sobreasignación de memoria: 0 heurística, 1 siempre permitir, 2 denegar | 0 o 2 (servidores seguros) |
vm.overcommit_ratio | Porcentaje de RAM + swap para overcommit modo 2 | 50 (por defecto) |
vm.nr_hugepages | Número de páginas grandes (hugepages) | Según necesidad (BD, virtualización) |
15.5.4. Sistema de archivos (FS)
| Parámetro | Descripción | Valor típico |
|---|---|---|
fs.file-max | Número máximo de descriptores de archivo abiertos en todo el sistema | Aumentar en servidores muy cargados (ej. 2097152) |
fs.inotify.max_user_watches | Límite de archivos observados con inotify por usuario | 65536 o más para entornos de desarrollo (IDE) |
fs.aio-max-nr | Número máximo de operaciones de E/S asíncrona | 65536 para bases de datos |
15.5.5. Seguridad y límites
| Parámetro | Descripción |
|---|---|
kernel.yama.ptrace_scope | Restringe el uso de ptrace (1 = solo descendientes, 2 = solo root, 3 = desactivado completamente) |
kernel.randomize_va_space | ASLR: 0 (desactivado), 1 (parcial), 2 (completo, por defecto) |
kernel.kptr_restrict | Oculta direcciones de kernel en /proc (1 = oculta a usuarios no root) |
kernel.dmesg_restrict | Restringe acceso a dmesg (1 = solo root) |
user.max_user_namespaces | Número máximo de namespaces de usuario (ataque de superficie) |
15.6. El servicio systemd-sysctl
En sistemas con systemd, existe el servicio systemd-sysctl.service que aplica los parámetros durante el arranque leyendo los archivos de configuración comentados. No es necesario interactuar directamente con él, pero puedes verificar su estado:
systemctl status systemd-sysctl
Si realizas cambios en la configuración y quieres aplicarlos sin reiniciar ni usar sysctl -p archivo por archivo, puedes ejecutar:
systemctl restart systemd-sysctl
Esto aplicará todos los archivos de /etc/sysctl.d/, /run/sysctl.d/ y /usr/lib/sysctl.d/. Es muy cómodo y seguro.
15.7. Ejemplos prácticos de ajuste
15.7.1. Activar el reenvío de IP (convertir el equipo en router)
sysctl -w net.ipv4.ip_forward=1
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.d/99-router.conf
15.7.2. Reducir el uso de swap (sistema con mucha RAM)
sysctl -w vm.swappiness=10
echo "vm.swappiness = 10" >> /etc/sysctl.d/99-rendimiento.conf
15.7.3. Proteger contra ataques de red básicos
Crear /etc/sysctl.d/50-hardening.conf:
# Ignorar pings
net.ipv4.icmp_echo_ignore_all = 1
# Protección contra IP spoofing
net.ipv4.conf.all.rp_filter = 1
# Desactivar redirecciones ICMP (no somos router)
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
# Cookies SYN contra ataques de inundación
net.ipv4.tcp_syncookies = 1
# Registrar paquetes con direcciones imposibles (martians)
net.ipv4.conf.all.log_martians = 1
15.7.4. Aumentar límite de archivos abiertos para un servidor ocupado
fs.file-max = 2097152
15.7.5. Habilitar Magic SysRq para recuperación de sistema congelado
El Magic SysRq permite enviar comandos de bajo nivel al kernel mediante combinaciones de teclas (ej. Alt+ImprPant+REISUB para reiniciar limpiamente).
sysctl -w kernel.sysrq=1
echo "kernel.sysrq = 1" >> /etc/sysctl.d/99-sysrq.conf
Precaución: en entornos de producción, evalúa si es necesario; puede ser un vector de seguridad si hay acceso físico no controlado.
15.8. Verificación de cambios y depuración
- Comprueba que el cambio surtió efecto:
sysctl clave - O con
cat /proc/sys/ruta/al/parametro. - Si no se aplica tras reinicio: verifica que el archivo en
/etc/sysctl.d/tiene extensión.confy que no hay conflictos con otros archivos (se aplica el último en orden alfabético). sysctl --systemmuestra todos los archivos que cargaría y puede señalar errores de sintaxis.
15.9. Ejercicios prácticos
Exploración: Ejecuta
sysctl -ay redirige la salida a un archivo. Analiza las secciones (kernel, net, vm, fs). Identifica al menos 5 parámetros que no conocías y busca su significado enman 5 sysctl.do en la documentación del kernel.Cambio temporal vs persistente:
- Cambia el
kernel.hostnameconsysctl -w. Verifica que el cambio es inmediato. Reinicia y comprueba que se ha perdido. - Ahora añádelo a un archivo en
/etc/sysctl.d/y hazlo permanente. Comprueba tras reinicio.
- Cambia el
Ajuste de swappiness:
- Con
free -hyvmstat 1, observa el uso de swap actual. - Reduce
vm.swappinessa 10 y lanza una aplicación que consuma memoria (por ejemplo, un navegador pesado ostress). Observa si el sistema usa menos swap. - Restaura el valor original.
- Con
Enrutamiento:
- Activa
net.ipv4.ip_forward=1. Intenta hacer ping entre dos redes simuladas (con interfaces virtuales o máquinas virtuales). Desactívalo después.
- Activa
Hardening:
- Crea un archivo
/etc/sysctl.d/50-seguridad.confcon las medidas de protección descritas en la sección 15.7.3. Aplícalas consysctl --system. Verifica consysctl net.ipv4.icmp_echo_ignore_allque el ping está desactivado. Luego restaura para no perjudicar otras pruebas.
- Crea un archivo
SysRq:
- Habilita Magic SysRq. Presiona Alt+ImprPant+h en una consola de texto (o desde una máquina virtual) para ver la ayuda en el log del kernel (
dmesg | tail). No ejecutes comandos destructivos.
- Habilita Magic SysRq. Presiona Alt+ImprPant+h en una consola de texto (o desde una máquina virtual) para ver la ayuda en el log del kernel (
15.10. Resumen y consejos para LFCS
- La herramienta central es
sysctl, tanto para leer (-a,-n) como para escribir (-w) y cargar archivos (-p). - Para que un parámetro sobreviva a reinicios, se coloca en
/etc/sysctl.d/con extensión.conf. El archivo principal/etc/sysctl.conftambién funciona, pero es preferible usar el directorio. - Los cambios en caliente con
sysctl -woechosobre/proc/sys/son inmediatos pero volátiles. - Los ajustes de red (
net.ipv4.*), memoria (vm.*) y límites de archivos (fs.file-max) son los más frecuentes en el examen y en la vida real. - Comprueba siempre los valores después de aplicar cambios y ante la duda, ten una copia de seguridad de la configuración anterior.
- No cambies parámetros al azar en un sistema de producción sin entender su impacto; en el examen, limítate a lo que se pida y verifica cada paso.
Ahora que sabes cómo afinar el kernel, el siguiente capítulo nos introduce en el mundo de la seguridad con SELinux y AppArmor, dos sistemas de control de acceso obligatorio que protegen el sistema limitando lo que los procesos pueden hacer.
Descubre más desde CIBERED
Suscríbete y recibe las últimas entradas en tu correo electrónico.
