Me ha molestado un poco NFS4 en Linux. Cierta información 'allá afuera' parece estar en conflicto con otra información, y otra información parece difícil de encontrar. Así que aquí hay un par de cosas que me llamaron la atención, espero que alguien pueda arrojar algo de luz sobre esto.
Esta pregunta se centra exclusivamente en NFS4 sin Kerberos, etc.
1. Exportaciones
Hay información ambigua en la página de exports
manual sobre la estructura de / etc / exportaciones.
Para citar de exports(5)
:
Además, cada línea puede tener una o más especificaciones para las opciones predeterminadas después del nombre de la ruta, en forma de guión ("-") seguido de una lista de opciones.
La lista de opciones se usa para todas las exportaciones posteriores solo en esa línea.
¿Qué significa "exportaciones posteriores solo en esa línea"?
1.2 ya fsid=0
no es necesario?
Estaba buscando fsid cuando encontré un comentario en la lista linux-nfs que decía que fsid = 0 ya no es necesario. Ahora estoy confundido, ¿lo necesito con nfs4 o no?
2. Directorio no exportado aún montable
Digamos que tengo el siguiente árbol:
/exp
/exp/users
/exp/distr
/exp/distr/archlinux
/exp/distr/debian
Y tengo las siguientes entradas en esta entrada fstab:
/dev/disk/by-label/users /mnt/users ext4 defaults 0 0
/dev/disk/by-label/distr /mnt/distr ext4 defaults 0 0
/mnt/users /exp/users none bind 0 0
/mnt/distr /exp/distr none bind 0 0
Y mis exportaciones son exactamente esto:
/exp 192.168.1.0/24(fsid=0,rw,async,no_subtree_check,no_root_squash)
/exp/distr 192.168.1.0/24(rw,async,no_subtree_check,no_root_squash)
Y exportfs -arv
muestra:
exporting 192.168.1.0/24:/exp/distr
exporting 192.168.1.0/24:/exp
Entonces, ¿por qué puedo hacer esto y no obtener ningún error en un cliente:
mount -t nfs4 server:/exp/users /tmp/test
¿Aunque /exp/users
no se exporta? No exporté este directorio, y aunque no veo el contenido de, a /dev/disk/by-label/users
menos que especifique crossmnt
, todavía puedo escribir en el directorio. Todo lo que escribo allí va al directorio subyacente del /exp/users
cual se puede ver cuando yo umount /exp/users; ls /exp/users
...
3. El extraño caso de showmount -d server
Según lo indicado por rpc.mountd(8)
, este comando debe mostrar directorios que están actualmente montados por clientes o entradas obsoletas /var/lib/nfs/rmtab
, como se puede leer:
El demonio rpc.mountd registra cada solicitud MNT exitosa agregando una entrada al archivo / var / lib / nfs / rmtab. Al recibir una solicitud UMNT de un cliente NFS, rpc.mountd simplemente elimina la entrada correspondiente de / var / lib / nfs / rmtab, siempre que la lista de control de acceso para esa exportación permita que el remitente acceda a la exportación.
(...)
Sin embargo, tenga en cuenta que hay poco para garantizar que los contenidos de / var / lib / nfs / rmtab sean precisos. Un cliente puede continuar accediendo a una exportación incluso después de invocar UMNT. Si el cliente se reinicia sin enviar una solicitud UMNT, las entradas obsoletas permanecen para ese cliente en / var / lib / nfs / rmtab.
Después de leer esto, seguramente me pregunto:
- ¿No es terriblemente inseguro exponer este tipo de información del cliente?
- ¿No desconocen los administradores del servidor que tienen un rmtab con muchos clientes obsoletos?
- ¿Es esta la razón por la que los clientes que montan directorios nfs4
mount -v
pueden ver resultados como "no se montó nada" aunque se montó algo ?
Tengo muchas otras preguntas sobre nfs4, pero lo mantendré en este momento por el momento .. :)