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.
-
Configurar el mount:
Añadir la línea al final de
/etc/fstab:sudo vim /etc/fstabtmpfs /tmp tmpfs rw,nosuid,nodev,noexec,size=1G,mode=1777 0 0Si
/tmpestuviera ya montado con datos que necesites, paráchelos antes./tmpya es tmpfs; se ajustan las opciones de la unidad de systemd:sudo systemctl edit tmp.mount[Mount] Options=mode=1777,strictatime,nosuid,nodev,noexec -
Aplicar sin reiniciar con cuidado (esto desmonta
/tmp):sudo mount -asudo systemctl restart tmp.mount -
Verificar:
findmnt -no TARGET,OPTIONS /tmpDebe mostrar
nosuid,nodev,noexecentre 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.
-
Editar la unidad de systemd (ambas distros):
sudo systemctl edit dev-shm.mount[Mount] Options=mode=1777,nosuid,nodev,noexec,size=256m -
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.
-
Endurecer
/home: añadirnosuid,nodeva su línea en/etc/fstab:sudo vim /etc/fstabUUID=<uuid-home> /home ext4 defaults,nosuid,nodev 0 2Y aplicarlo:
sudo mount -o remount /home findmnt -no TARGET,OPTIONS /homenoexecen/homeSolo añade
noexecsi ninguno de tus usuarios ejecuta binarios guardados en su home (p. ej. herramientas descargadas). De lo contrario, romperá su día a día. -
(Opcional)
/var/tmpsi 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/fstabtmpfs /var/tmp tmpfs rw,nosuid,nodev,noexec,size=512M,mode=1777 0 0/var/tmpse 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.
-
Ver qué montajes independientes tienes:
findmnt -lo TARGET,FSTYPE -x TARGET -
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 -
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.