Un breve paseo por SYSCTL

Linux Nivel Medio 30 de abr. de 2024

¿Qué es sysctl?

Para que los que no conozcan la potencia de Linux, un breve paseo por 'sysctl' y su poder en Linux para cambiar 'al vuelo' (en tiempo de ejecución) diferentes parámetros del kernel y así activar o modificar el comportamiento de un servidor sin necesidad de reinicios.

Uno de los modos más tradicionales es realizarlo sobre el directorio virtual /proc/sys en el que simplemente enviado un valor o una cadena de texto a alguno de sus ficheros se modifica un comportamiento del servidor. Evidentemente siempre lo haremos como root.

En Linux el directorio virtual /proc esta diseñado como un puente de comunicación entre el kernel y el userspace (espacio de usuario) y es una de las partes más desaprovechas o ignoradas por los administradores de sistemas.

Vayamos con un ejemplo:

Usamos el directorio /proc para realizar cambios:

echo 0 > /proc/sys/net/ipv4/ip_forward

Dependiendo de si enviamos 0 o 1 al fichero desactivaremos o activaremos el NAT o forwarding de paquetes para el protocolo IP.

Esto es util, pues tras activarlo, podemos redirigir paquetes entre distintas redes/interfaces, sobre todo cuando estamos configurando un servidor para que trabaje como router, proxy o gateway.

Esto mismo lo podemos realizar mediante el comando sysctl:

sysctl net.ipv4.ip_forward=0

Valores visibles con systcl

Podemos ver la cantidad de valores que podemos vigilar y configurar en nuestro kernel en tiempo de ejecución simplemente ejecutando el siguiente comando:

sysctl -a 

abi.vsyscall32 = 1
debug.exception-trace = 1
debug.kprobes-optimization = 1
dev.hpet.max-user-freq = 64
dev.mac_hid.mouse_button2_keycode = 97
dev.mac_hid.mouse_button3_keycode = 100
dev.mac_hid.mouse_button_emulation = 0
dev.parport.default.spintime = 500
dev.parport.default.timeslice = 200
dev.scsi.logging_level = 0
fs.aio-max-nr = 65536
fs.aio-nr = 5352
fs.binfmt_misc.qemu-armeb = enabled
fs.binfmt_misc.qemu-armeb = interpreter /usr/bin/qemu-armeb
fs.binfmt_misc.qemu-armeb = flags: OC
fs.binfmt_misc.qemu-armeb = offset 0

Ajuste de límite de número de ficheros abiertos

Se puede dar el caso de que un servidor presente algun error por haberse excedido el numero de ficheros abiertos simultaneamente, esto puede pasar en servidores que ejecutan Oracle, si lo hacemos mediante /proc habría que pasarle el valor recomendado al fichero /proc/sys/fs/file-max, sin embargo mediante systcl simplemente ejecutamos:

sysctl fs.file-max=6815744

Se puede ver claramente la analogía de la ruta de /proc en /fs/file-max con la variable a usar en systcl fs.file-max

Persistencia de los cambios

¿Que sucede con estos cambios en tiempo de ejecución?

Todos estos cambios que le hemos indicado a nuestro kernel, simplemente que no se guardan y sólo duran mientras la máquina está en ejecución. Para que queden aplicados y se usen en los siguientes reinicios de nuestra máquina, deberemos poner los valores deseados en el fichero /etc/sysctl.conf y estos serán cargados en el boot del servidor.

Si queremos un mejor control del uso que estamos definiendo al realizar todos estos cambios de valores por defecto en el kernel, lo recomendable sería crear varios ficheros con extensión .conf dentro de la carpeta /etc/sysctl.d/ para que otros SysAdmin pueda verlo claramente.

Por ejemplo podríamos tener los siguientes ficheros:

/etc/systcl.d/10-nat_y_forwarding.conf

/ec/systcl.d/20-oracle11.conf

/etc/sysctl.d/30-inotify.conf

/ec/sysctl.d/55-samba4_ad.conf

/etc/systcl.d/99-sysctl.conf 

Nota: 99-sysctl.conf es un enlace al fichero /etc/sysctl.conf

Etiquetas

Luis GuLo

🐧 SysAdmin GNU/Linux - 🐳 Docker - 🖥️ Bash Scripting - 🐪 Perl - 🐬 MySQL - 👥 Formador de TI - 👥 Formador de SysAdmin's - 💢 Ansible - ☁️ Cloud Computing - ❤️ Debian GNU/Linux