Servidor NFS respaldado por OpenZFS Parte 1 - Creación de un servidor

Servidor NFS respaldado por OpenZFS Parte 1 - Creación de un servidor
Si está familiarizado con OpenZFS, sabe todo sobre su interfaz rica en características, arquitectura flexible, suma de verificación confiable y mecanismos de vacas. Tal vez también lo desee en su escritorio, pero no desea reformatear sus discos y particiones existentes. Tal vez, está usando Windows 10, que no es compatible con OpenZFS. Bueno, en esta publicación de blog, discutiré cómo puede crear un sistema de archivos de red, o NFS, que se ejecuta en un servidor separado. Este dispositivo NFS se puede montar en la estación de trabajo de su escritorio. De esta manera, puede tener la confiabilidad y robustez de los ZF con la facilidad de uso de su sistema operativo de escritorio favorito, ya que NFS está disponible en todas las plataformas.

Detallaré la creación de NFS Mount Point en un cliente de Windows 10 en la parte 2 de esta serie. Por ahora, centrémonos en un servidor Ubuntu que ofrece almacenamiento NFS y un cliente de Ubuntu que intenta conectarse a él.

La puesta en marcha

Mi servidor NFS se basará en Ubuntu 18.04 LTS. Puede usar su Linux Distro o FreeBSD favorito, o cualquier otro sistema operativo que admita OpenZFS. Mi razón para usar Ubuntu 18.04 es que es bastante popular y reduciría considerablemente la barrera de entrada.

Se supone que el NFS está disponible solo en mi LAN que tiene la máscara de subred de 255.255.255.0 y 192.168.0.1 como su puerta de enlace predeterminada. En inglés sencillo, esto significa que todos los dispositivos conectados a mi red doméstica (WiFi y Ethernet, et al) tendrán direcciones IP que van desde 192.168.0.2 a 192.168.0.254.

El servidor NFS se configurará para permitir que solo los dispositivos con la dirección IP mencionada tengan acceso al servidor NFS. Esto aseguraría que solo los dispositivos que se hayan conectado a mi LAN accedan a mis archivos y el mundo exterior no puede acceder a él. Si tiene una configuración de 'wifi' abierta o si la seguridad en el punto final de su enrutador es dudoso, esto no garantizaría ninguna seguridad.

No recomendaría ejecutar NFS a través de Internet público sin medida de seguridad adicional.

Por último, los comandos que se ejecutan en el servidor NFS tienen el aviso, el servidor $ y los comandos que se ejecutarán en el lado del cliente tienen el cliente indicador $

Creación de piscina y conjunto de datos OpenZFS

1. Creando zpool

Si ya tienes un zpool en funcionamiento, omita este paso. En mi servidor NFS, que ejecuta Ubuntu 18.04 LTS Server, primero instalo OpenZFS.

servidor $ sudo apt install zfsutils-linux

A continuación, enumeramos todos los dispositivos de bloque disponibles para ver los nuevos discos (y particiones) esperando ser formateados con ZFS.

$ lsblk
Nombre Maj: Min RM Tize RO Tipo de montaje de montaje
Loop0 7: 0 0 89.5m 1 bucle/snap/core/6130
Loop1 7: 1 0 86.9m 1 bucle/snap/core/4917
Loop2 7: 2 0 91.1M 1 Loop/Snap/Core/6259
SDA 8: 0 0 50g 0 disco
├─Sda1 8: 1 0 1M 0 Part
└─Sda2 8: 2 0 50g 0 parte /
SDB 8:16 0 931G 0 Disco
SDC 8:32 0 931G 0 Disco
SR0 11: 0 1 1024m 0 ROM

Un ejemplo típico se muestra arriba, pero su convención de nombres puede ser muy diferente. Tendrás que usar tu propio juicio y tener mucho cuidado al respecto. No desea formatear accidentalmente su disco OS. Por ejemplo, la partición SDA1 claramente tiene el sistema de archivos raíz como su punto de montaje, por lo que no es aconsejable tocarlo. Si está utilizando nuevos discos, es probable que no tengan un punto de montaje o ningún tipo de partición.

Una vez que conozca el nombre de sus dispositivos, utilizaremos el comando Zpool Crear para formatear un par de estos dispositivos de bloque (llamados SDB y SDC) en un Zpool con un solo VDEV que está compuesto por dos disco reflejado.

