¿Cómo establecer parámetros del Kernel en tiempos de ejecución en Linux?

Aprender Certificado Fundación Linux en España contenido Técnicos desde Cero en CiberED

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ámetroDescripciónValor típico
kernel.hostnameNombre del host (FQDN)servidor.ejemplo.com
kernel.pid_maxPID máximo (límite de procesos)4194304 (por defecto 32768)
kernel.threads-maxNúmero máximo de hiloskernel.pid_max * 4 (por defecto)
kernel.sysrqActivar Magic SysRq (teclas de rescate)0 (desactivado), 1 (todas las funciones)
kernel.core_patternPatrón de nombre para volcados de núcleo (core dumps)core o una ruta
kernel.msgmax, kernel.msgmnbTamaño máximo de mensajes en colas IPCAjustar para bases de datos

15.5.2. Red IPv4

ParámetroDescripciónValor típico
net.ipv4.ip_forwardReenvío de paquetes (enrutador)0 (desactivado) / 1
net.ipv4.tcp_syncookiesProtección contra SYN flood1 (activado)
net.ipv4.conf.all.rp_filterFiltro de ruta inversa (anti-spoofing)1 (estricto) / 2 (flexible)
net.ipv4.conf.all.accept_redirectsAceptar redirecciones ICMP (riesgo seguridad)0 (desactivar en servidores)
net.ipv4.conf.all.send_redirectsEnviar redirecciones (solo routers)0 en servidores
net.ipv4.icmp_echo_ignore_allIgnorar todos los pings (convertir en sordo al ping)0 (por defecto)
net.ipv4.tcp_keepalive_timeSegundos de inactividad antes de enviar keepalive TCP7200 (por defecto), a veces se reduce

15.5.3. Memoria virtual (VM)

ParámetroDescripciónValor típico
vm.swappinessTendencia a usar swap (0-100)60 (por defecto); 10 para mantener procesos en RAM; 0 solo bajo presión extrema
vm.vfs_cache_pressureTendencia a liberar caché de directorios e inodos (0-200)100 (por defecto); valores bajos retienen más caché
vm.dirty_ratioPorcentaje de RAM a partir del cual escrituras sucias se vuelven síncronas20 (ajustar para servidores de BD)
vm.dirty_background_ratioPorcentaje de RAM que activa escritura en segundo plano10
vm.overcommit_memoryPolítica de sobreasignación de memoria: 0 heurística, 1 siempre permitir, 2 denegar0 o 2 (servidores seguros)
vm.overcommit_ratioPorcentaje de RAM + swap para overcommit modo 250 (por defecto)
vm.nr_hugepagesNúmero de páginas grandes (hugepages)Según necesidad (BD, virtualización)

15.5.4. Sistema de archivos (FS)

ParámetroDescripciónValor típico
fs.file-maxNúmero máximo de descriptores de archivo abiertos en todo el sistemaAumentar en servidores muy cargados (ej. 2097152)
fs.inotify.max_user_watchesLímite de archivos observados con inotify por usuario65536 o más para entornos de desarrollo (IDE)
fs.aio-max-nrNúmero máximo de operaciones de E/S asíncrona65536 para bases de datos

15.5.5. Seguridad y límites

ParámetroDescripción
kernel.yama.ptrace_scopeRestringe el uso de ptrace (1 = solo descendientes, 2 = solo root, 3 = desactivado completamente)
kernel.randomize_va_spaceASLR: 0 (desactivado), 1 (parcial), 2 (completo, por defecto)
kernel.kptr_restrictOculta direcciones de kernel en /proc (1 = oculta a usuarios no root)
kernel.dmesg_restrictRestringe acceso a dmesg (1 = solo root)
user.max_user_namespacesNú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 .conf y que no hay conflictos con otros archivos (se aplica el último en orden alfabético).
  • sysctl --system muestra todos los archivos que cargaría y puede señalar errores de sintaxis.

15.9. Ejercicios prácticos

  1. Exploración: Ejecuta sysctl -a y 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 en man 5 sysctl.d o en la documentación del kernel.

  2. Cambio temporal vs persistente:

    • Cambia el kernel.hostname con sysctl -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.
  3. Ajuste de swappiness:

    • Con free -h y vmstat 1, observa el uso de swap actual.
    • Reduce vm.swappiness a 10 y lanza una aplicación que consuma memoria (por ejemplo, un navegador pesado o stress). Observa si el sistema usa menos swap.
    • Restaura el valor original.
  4. 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.
  5. Hardening:

    • Crea un archivo /etc/sysctl.d/50-seguridad.conf con las medidas de protección descritas en la sección 15.7.3. Aplícalas con sysctl --system. Verifica con sysctl net.ipv4.icmp_echo_ignore_all que el ping está desactivado. Luego restaura para no perjudicar otras pruebas.
  6. 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.

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.conf también funciona, pero es preferible usar el directorio.
  • Los cambios en caliente con sysctl -w o echo sobre /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.

Vistas: 0

Descubre más desde CIBERED

Suscríbete y recibe las últimas entradas en tu correo electrónico.

Scroll al inicio