Cómo instalar y configurar un servidor NFS en Debian 11
NFS o Sistema de Archivos en Red es un protocolo de red que te permite montar un sistema de archivos remoto a través de la red. El protocolo NFS utiliza la arquitectura servidor-cliente, el servidor NFS que proporciona todos los directorios o particiones que están listos para acceder y montar, y los clientes que utilizan el protocolo rpcbind para acceder a todos los directorios y sistema de archivos a través de la conexión de red interna.
A continuación se describe el estado actual del protocolo Sistema de Archivos en Red.
1. El NFSv2 y el NFSv3 siguen siendo compatibles con los principales sistemas operativos, pero por motivos de seguridad, debes restringir el acceso del servidor NFS a la red local de confianza. Los protocolos NFSv2 y NFSv3 se recomiendan para los tipos de despliegue pequeños y medianos.
2. El protocolo NFSv4 proporciona funciones de seguridad básicas como la autenticación y el cifrado, pero depende de Kerberos para esas partes. Así que necesitas añadir una configuración adicional para utilizar NFSv4 con funciones básicas de seguridad.
En este tutorial aprenderás a instalar y configurar un servidor NFS en la última versión de Debian 11 Bullseye. Instalarás el servidor NFS y asegurarás el acceso limitando los hosts mediante el cortafuegos ufw. Y luego aprenderás a configurar el cliente para montar directorios y particiones proporcionados por el servidor NFS, y a configurar el montaje automático del servidor NFS en el arranque del sistema mediante la configuración ‘/etc/fstab’.
Requisitos previos
1. Utilizaremos dos máquinas diferentes en la misma red, como se indica a continuación.
– debian64 – 192.168.1.25 – como Servidor NFS
– client-debian – 192.168.1.30 – como cliente
2. Un usuario root o un usuario con privilegios de root. Este usuario se utilizará para instalar nuevos paquetes y editar la configuración del sistema.
Instalación y configuración del servidor NFS
Al principio, instalarás el paquete del servidor nfs y configurarás el directorio compartido para los clientes.
1. Ejecuta el siguiente comando para instalar los paquetes del servidor nfs.
apt install nfs-kernel-server rpcbind
Escribe‘y‘ y pulsa‘Enter‘ para continuar la instalación.
2. Crea ahora un nuevo directorio que quieras compartir con los clientes. En este ejemplo, compartirás dos directorios ‘/mnt/shared’ y ‘/srv/data’ con los clientes. Y no compartas el directorio raíz por defecto ‘/’ ni el directorio ‘/etc’.
Crea un nuevo directorio compartido utilizando el siguiente comando mkdir.
mkdir -p /mnt/shared mkdir -p /srv/data
Crea un nuevo archivo en cada directorio ejecutando el comando echo que aparece a continuación.
echo "test file nfs server" > /mnt/shared/test-file.txt echo "test file nfs server" > /srv/data/test-file.txt
Ahora cambia la propiedad de ambos directorios compartidos a ‘nobody:nogroup’ ejecutando el comando de abajo.
chown nobody:nogroup /mnt/shared /srv/data
Y ya estás listo para configurar el Servidor NFS.
3. Para configurar el directorio compartido para nfs, edita la configuración ‘/etc/exports’ utilizando el editor nano.
nano /etc/exports
A continuación se muestran algunas configuraciones de ejemplo para algunos escenarios
Compartir directorio para el cliente de un solo host con acceso de lectura-escritura.
/mnt/shared 192.168.1.30(rw,sync,no_subtree_check)
Compartir directorio para varios clientes, incluido un grupo de la red anfitriona.
/srv/data 172.16.1.0/24(rw,sync,no_root_squash,no_subtree_check) 10.11.12.0/24(rw,no_subtree_check)
Compartir directorio para un único cliente con acceso de sólo lectura.
/srv/data 192.168.1.30(ro)
A continuación se muestra la configuración final de ejemplo.
/mnt/shared 192.168.1.30(rw,sync,no_subtree_check) /srv/data 172.16.1.0/24(rw,sync,no_root_squash,no_subtree_check) 10.11.12.0/24(rw,no_subtree_check) /srv/data 192.168.1.30(ro,no_root_squash)
Guarda la configuración pulsando la tecla«Ctrl+x«, escribe«y» y pulsa«Intro» para salir.
Opciones que debes conocer
- rw: permitir el acceso de lectura y escritura tanto para el servidor NFS como para el cliente al volumen/directorio.
- ro: permitir el acceso de sólo lectura a los clientes.
- sync: responder a las peticiones sólo después de que los cambios se hayan consignado en el almacenamiento estable. Esta opción está activada por defecto.
- async: permite que el servidor NFS infrinja el protocolo NFS y responda a las solicitudes antes de que los cambios realizados por dicha solicitud se hayan consignado en el almacenamiento estable.
- subtree_check: permite y activa la comprobación de subárboles. Esta opción está activada por defecto.
- no_subtree_check: desactiva la comprobación de subárboles, que tiene ligeras implicaciones de seguridad, pero puede mejorar la fiabilidad en algunas circunstancias.
- root_squash: asigna las peticiones de uid/gid 0 al uid/gid anónimo. Ten en cuenta que esto no se aplica a otros uids o gids que puedan ser igualmente sensibles, como el usuario bin o el grupo staff.
- no_root_sqash: desactiva el aplastamiento de root. Esta opción es útil principalmente para clientes sin disco.
4. A continuación, reinicia el servicio nfs-server para aplicar una nueva configuración mediante el comando que aparece a continuación.
systemctl restart nfs-server
5. Ahora comprueba y verifica el servicio nfs-server utilizando el siguiente comando.
systemctl is-enabled nfs-server systemctl status nfs-server
Y obtendrás una salida similar a la de abajo.
Como puedes ver, el servicio nfs-server está «activado» y se ejecutará automáticamente al iniciar el sistema. Y el estado actual de nfs-service es ‘active (exited)’, lo que significa que el servicio se está ejecutando, pero systemd no puede encontrar el demonio que supervisar.
Proteger el servidor NFS con el cortafuegos UFW
En esta fase, instalarás el cortafuegos ufw y restringirás el acceso al servidor NFS sólo a determinados hosts y redes.
1. Ejecuta el siguiente comando apt para instalar el paquete ufw.
apt install ufw
Escribe‘y‘ y pulsa‘Enter‘ para confirmar y continuar la instalación.
2. Una vez completada la instalación, añade el servicio SSH a las reglas del cortafuegos ufw mediante el comando que aparece a continuación.
ufw allow ssh
3. A continuación, ejecuta los siguientes comandos ufw para añadir hosts o redes a tu cortafuegos ufw.
Permitir que el host con dirección IP‘192.168.1.30‘ acceda al servidor NFS.
ufw allow from 192.168.1.30 to any port nfs
Permitir que el bloque de una red acceda al servidor NFS.
ufw allow from 172.16.1.0/24 to any port nfs ufw allow from 10.11.12.0/24 to any port nfs
4. Después, habilita el cortafuegos ufw mediante el siguiente comando.
ufw enable
Escribe«y» y pulsa«Intro» para iniciar y habilitar el cortafuegos ufw.
5. Ahora comprueba el estado del cortafuegos ufw utilizando el siguiente comando.
ufw status
Y verás una salida similar a la de abajo.
Como puedes ver, el estado del cortafuegos ufw es «activo», y el servicio NFS en el puerto predeterminado «2049» está disponible en la lista de reglas.
Configurar el cliente NFS
En este paso vas a configurar los clientes para acceder al directorio compartido y a la partición del servidor NFS.
1. En primer lugar, instala el paquete ‘nfs-common‘ utilizando el comando apt que aparece a continuación.
apt install nfs-common
Escribe‘y‘ y pulsa‘Enter‘ para confirmar y continuar la instalación.
2. Una vez finalizada la instalación, crea un nuevo directorio para el directorio de montaje.
mkdir -p /nfs/shared; mkdir -p /nfs/data
3. Para montar el directorio o partición nfs desde el servidor NFS, ejecuta el comando mount que aparece a continuación.
mount 192.168.1.25:/mnt/shared /nfs/shared mount 192.168.1.25:/srv/data /nfs/data
El comando mount básico para acceder a NFS es especificando la dirección IP del servidor NFS ‘192.168.1.25’ con la ruta mount directorio ‘/mnt/shared’ y ‘/srv/data’ y la ruta destino en el lado cliente directorio ‘/nfs/shared’ y ‘/nfs/data’.
4. A continuación, ejecuta el siguiente comando para verificar que el montaje NFS se ha realizado correctamente.
df -h
Además, puedes comprobar los archivos que acabas de crear encima ejecutando los siguientes comandos.
cat /nfs/shared/test-file.txt cat /nfs/data/test-file.txt
A continuación se muestra la salida que obtendrás.
Como puede verse, has montado correctamente el servidor NFS en el directorio ‘/nfs/compartido’ y ‘/nfs/datos’, y podrás leer los archivos que acabas de crear en la parte superior.
Verificar el acceso de lectura y escritura al servidor NFS
En esta fase vas a verificar el acceso de lectura y escritura al directorio del servidor NFS.
1. Cambia el directorio de trabajo a «/nfs/compartido», comprueba los archivos disponibles en ese directorio y muestra el contenido de ese archivo utilizando el comando que se indica a continuación.
cd /nfs/shared ls
cat test-file.txt
2. A continuación, crea un nuevo archivo utilizando el comando echo que aparece a continuación.
echo "This file from nfs-client" > client.txt cat client.txt
Si eres capaz de crear el archivo ‘cliente.txt’, el acceso de escritura al directorio NFS ‘/nfs/compartido’ es correcto, tal y como se describe en la configuración que aparece a continuación.
/mnt/shared 192.168.1.30(rw,sync,no_subtree_check)
2. A continuación, en la configuración que has creado arriba, el cline tis sólo tiene acceso de lectura al directorio NFS ‘/nfs/data’, como puedes ver en la configuración de abajo.
/srv/data 192.168.1.30(ro,no_root_squash)
Cambia el directorio de trabajo a ‘/nfs/data’, comprueba los archivos que hay en él, comprueba los archivos disponibles en ese directorio y muestra el contenido de ese archivo utilizando el comando como se indica a continuación.
cd /nfs/data ls
cat test-file.txt
A continuación, si quieres crear un nuevo archivo, obtendrás un error ‘Sistema de archivos de sólo lectura’. Porque sólo tienes permiso de ‘sólo lectura’ como se describe en la configuración superior.
echo "This is a file from client to data" > client-data.txt
A continuación se muestra la salida similar que obtendrás.
El permiso de lectura y escritura coincide con la configuración actual del servidor NFS.
Montar NFS en el arranque
En esta fase, aprenderás a montar el directorio/partición NFS en el arranque/inicio del sistema mediante la configuración de ‘/etc/fstab’.
1. Edita la configuración ‘ /etc/fstab ‘ utilizando el editor nano.
nano /etc/fstab
Cambia los detalles de las direcciones IP, el directorio compartido y el directorio de montaje de la ruta por los tuyos y, a continuación, pega la configuración.
192.168.1.25:/mnt/shared /nfs/shared nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0 192.168.1.25:/srv/data /nfs/data nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
Guarda la configuración pulsando‘Ctrl+x‘ y escribe‘y’, luego pulsa‘Enter‘ para salir.
2. A continuación, comprueba que la configuración de‘/etc/fstab‘ es correcta utilizando los siguientes comandos.
Desmonta todo el directorio de montaje utilizando el siguiente comando.
umount -R /nfs/shared umount -R /nfs/data
Ejecuta el siguiente comando para montar todos los sistemas de archivos disponibles en el archivo de configuración ‘/etc/fstab’.
mount -a
Asegúrate de que no tienes ningún error.
Ahora ejecuta el siguiente comando para mostrar todos los sistemas de archivos montados.
df -h
Si tu configuración es correcta, verás que el servidor NFS está montado en el directorio de destino tal y como se describe en la configuración ‘/etc/fstab’.
3. Puedes reiniciar la máquina cliente e iniciar sesión de nuevo, y volver a comprobarlo utilizando el comando que se indica a continuación.
df -h
Y verás que el servidor NFS se monta automáticamente al arrancar el sistema en la máquina cliente a través del archivo ‘/etc/fstab’.
Conclusión
¡Enhorabuena! Has instalado con éxito el Servidor NFS en la última versión de Debian 11 Bullseye. Además, has asegurado con éxito la instalación del Servidor NFS utilizando el cortafuegos ufw, configurando máquinas cliente NFS y configurando el montaje automático mediante la configuración ‘/etc/fstab’. Para el siguiente paso, puede que también te interese el protocolo NFSv4, que proporciona mecanismos de seguridad como el cifrado y la autenticación mediante el servidor Kerberos.