El Secreto del Particionamiento en Linux: ¿Por Qué Podría Ser tu Mejor Defensa contra Hackers?

Recuerdo a finales de los 90 haber leído varios manuales de Linux que destacaban la importancia de particionar el disco para organizar el sistema operativo de forma eficiente y segura. Cada partición tenía un propósito específico, garantizando orden y una capa adicional de protección. Los administradores de sistemas invertían tiempo en diseñar esquemas de particiones para directorios clave como /home/var y /tmp, previniendo que un fallo en un área afectara al resto del sistema.

Con el tiempo, en un esfuerzo por hacer que Linux fuera más accesible al público general, muchas distribuciones simplificaron el proceso de instalación, reduciendo las particiones a lo esencial: /bootswap y /. En la actualidad, con la popularidad de los servidores virtuales (VPS), esta práctica se ha relegado al olvido, ignorando su valor en la seguridad y estabilidad del sistema. Sin embargo, particionar estratégicamente sigue siendo una herramienta poderosa contra ataques, malware y fallos en producción.

En este artículo, analizaremos cómo un particionamiento estratégico puede optimizar la seguridad, el manejo de recursos y la estabilidad del sistema, con ejemplos específicos para servidores en entornos de producción.

¿Por Qué Particionar el Disco?

En Linux, particionar el disco ofrece múltiples beneficios, especialmente en entornos de producción donde la organización y seguridad son críticas. Al separar directorios clave como /home/var y /tmp, se mejora el manejo de recursos y se añaden capas adicionales de protección, previniendo problemas graves y optimizando el rendimiento del sistema.

Facilidad de Backup y Restauración: Al tener los datos en particiones separadas, es más sencillo realizar copias de seguridad o restauraciones selectivas. Por ejemplo, se puede respaldar únicamente /home, que contiene los archivos de usuario, mientras se omiten otros directorios del sistema que pueden reinstalarse. Esto facilita el proceso de recuperación en caso de fallo sin afectar la partición raíz o la estructura del sistema.

Manejo de Recursos y Protección: Al tener directorios clave en particiones separadas, el sistema organiza mejor los recursos y previene problemas críticos. Si no se usan particiones independientes, el llenado completo del disco «out of space» —ya sea por el uso legítimo del sistema o por actividad maliciosa como algún malware que genere archivos de gran tamaño con el fin de llenar todo el espacio disponible— afectaría a todo el sistema. Esto podría provocar que el sistema no funcione correctamente, ya que por ejemplo no podría escribir en /var los logs necesarios para registrar eventos y diagnósticos, entre otros servicios. En servidores de producción, esta situación es especialmente problemática, ya que varios servicios que dependen de /var (como los sistemas de registro y bases de datos) no podrán escribir datos nuevos, lo que puede llevar a bloqueos en servicios esenciales y dificultar el diagnóstico de problemas al perderse logs recientes. Al particionar el disco y asignar un espacio de partición independiente a /var, se mitiga este riesgo, permitiendo que el sistema continúe funcionando normalmente incluso si alguna otra partición del disco principal se llena.

Seguridad y Estabilidad: Cada partición puede configurarse con opciones de montaje específicas para reforzar la seguridad del sistema. Estas opciones, integradas en el kernel de Linux, permiten restringir acciones potencialmente inseguras:

  • noexec: Desactiva la ejecución de archivos binarios en la partición, ideal para directorios como /home/tmp y /var, donde los usuarios no necesitan ejecutar programas.
  • nosuid: Impide que los archivos hereden permisos SUID o SGID, bloqueando posibles escaladas de privilegios.
  • nodev: Evita la creación o reconocimiento de dispositivos especiales en particiones como /tmp, lo que protege contra intentos maliciosos de acceder a hardware o recursos sensibles.

