Comprensión de NFS4 (servidor Linux)


26

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 exportsmanual 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=0no 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 -arvmuestra:

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/usersno se exporta? No exporté este directorio, y aunque no veo el contenido de, a /dev/disk/by-label/usersmenos que especifique crossmnt, todavía puedo escribir en el directorio. Todo lo que escribo allí va al directorio subyacente del /exp/userscual 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:

  1. ¿No es terriblemente inseguro exponer este tipo de información del cliente?
  2. ¿No desconocen los administradores del servidor que tienen un rmtab con muchos clientes obsoletos?
  3. ¿Es esta la razón por la que los clientes que montan directorios nfs4 mount -vpueden 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 .. :)


Tal vez a la lista de exportación no le gustan sus extraños sistemas de archivos montados en enlaces. Pruebe primero con / mnt / users ...
jirib

Se trata de nfs4, que requiere un "pseudo sistema de archivos", es decir, una jerarquía del sistema de archivos de un árbol. ¿Puedes aclarar a qué te refieres, por favor?
drumfire

Esta página wiki también afirma que fsid = 0 ya no es necesario: wiki.linux-nfs.org/wiki/index.php/… , pero 'man export' aún implica que es obligatorio
SystemParadox

1
Me gustaría decir que apoyo esta pregunta. Como usted, he observado muchas de las mismas cosas, y tengo la misma pregunta y más. Parece un desastre.
Ciclón el

1
Demasiadas preguntas en una publicación. @drumfire, ¿podría dividirlo en preguntas y publicaciones más simples y separadas?
Victor Yarema el

Respuestas:


7

Grandes preguntas, destaca un punto más grande con la documentación IMO. Aquí hay un intento de una respuesta completa:

¿Qué significa "exportaciones posteriores solo en esa línea"?

Un ejemplo es probablemente el más fácil aquí:

/export/stuff -rw 10.0.0.54 10.0.0.55

es equivalente a:

/export/stuff 10.0.0.54(rw) 10.0.0.55(rw)

¿ fsid=0Ya no se requiere?

Esto depende de su caso de uso. Parece que está exportando sistemas de archivos basados ​​en discos normales desde el resto de su consulta, en ese caso es mejor que deje caer fsid=0(que en nfsv4 cambia el comportamiento para hacer referencia al sistema de archivos raíz de la exportación).

Para cambiar este comportamiento, elimine la opción no_subtree_check


rmtabcosas relacionadas

  • ¿Es el manejo de rmtabun riesgo de seguridad?
    Supongo que depende de su caso de uso para responder eso, en mi red no presenta una fuga de información creíble, pero puedo ver casos en los que podría potencialmente.
  • ¿No rmtabestará lleno de entradas obsoletas?
    Potencialmente sí, nuevamente dependiendo de su escenario de implementación / caso de uso.
  • ¿Es por eso que algunos clientes que se ejecutan mount -verróneamente ven "no se montó nada"?
    Todavía no me he encontrado con esto
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.