Saltar a contenido

Endurecer fstab

Los filesystems se montan con opciones que limitan lo que se puede hacer sobre ellos. El bastionado de fstab añade flags de montaje para que un proceso comprometido (o un atacante con acceso a la máquina) no pueda ejecutar, leer o crear cosas donde no debe.

Protege a quien ya ha entrado: los payloads y scripts de los atacantes suelen colarse en /tmp, /var/tmp y /dev/shm. Sin ejecución en esos mounts, ese movimiento se cae.

Qué hacen los flags

Opción Qué impide
nosuid Los binarios setuid/setgid del mount no se ejecutan (anti escalado a root).
nodev No se interpretan dispositivos de bloque/char (mknod).
noexec No se ejecuta código desde este filesystem.
noatime No se actualiza la hora de acceso en cada lectura (menos escritura).

Antes de empezar

Una línea mal puesta en fstab puede impedir el arranque o el montaje de un filesystem. Siempre valida con sudo mount -a y comprueba tras reiniciar; mantén una vía de acceso por consola. Prueba cada nivel en una sesión nueva antes de dar por buena la configuración.

La diferencia Ubuntu/Fedora

En Fedora (systemd) /tmp y /dev/shm ya son tmpfs de serie. En Ubuntu, /tmp vive en la partición de disco: no puedes poner noexec solo a /tmp con una línea de fstab porque las opciones aplican a todo el filesystem — por eso se sustituye /tmp por un tmpfs propio.

Enfoque por niveles

Como en las páginas anteriores, se sube de nivel añadiendo capas. Puedes parar donde quieras.

Nivel Qué endurece ¿Aplicarlo?
1 /tmp (tmpfs, sin ejecución) Recomendado
2 /dev/shm (tamaño y flags) Recomendado
3 /home y /var/tmp (nosuid/nodev) Recomendado
4 /var, /boot, /usr Opcional

Nivel 1 — /tmp sin ejecución

Recomendado. Es el mount favorito para volcar payloads. Se monta como tmpfs con noexec (además de nosuid y nodev). Al ser tmpfs, el contenido se borra en cada reinicio — comportamiento correcto para un directorio temporal.

  1. Configurar el mount:

    Añadir la línea al final de /etc/fstab:

    sudo vim /etc/fstab
    
    tmpfs /tmp tmpfs rw,nosuid,nodev,noexec,size=1G,mode=1777 0 0
    

    Si /tmp estuviera ya montado con datos que necesites, paráchelos antes.

    /tmp ya es tmpfs; se ajustan las opciones de la unidad de systemd:

    sudo systemctl edit tmp.mount
    
    [Mount]
    Options=mode=1777,strictatime,nosuid,nodev,noexec
    
  2. Aplicar sin reiniciar con cuidado (esto desmonta /tmp):

    sudo mount -a
    
    sudo systemctl restart tmp.mount
    
  3. Verificar:

    findmnt -no TARGET,OPTIONS /tmp
    

    Debe mostrar nosuid,nodev,noexec entre las opciones.

 

Con noexec en /tmp, los scripts sueltos ahí ya no se ejecutan. Algunas herramientas que generan ejecutables en /tmp (instaladores de terceros, algunos contenedores) pueden fallar: si ocurre, valora montarlo con un tamaño mayor o revisa dónde generan los binarios.

Nivel 2 — /dev/shm

Recomendado. Es el otro mount de memoria compartida donde un atacante puede esconder código. Se limita su tamaño y se le quita ejecución.

  1. Editar la unidad de systemd (ambas distros):

    sudo systemctl edit dev-shm.mount
    
    [Mount]
    Options=mode=1777,nosuid,nodev,noexec,size=256m
    
  2. Aplicar y verificar:

    sudo systemctl daemon-reload
    sudo systemctl restart dev-shm.mount
    findmnt -no TARGET,OPTIONS /dev/shm
    

 

Apps de escritorio como Chrome o Electron usan memoria compartida anónima cuando /dev/shm no es ejecutable, así que siguen funcionando — en un servidor no suele haber problema alguno.

Nivel 3 — /home y /var/tmp

Recomendado. Los usuarios (o un atacante con cuenta) no deben poder crear binarios setuid ni dispositivos en sus propios directorios.

  1. Endurecer /home: añadir nosuid,nodev a su línea en /etc/fstab:

    sudo vim /etc/fstab
    
    UUID=<uuid-home> /home ext4 defaults,nosuid,nodev 0 2
    

    Y aplicarlo:

    sudo mount -o remount /home
    findmnt -no TARGET,OPTIONS /home
    

    noexec en /home

    Solo añade noexec si ninguno de tus usuarios ejecuta binarios guardados en su home (p. ej. herramientas descargadas). De lo contrario, romperá su día a día.

  2. (Opcional) /var/tmp si cae dentro de la partición raíz: no se puede endurecer solo con fstab — o se monta un tmpfs propio o se deja como está:

    sudo vim /etc/fstab
    
    tmpfs /var/tmp tmpfs rw,nosuid,nodev,noexec,size=512M,mode=1777 0 0
    

     

    /var/tmp se usa para ficheros que deben sobrevivir a un reinicio. Convertirlo en tmpfs lo borra en cada boot y puede afectar a paquetes y actualizaciones. Valóralo solo si entiendes esa consecuencia — si dudas, déjalo fuera.

Nivel 4 — Opcional — /var, /boot, /usr

Opcional. Se endurece el resto del system con nosuid,nodev; noexec solo donde esté comprobado que no rompe nada.

  1. Ver qué montajes independientes tienes:

    findmnt -lo TARGET,FSTYPE -x TARGET
    
  2. Para cada línea en /etc/fstab, añadir los flags:

    /boot  ext4 defaults,nosuid,nodev,noexec 0 2
    /var   ext4 defaults,nosuid,nodev        0 2
    /usr   ext4 defaults,nosuid,nodev,noexec 0 2
    
  3. Aplicar y comprobar que todo sigue funcionando (actualizaciones, arranque):

    sudo mount -a
    

 

noexec en /boot suele ser inocuo (GRUB lee, no ejecuta), pero verifica que el proceso de instalación de kernels (dracut/kernel-install) sigue funcionando. noexec en /usr puede romper cargadores o scripts del sistema que asumen ejecución desde ahí: prueba tras aplicar y revisa logs.

Referencia

Mount Flags recomendados
/tmp nosuid,nodev,noexec (tmpfs, size)
/dev/shm nosuid,nodev,noexec,size=256m
/home nosuid,nodev (+noexec según uso)
/var/tmp nosuid,nodev,noexec (opcional, tmpfs)
/var nosuid,nodev
/boot nosuid,nodev,noexec (opcional)
/usr nosuid,nodev,noexec (opcional, validar)

Verificar

Vista rápida de los mounts con sus opciones:

findmnt -no TARGET,OPTIONS /tmp /dev/shm /home

Test práctico de noexec (debe dar Permission denied):

echo 'echo pwn' > /tmp/test
chmod +x /tmp/test
/tmp/test
rm /tmp/test

Si /tmp tiene noexec, la llamada a /tmp/test falla con Permission denied. Tras un reinicio, confirma que todos los montajes se aplican:

findmnt -no TARGET,OPTIONS /tmp /dev/shm /home

Y ahora qué

Los filesystems están endurecidos. La sección de seguridad queda cubierta — para una visión completa del estado, ejecuta una auditoría con Lynis, que puntúa las opciones de montaje.