Por ejemplo, si un atacante, por medio de un formulario web validado de manera incorrecta, sube un archivo ejecutable a /var/www/html/, la opción noexec evitaría que el archivo se ejecute, incluso si el atacante logra engañar al sistema o a un usuario para intentarlo. Esto convierte a las opciones de montaje en una herramienta clave para mitigar riesgos de seguridad.

Mejora en la Seguridad: Además de opciones como noexec y nosuid otras configuraciones de montaje como nodev pueden aplicarse a particiones como /tmp y /home, lo que evita la creación de archivos de dispositivo en estos directorios. De este modo, limitamos la creación de dispositivos especiales que podrían ser usados para explotar el sistema.

En Linux, los «dispositivos especiales» son archivos en /dev que actúan como interfaces hacia hardware o funciones del sistema, permitiendo que programas interactúen con elementos como discos, terminales y memoria. Estos archivos pueden ser creados con permisos específicos, y ejemplos comunes incluyen /dev/sda (disco duro), /dev/null (descarta datos) y /dev/tty (terminales).

Permitir que usuarios creen dispositivos especiales en particiones como /home o /tmp es un riesgo de seguridad, ya que un atacante podría crear archivos de dispositivo que accedan a recursos sensibles, como la memoria del sistema, o simulen hardware crítico para manipular el sistema. La opción de montaje nodev, cuando se aplica a estas particiones, impide la creación y reconocimiento de archivos de dispositivo, limitando posibles vulnerabilidades y mejorando la seguridad del sistema.

¿Cuáles son Los puntos de montaje Principales que Deberías particionar en Linux?

En Linux, crear particiones estratégicas es clave para optimizar espacio, rendimiento y seguridad. Cada partición cumple un propósito específico, y asignarle el tamaño adecuado evita problemas de rendimiento y escasez de espacio. A continuación, te doy un ejemplo de cómo distribuir el espacio en un disco de 500 GB para un servidor web de producción.

Particiones Recomendadas y Tamaños Sugeridos

  1. / (raíz): La partición raíz contiene los archivos esenciales del sistema y otros directorios del sistema de archivos. Para un servidor web de producción, 20-30 GB suele ser suficiente para /.
    • Espacio a utilizar30 GB.
  2. /boot: Almacena los archivos de arranque, incluidos los kernels del sistema y el gestor de arranque. Separar /boot en su propia partición es útil para la seguridad y gestión de actualizaciones.
    • Espacio a utilizar1 GB.
  3. /home: En un servidor de producción que «no» maneja perfiles de usuario, /home no suele necesitar mucho espacio. Si es necesario para usuarios administrativos, 5 GB a 10 GB es adecuado.
    • Espacio a utilizar5 GB.
  4. /var: Esta es una partición crítica en un servidor, ya que almacena registros (logs), archivos de caché, paginas web o servicios tipo SAAS y, en algunos casos, bases de datos. Para un servidor web de producción, se recomienda asignarle una cantidad significativa de espacio, ya que crecerá con el tiempo, sobre todo si se trata de una empresa de alto volumen de información o que maneje muchas imágenes de productos.
    • Espacio a utilizar418 GB.
  5. /tmp: Utilizado para archivos temporales, /tmp debería estar en su propia partición para evitar que archivos temporales excesivos afecten al sistema.
    • Espacio a utilizar10 GB.
  6. /opt (opcional): Si el servidor utiliza software de terceros o aplicaciones personalizadas que no están en los repositorios estándar, se recomienda asignar espacio a /opt.
    • Espacio a utilizar20 GB.
  7. swap: La partición de swap actúa como respaldo de la RAM. Para servidores con 16 GB de RAM o más, una partición de 8-16 GB suele ser suficiente.
    • Espacio a utilizar con 16 GB de RAM16 GB.

La siguiente tabla muestra un esquema de particionamiento para un servidor web con 500 GB de almacenamiento. Estas particiones se adaptan a un servidor con alto volumen de logs y datos dinámicos

