NFS
Network File System (NFS) persigue una ilusión útil: que un árbol remoto se comporte como otro punto del sistema de archivos local. Para sostenerla tiene que resolver montaje, nombres, locking, caché e identidad a través de la red. Las primeras versiones distribuyeron esas funciones entre varios programas ONC RPC. NFSv4 concentró gran parte del protocolo en 2049/tcp y añadió un pseudo-filesystem, pero siguió permitiendo modelos de seguridad muy distintos.
La consecuencia operativa es que un export anunciado solo describe una parte de la relación. El origen debe estar admitido, la versión y el security flavor tienen que negociar, y el servidor interpreta UID, GID, squash, permisos y ACL para cada inode. La enumeración une todas esas decisiones antes de atribuir lectura o escritura a una identidad.
Los ejemplos usan TARGET_IP, EXPORT y MOUNTPOINT como placeholders.
Orden de trabajo y herramientas
Sección titulada «Orden de trabajo y herramientas»rpcinfo descubre programas, versiones y puertos RPC. showmount consulta mountd en NFSv2/v3. Nmap resume exports y metadatos. El montaje de solo lectura muestra el comportamiento efectivo del cliente, pero ya interactúa con el sistema de archivos remoto. NFSv4 necesita probar directamente 2049/tcp aunque rpcbind y mountd no sean visibles.
| Pregunta | Herramienta | Límite |
|---|---|---|
| ¿qué programas RPC están publicados? | rpcinfo -p |
depende de que rpcbind sea alcanzable |
| ¿qué exports anuncia mountd? | showmount -e |
no cubre por sí solo el pseudo-filesystem NFSv4 |
| ¿qué versión y contenido responde? | Nmap NSE | validar cada export con el mismo origen |
| ¿qué permisos aplica el servidor? | montaje ro, stat, find |
UID, GID, squash y ACL efectivos |
| ¿cómo está configurado localmente? | exportfs -v y findmnt |
incluye opciones expandidas y montaje real |
No copies árboles completos para «ver qué hay». Empieza por un montaje de solo lectura, profundidad acotada, nombres, propietarios, modos y tamaños.
Versiones y servicios RPC
Sección titulada «Versiones y servicios RPC»NFSv2 y NFSv3 distribuyen funciones entre varios programas ONC RPC. rpcbind, normalmente en 111/tcp y 111/udp, relaciona números de programa con puertos. NFS suele usar 2049, mientras que mountd, nlockmgr y statd pueden escuchar en puertos adicionales.
NFSv4 concentra el protocolo principal en 2049/tcp, integra las operaciones de montaje y presenta un pseudo-filesystem. Esto reduce su dependencia visible de servicios auxiliares. No implica por sí solo autenticación fuerte. Un export NFSv4 puede usar AUTH_SYS, basado en UID y GID aportados por el cliente, o RPCSEC_GSS con Kerberos, según su security flavor.
rpcinfo -p consulta el portmapper y lista programas, versiones, transportes y puertos registrados:
rpcinfo -p TARGET_IPSi rpcbind no está expuesto, NFSv4 todavía puede responder directamente en 2049. En Nmap, -sV identifica el servicio y los scripts seleccionados consultan información NFS. -p 111,2049 limita la prueba a ambos puertos:
nmap -sV -p 111,2049 \ --script rpcinfo,nfs-showmount,nfs-statfs \ TARGET_IPnfs-showmount depende del protocolo de montaje y puede no representar un servidor NFSv4-only. nfs-statfs informa capacidad y uso de exports que logra consultar.
Descubrir exports
Sección titulada «Descubrir exports»Un export vincula una ruta del servidor con clientes y opciones. showmount -e solicita a mountd la lista exportada:
showmount -e TARGET_IPLa columna de clientes puede contener hosts, redes, netgroups o *. Es la política anunciada por mountd, no una prueba de que la ruta de red, el firewall y los permisos permitan el montaje. Además, los servidores NFSv4 no tienen obligación de exponer esa lista mediante el protocolo consultado por showmount.
Montar y observar permisos
Sección titulada «Montar y observar permisos»Primero crea un directorio local vacío. mount -t nfs selecciona el tipo de sistema de archivos. -o ro pide un montaje de solo lectura y reduce cambios accidentales durante el inventario:
mkdir -p MOUNTPOINTsudo mount -t nfs -o ro TARGET_IP:EXPORT MOUNTPOINTmount negocia normalmente una versión compatible. Para comparar comportamientos, -o vers=3,ro o -o vers=4,ro fija la versión. No mezcles ese cambio con otras variables si investigas un fallo.
find MOUNTPOINT -maxdepth 2 -printf '%M %U:%G %p\n'-maxdepth 2 limita el recorrido al punto de montaje y dos niveles inferiores. En el formato de -printf, %M muestra los permisos simbólicos, %U y %G los valores numéricos de UID y GID, y %p la ruta. Con AUTH_SYS, el servidor toma decisiones a partir de esos identificadores y de las opciones del export. Que el cliente resuelva un identificador al mismo nombre que el servidor no demuestra que ambas máquinas compartan la misma cuenta.
Para desmontar, umount recibe el punto de montaje:
sudo umount MOUNTPOINTUn proceso situado dentro del directorio o con un archivo abierto puede producir target is busy. findmnt MOUNTPOINT confirma el montaje y lsof +f -- MOUNTPOINT ayuda a localizar referencias activas.
Interpretar las opciones de export
Sección titulada «Interpretar las opciones de export»Con acceso al servidor, /etc/exports y los archivos incluidos por la implementación describen rutas, clientes y opciones. exportfs -v muestra la tabla efectiva:
sudo exportfs -v| Opción | Efecto relevante |
|---|---|
ro, rw |
Permite solo lectura o también operaciones de escritura. |
root_squash |
Mapea las peticiones con UID/GID 0 a la identidad anónima. |
no_root_squash |
Conserva UID/GID 0 aportados por el cliente. |
all_squash |
Mapea todas las identidades a la cuenta anónima. |
anonuid, anongid |
Fijan UID y GID de esa identidad anónima. |
secure |
Exige que las peticiones no-GSS procedan de un puerto de origen inferior a 1024. |
insecure |
Acepta también puertos de origen no privilegiados. |
sync, async |
Confirma escrituras después de persistirlas o permite responder antes. |
sec= |
Limita los security flavors, como sys, krb5, krb5i o krb5p. |
no_root_squash no concede escritura por sí solo. Todavía intervienen el modo del export, los permisos y ACL del sistema de archivos, el security flavor y otras capas del host. Su importancia es que una petición aceptada como UID 0 conserva esa identidad.
nolock tampoco modifica permisos. Desactiva el locking remoto que los clientes NFSv2 y NFSv3 realizan mediante NLM. Puede resolver un montaje que falla porque nlockmgr no es alcanzable, pero también elimina la coordinación de locks entre clientes. NFSv4 integra el locking en el protocolo y no necesita esta opción.
Si hay que comprobar escritura, remonta sin ro y utiliza un archivo identificable. Registra UID, GID, modo y marcas temporales desde cliente y servidor. Crear un archivo, modificar uno existente y cambiar su propietario son capacidades distintas.
Qué conservar en las notas
Sección titulada «Qué conservar en las notas»- versiones NFS y transportes observados
- programas RPC y puertos asociados
- export exacto y clientes anunciados
- versión y security flavor negociados al montar
- UID/GID numéricos, permisos y ACL relevantes
- diferencias entre el listado de
showmount, el montaje real yexportfs -v
NSE y validación de cada export
Sección titulada «NSE y validación de cada export»nfs-showmount consulta exports mediante RPC, nfs-ls intenta listar rutas y nfs-statfs recupera datos del sistema de archivos. Sus resultados dependen de versión, transporte, servicios auxiliares y restricciones por cliente. NFSv4 puede estar disponible en TCP/2049 aunque rpcbind o showmount no expongan la misma vista:
sudo nmap -sV -n -Pn -p 111,2049 \ --script nfs-showmount,nfs-statfs TARGET_IPValida cada export desde el origen real con opciones de versión explícitas. Un listado remoto no demuestra que el montaje funcionará y un montaje no demuestra acceso a todos los inodes. Registra UID/GID numéricos antes de interpretar nombres locales.
Caminos de abuso y condiciones
Sección titulada «Caminos de abuso y condiciones»La capacidad útil surge de la combinación entre restricción de clientes, rw o ro, squash, security flavor, permisos de directorio, ownership numérico y archivos presentes. no_root_squash conserva UID 0 del cliente, pero solo produce impacto cuando el cliente está permitido, puede montar y el filesystem contiene o acepta una ruta aprovechable. root_squash no protege frente a un UID no privilegiado que coincida con el propietario remoto.
Comprueba SUID/SGID, claves, backups, configuraciones, crontabs y rutas consumidas por procesos con más privilegios sin ejecutar artefactos. Una escritura de validación usa un fichero único no ejecutable, registra UID/GID y modo observado, y se retira al terminar.
Diagnóstico y telemetría
Sección titulada «Diagnóstico y telemetría»access denied by server, timeout RPC, stale file handle y permission denied pertenecen a capas distintas. Conserva versión negociada, mount options, export, origen y error exacto. Servidor, kernel, rpc.mountd, firewall y auditoría de archivos pueden registrar el montaje y operaciones. Desmonta con umount, confirma que no quedan procesos usando el punto de montaje y elimina solo los archivos creados por la prueba.
Referencias operativas
Sección titulada «Referencias operativas»Compara RPC, clientes NFS y NSE en herramientas y automatización. La checklist registra versión, export, identidad y permisos efectivos. La cheatsheet reúne los comandos de consulta y montaje.