servidor $ sudo zpool Crear espejo de tanque SDB SDC
Servidor $ SUDO ZPOOL STATE TANK
tanque de estado de zpool
Piscina: tanque
Estado: en línea
escanear: ninguno solicitado
Configuración:
Nombre Estado Leer Escribir cksum
tanque en línea 0 0 0
espejo-0 en línea 0 0 0
SDB en línea 0 0 0
SDC en línea 0 0 0
Errores: no hay errores de datos conocidos

En el futuro, puede agregar discos en conjuntos de dos (llamados VDEV) para crecer del tamaño de este Zpool, los nuevos discos aparecerán como Mirror-1, Mirror-2, etc. No tiene que crear su Zpool como yo, puede usar la espejo con más discos, puede usar rayas sin redundancia pero mejor rendimiento, o puede usar Raidz. Al final del día, lo que importa es que hemos creado un Zpool llamado Tank. Sobre el cual vivirá el NFS compartido. Creemos un conjunto de datos que se compartirá. Primero asegúrese de que la piscina, llamada 'tanque', esté montada. El punto de montaje predeterminado es '/tanque' .

servidor $ sudo ZFS Mount Tank
servidor $ sudo zfs crea tanque/nfsshare #cree un nuevo conjunto de datos en la parte superior de la piscina

Configuración de permisos

Al compartir un directorio NFS, el Superuser en el sistema del cliente no tiene acceso a nada en el recurso compartido. Mientras que el SuperUser del lado del cliente es capaz de hacer algo en la máquina del cliente, el soporte NFS técnicamente no es parte de la máquina del cliente. Por lo tanto, permitir operaciones en nombre del superusor del lado del cliente asignado como superusor del lado del servidor podría dar lugar a problemas de seguridad. De forma predeterminada, NFS mapea las acciones del superusor del lado del cliente a nadie: usuario de nogroup y grupo de usuarios. Si tiene la intención de acceder a los archivos montados como root, entonces el conjunto de datos en nuestro servidor NFS también debe tener los mismos permisos,

servidor $ sudo chown nadie: nogroup /tank /nfsshare

El servidor NFS ejecutará cualquier acción por parte de la raíz del lado del cliente como usuario de nadie, por lo que el permiso anterior permitirá que las operaciones pasen.

Si está utilizando un nombre de usuario diferente (regular), a menudo es conveniente tener un usuario con el mismo nombre de usuario exacto en ambos lados.

Creando compartir NFS

Una vez que haya creado zpool, debe instalar el paquete del servidor NFS desde su administrador de paquetes:

servidor $ sudo apt install nfs-kernel-server

Tradicionalmente, el servidor NFS usa /etc /exporta archivo para obtener una lista de clientes aprobados y los archivos a los que tendrán acceso. Sin embargo, utilizaremos la función incorporada de ZFS para lograr lo mismo.

Simplemente use el comando:

servidor $ sudo zfs set sharenfs = "on" /tank /nfsshare

Anteriormente, aludí a dar solo ciertos IP el acceso. Puedes hacerlo como sigue:

servidor $ sudo zfs set sharenfs = "rw [email protected] de 0/24 "/nfsshare

El 'RW' significa permisos de lectura-escritura, y eso es seguido por el rango de IPS. Asegúrese de que el puerto número 111 y 2049 esté abierto en su firewall. Si está usando UFW, puede verificarlo ejecutando:

Estado de $ UFW de servidor

Tome nota de la IP de su servidor en la LAN, utilizando el comando IFCONFIG o ADDR IP. Llamémoslo servidor.IP

Montaje del lado del cliente

Una vez que se crea la compartir, puede montarla en la máquina de su cliente, ejecutando el comando:

Cliente $ Mount -T NFS Server.IP:/Tank/Nfsshare/MNT

Esto montará la carpeta NFS compartir en /mnt, pero podría haber elegido fácilmente cualquier otro punto de montaje de su elección.

Conclusión

El intercambio de archivos es probablemente el aspecto más importante de la administración del sistema. Mejora su comprensión de la pila de almacenamiento, redes, permisos de usuario y privilegios. Rápidamente se dará cuenta de la importancia del principio de menor privilegio, es decir, solo le dará al usuario el mejor acceso posible que necesita a su trabajo.

También aprenderá sobre la interoperabilidad entre los diferentes sistemas operativos. Los usuarios de Windows pueden acceder a los archivos NFS, al igual que los usuarios de Mac y BSD pueden. No puede restringirse a un sistema operativo cuando se trata de una red de máquinas, todas sus propias convenciones y vernáculos. Así que adelante y experimente con su NFS Share. Espero que hayas aprendido algo.