Punto de montajeEspacio asignado
/30 GB
/boot1 GB
/home5 GB
/var418 GB
/tmp10 GB
/opt20 GB
swap16 GB
Total Asignado500 GB

El tamaño recomendado para cada partición debe ajustarse a los requerimientos específicos del sistema y su propósito. Por ejemplo, un servidor web tendrá necesidades diferentes a las de un servidor VPN o un servidor de archivos NAS. Es crucial analizar las demandas de almacenamiento y recursos de cada caso para asignar el espacio de manera eficiente y evitar problemas futuros.

Configurar estas particiones durante la instalación es ideal para optimizar el espacio desde el inicio, pero también es posible ajustarlas posteriormente con herramientas como fdiskparted, o LVM.

Configuración de Opciones NOEXEC y Permisos de Ejecución

Particiones que deben usar noexec:

La opción noexec es ideal para particiones donde no se necesita ejecutar archivos binarios. Esto mejora la seguridad al evitar la ejecución de scripts maliciosos o archivos malintencionados. Las particiones recomendadas para esta configuración son:

  1. /home: Los usuarios no necesitan ejecutar binarios desde este directorio. Aplicar noexec aquí previene que scripts o programas maliciosos cargados en el directorio personal se ejecuten.
  2. /tmp: Este directorio es utilizado para archivos temporales, y no debería permitir la ejecución de binarios. Aplicar noexec ayuda a mitigar ataques que aprovechan este espacio.
  3. /var: Aunque en /var se almacenan datos dinámicos como logs y archivos temporales, no se ejecutan binarios directamente en esta partición, por lo que es seguro aplicar noexec, a menos que se requiera explícitamente la ejecución de scripts en subdirectorios específicos como /var/www o /var/lib.

Particiones que requieren permisos de ejecución:

Algunas particiones necesitan permitir la ejecución de binarios para que el sistema funcione correctamente:

  1. / (raíz): Contiene los archivos esenciales del sistema y los binarios principales. Debe permitir la ejecución.
  2. /boot: Aunque no es común ejecutar archivos directamente desde /boot, este directorio debe permitir acceso de ejecución para garantizar el arranque del sistema.
  3. /opt (opcional): Si contiene aplicaciones o binarios de terceros, esta partición necesitará permisos de ejecución.

Ejemplo de Configuración Temporal con mount

Puedes montar o remapear particiones con opciones como noexec en una sesión activa usando el comando mount. Supongamos que deseas aplicar noexec a la partición /tmp:

  1. Verifica las particiones montadas actualmente con el comando:

Explicación del resultado:

  • /dev/sda3: Es el dispositivo asociado a la partición montada en /tmp.
  • on /tmp: Muestra que el punto de montaje es /tmp.
  • type ext4: Indica que la partición usa el sistema de archivos ext4.
  • (rw,nodev,nosuid): Actualmente, la partición está configurada con opciones de lectura-escritura, nodev y nosuid, pero no tiene noexec configurado.
  1. Aplica noexec temporalmente:

Para aplicar noexec sin modificar el archivo /etc/fstab, ejecuta el siguiente comando:

  1. Verifica que se hayan aplicado las opciones

Vuelve a verificar las opciones de montaje con:

  • Ahora la partición incluye la opción noexec junto con las opciones nodev y nosuid.
  1. Verifica que se hayan aplicado las opciones

Para verificar que la opción noexec está funcionando correctamente, intenta ejecutar un script o archivo binario desde /tmp. Por ejemplo:

El sistema bloquea la ejecución del archivo, demostrando que noexec está funcionando como se espera.

Si deseas que esta configuración persista después de un reinicio, debes agregar las opciones correspondientes al archivo /etc/fstab, como se explica en la siguiente sección.

aplicar configuración Permanente en /etc/fstab

Para que las opciones de montaje como noexec se apliquen automáticamente después de cada reinicio, debes configurarlas en el archivo /etc/fstab.

  1. Identifica el dispositivo asociado a la partición

Primero, necesitas identificar el dispositivo o UUID de la partición que deseas configurar. Usa el comando:

obtendrás un resultado como:

En este caso, la partición montada en /tmp tiene el UUID 345e6789-g89d-34e5-c678-626816374222

  1. Edita el archivo /etc/fstab

Abre el archivo /etc/fstab en un editor de texto con permisos de superusuario:

  1. Agrega o modifica las líneas correspondientes

Agrega una línea para configurar la partición /tmp con las opciones necesarias. Asegúrate de incluir las opciones noexecnosuid, y nodev:

Explicación:

  • UUID=345e6789-g89d-34e5-c678-626816374222: Identifica la partición.
  • /tmp: Punto de montaje.
  • ext4: Tipo de sistema de archivos.
  • defaults,noexec,nodev,nosuid: Opciones de montaje.
    • defaults: Configuración predeterminada del sistema.
    • noexec: Bloquea la ejecución de archivos binarios.
    • nodev: Impide la creación o uso de dispositivos especiales.
    • nosuid: Desactiva permisos SUID y SGID.
  • 0: No se realiza un backup de esta partición con dump.
  • 2: Indica que la partición se debe verificar en el segundo paso del proceso de arranque (después de /).
  1. Aplica los cambios sin reiniciar

Antes de reiniciar el sistema, puedes probar los cambios aplicándolos inmediatamente con:

  1. Verifica las opciones de montaje

Confirma que las opciones de montaje se aplicaron correctamente:

Esto confirma que la partición /tmp está configurada con las opciones de seguridad especificadas.

  1. Prueba la configuración

Intenta ejecutar el archivo previamente creado en /tmp para verificar si las restricciones están activas. No es necesario volver a crearlo; simplemente intenta ejecutarlo nuevamente:

Resumen del Proceso

  1. Usa blkid para identificar el UUID de la partición.
  2. Edita /etc/fstab para agregar las opciones noexecnodev, y nosuid.
  3. Aplica los cambios con mount -a y verifica con mount | grep.
  4. Prueba la configuración creando y ejecutando un archivo en la partición afectada.

Con este procedimiento, las opciones de seguridad se aplicarán automáticamente después de cada reinicio, asegurando que tu sistema esté protegido de forma consistente.

Conclusión

El particionamiento estratégico y las configuraciones de montaje en Linux son elementos fundamentales para garantizar la seguridad, estabilidad y eficiencia de los sistemas. Implementar particiones específicas con opciones como noexecnodev y nosuid no solo previene riesgos de seguridad, sino que también permite un manejo más organizado y predecible de los recursos del sistema.

En un mundo donde los servidores enfrentan crecientes desafíos de seguridad y alta demanda, estas prácticas son más relevantes que nunca. Adoptarlas desde el inicio o incorporarlas en sistemas existentes no solo protege tu infraestructura, sino que también simplifica su administración. Es el momento de tomar medidas y configurar tus servidores de manera eficiente y segura, garantizando que estén preparados para enfrentar los desafíos de un entorno en constante evolución.

Acerca del autor

Foto del avatar
Jorge Ferrán

Ingeniero especialista en ciberseguridad con más de 30 años de experiencia en tecnología. Mi pasión por la computación comenzó en 1993, explorando sistemas operativos, desarrollando aplicaciones de seguridad y perfeccionando mi conocimiento en protección de sistemas. Mi misión es aportar para construir un futuro digital más seguro y ético.

Agregar comentario

Jorge Ferrán

Foto del avatar

Ingeniero especialista en ciberseguridad con más de 30 años de experiencia en tecnología. Mi pasión por la computación comenzó en 1993, explorando sistemas operativos, desarrollando aplicaciones de seguridad y perfeccionando mi conocimiento en protección de sistemas. Mi misión es aportar para construir un futuro digital más seguro y ético.

Ponte en contacto