Network File System o NFS es un protocolo de sistema de archivos distribuido que permite a los hosts remotos montar sistemas de archivos en una red y realizar operaciones de archivos en ellos como si estuvieran montados localmente. Esto es especialmente útil cuando desea compartir recursos de un servidor con varios clientes o permitir que varios clientes escriban en un único espacio de almacenamiento.
En este tutorial, aprenderá a instalar y configurar el servidor NFS y los clientes NFS basados en Rocky Linux 8. Para ello, configuraremos un host o servidor para compartir archivos y un cliente para acceder a los archivos del host mediante un montaje NFS. .
Requisitos
- Dos servidores Rocky Linux 8. Cada uno de estos debe tener un usuario no root con privilegios sudo.
- Tanto el host como el cliente deben tener una dirección IP estática. Incluso puede configurar ambos a través de una red privada. Para nuestro tutorial, usaremos host_ip para indicar la dirección IP del Host y client_ip para referirse a la dirección IP del Cliente.
Paso 1:instalar NFS en el host y el cliente
Anfitrión
Para instalar paquetes NFS, debe instalar nfs-utils
paquete. Proporciona un demonio para el servidor NFS y herramientas relacionadas.
Instale el paquete.
$ sudo dnf install nfs-utils
Habilite e inicie el nfs-server
Servicio. Servicios restantes necesarios para montar y compartir NFS como nfsd
, nfs-idmapd
, rpcbind
, rpc.mountd
, lockd
, rpc.statd
, rpc.quotad
y rpc.idmapd
iniciar automáticamente junto con él.
$ sudo systemctl enable nfs-server --now
Verifique la versión de instalación de NFS.
$ sudo cat /proc/fs/nfsd/versions -2 +3 +4 +4.1 +4.2
Las versiones 3 y 4 de NFS están habilitadas de manera predeterminada y la versión 2 está deshabilitada. NFSv2 es bastante antiguo y está desactualizado, por lo que puede ver el -ve firme delante de él.
NFS almacena sus configuraciones en /etc/nfsmount.conf
y /etc/nfs.conf
archivos El /etc/nfsmount.conf
es configurar montajes NFS mientras /etc/nfs.conf
es configurar el demonio NFS y las herramientas asociadas. La configuración predeterminada es suficiente para nuestro tutorial y no se requiere ningún cambio.
Cliente
En el cliente, instale nfs-utils
y nfs4-acl-tools
paquetes.
$ sudo dnf install nfs-utils nfs4-acl-tools
Paso 2:crea los directorios compartidos en el host
Usaremos dos ejemplos con diferentes ajustes de configuración:uno con un montaje de propósito general y otro compartiendo el directorio de inicio del host.
Los directorios montados en NFS no forman parte del Cliente. Por lo tanto, NFS no puede realizar tareas que requieran privilegios de superusuario. Significa que el cliente no puede cambiar la propiedad, escribir en ellos como usuario raíz o realizar tareas de alto nivel. Sin embargo, hay casos en los que un usuario de confianza en el cliente necesita realizar tales tareas sin requerir acceso de superusuario en el host. El servidor NFS se puede configurar para permitir esto, pero se corre el riesgo de que un cliente pueda acceder al host.
Trabajar con una montura de uso general
Para nuestro primer caso, crearemos un montaje simple que use el comportamiento NFS predeterminado, lo que significa que el cliente no puede realizar ninguna tarea que requiera privilegios de superusuario.
Cree un directorio compartido.
host:$ sudo mkdir /var/nfs/share -p
El usuario raíz del host será el propietario de este directorio ya que usamos sudo
para crearlo.
host:$ ls -l /var/nfs total 0 drwxr-xr-x. 2 root root 6 Dec 13 07:30 share
NFS traducirá todas las operaciones raíz en el lado del cliente al nobody:nobody
credenciales por razones de seguridad. Por lo tanto, debemos hacerlos coincidir en el lado del host.
host:$ sudo chown nobody:nobody /var/nfs/general
Trabajar con el directorio principal
Para nuestro segundo caso, haremos que el directorio de inicio en el host esté disponible para el cliente. No necesitamos crearlo ya que ya existe. No necesitamos cambiar ningún permiso, ya que afectaría a los usuarios en la máquina host.
Paso 3:configuración de exportaciones NFS en el host
Abra el archivo /etc/exports
en la máquina Host para editar.
host:$ sudo nano /etc/exports
Pegue el siguiente código en el archivo.
/var/nfs/share client_ip(rw,sync,no_subtree_check) /home client_ip(rw,sync,no_root_squash,no_subtree_check)
Cada directorio y su configuración deben estar en una línea separada. Reemplace el client_ip
valor con la dirección IP real de la máquina cliente.
Repasemos todas las opciones para las exportaciones de NFS.
- rw - otorga a la máquina cliente acceso de lectura y escritura en el volumen NFS.
- sincronizar - esta opción obliga a NFS a escribir cambios en el disco antes de responder. Esta opción se considera más confiable. Sin embargo, también reduce la velocidad de las operaciones con archivos.
- no_subtree_check - esta opción evita la verificación de subárboles, un proceso en el que el host debe verificar si el archivo está disponible junto con los permisos para cada solicitud. También puede causar problemas cuando se cambia el nombre de un archivo en el host mientras aún está abierto en el cliente. Deshabilitarlo mejora la confiabilidad de NFS.
- no_root_squash - De forma predeterminada, NFS traduce las solicitudes de un usuario raíz en el cliente a un usuario sin privilegios en el host. Esta opción deshabilita ese comportamiento y debe usarse con cuidado para permitir que el cliente obtenga acceso al host.
Una vez terminado, guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.
Para exportar los recursos compartidos, ejecute el siguiente comando.
host:$ sudo exportfs -arv exporting client_ip:/home exporting client_ip:/var/nfs/share
- -a - esta opción hace que se exporten todos los directorios.
- -r - esta opción hace que todos los directorios se exporten mediante la construcción de una nueva lista en
/var/lib/nfs/etab
directorio. Esta opción se usa para actualizar la lista de exportación con cualquier cambio realizado en/etc/exports
. - -v - habilita la salida detallada.
Para enumerar todos los directorios exportados, ejecute el siguiente comando. Mostrará todas las opciones, incluidas las predeterminadas que no se especificaron en /etc/exports
archivo.
host:$ sudo exportfs -s /var/nfs/share client_ip(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash) /home client_ip(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
Paso 4:configuración del cortafuegos en el host
Rocky Linux usa Firewalld Firewall. Compruebe el estado del cortafuegos.
host:$ sudo firewall-cmd --state running
Esto indica que está funcionando correctamente.
El firewall funciona con diferentes zonas, y la zona pública es la predeterminada que usaremos. Enumere todos los servicios y puertos activos en el firewall.
host:$ sudo firewall-cmd --permanent --list-services
Debería mostrar el siguiente resultado.
cockpit dhcpv6-client ssh
A continuación, debemos permitir el tráfico a los servicios NFS necesarios:mountd
, nfs
y rpc-bind
. También necesitamos permitir el acceso desde la IP del cliente. Si sus clientes y servidores host están en la misma subred, entonces no necesita agregar la dirección IP del cliente.
host:$ sudo firewall-cmd --permanent --add-service=nfs host:$ sudo firewall-cmd --permanent --add-service=rpc-bind host:$ sudo firewall-cmd --permanent --add-service=mountd host:$ sudo firewall-cmd --permanent --add-source=client_IP
Vuelva a cargar el cortafuegos para aplicar los cambios.
host:$ sudo firewall-cmd --reload
Paso 5 - Creación de puntos de montaje y directorios en el cliente
Ahora que el servidor/host NFS está configurado, el siguiente paso es configurar los puntos de montaje y los directorios en el cliente. Puede ejecutar el showmount
Comando en el cliente para verificar la lista de sistemas de archivos exportados en el Host.
client:$ showmount -e host_ip Export list for host_ip: /home host_ip /var/nfs/share host_ip
Cree siempre un nuevo directorio como puntos de montaje en el cliente o use un directorio vacío existente. Si hay un archivo en un directorio que monte, se ocultará.
Cree los directorios de montaje.
client:$ sudo mkdir -p /nfs/share client:$ sudo mkdir -p /nfs/home
Monte los recursos compartidos utilizando la dirección IP del host.
client:$ sudo mount host_ip:/var/nfs/share /nfs/share client:$ sudo mount host_ip:/home /nfs/home
Verifica que el montaje haya sido exitoso.
client:$ df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 370M 0 370M 0% /dev tmpfs 405M 0 405M 0% /dev/shm tmpfs 405M 16M 389M 4% /run tmpfs 405M 0 405M 0% /sys/fs/cgroup /dev/vda1 25G 2.4G 23G 10% / tmpfs 81M 0 81M 0% /run/user/1000 host_ip:/var/nfs/share 25G 2.4G 23G 10% /nfs/share host_ip:/home 25G 2.4G 23G 10% /nfs/home
Ambos recursos compartidos se montan desde el mismo sistema de archivos. Por lo tanto, muestran el mismo uso de disco.
También puedes usar el mount
comando para verificar.
client:$ mount | grep nfs rpc_pipefs on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime) host_ip:/var/nfs/share on /nfs/share type nfs4 (rw,relatime,vers=4.2,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=client_ip,local_lock=none,addr=host_ip) host_ip:/home on /nfs/home type nfs4 (rw,relatime,vers=4.2,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=client_ip,local_lock=none,addr=host_ip)
Paso 6:probar el acceso NFS
Compartir uso general de prueba
Escriba un archivo de prueba en /var/nfs/share
compartir.
client:$ sudo touch /nfs/share/test.txt
Comprueba su propiedad.
client:$ ls -l /nfs/share/test.txt -rw-r--r--. 1 nobody nobody 0 Dec 13 08:08 /nfs/share/test.txt
Dado que montamos este volumen usando la configuración NFS predeterminada y creamos el archivo en el cliente usando sudo
, la propiedad del archivo por defecto es nobody:nobody
. Los superusuarios del cliente no pueden realizar ninguna tarea administrativa en el recurso compartido.
Compartir directorio de inicio de prueba
Escriba un archivo de prueba en /nfs/home
compartir.
client:$ sudo touch /nfs/home/home.txt
Comprueba su propiedad.
client:$ ls -l /nfs/home/home.txt -rw-r--r--. 1 root root 0 Dec 13 08:09 /nfs/home/home.txt
Ya que usamos el no_root_squash
opción, permitió que el usuario raíz del cliente actuara como raíz en el recurso compartido.
Paso 7:hacer que los puntos de montaje sean permanentes
Los recursos compartidos de NFS por defecto son temporales y deben montarse en el arranque. Podemos hacerlos permanentes editando el /etc/fstab
archivo en el cliente.
Abra el archivo /etc/fstab
para editar.
client:$ sudo nano /etc/fstab
Pegue las siguientes líneas en la parte inferior del archivo.
. . . host_ip:/var/nfs/share /nfs/share nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0 host_ip:/home /nfs/home nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
Puede obtener más información sobre las opciones enumeradas anteriormente ejecutando los siguientes comandos.
client:$ man nfs client:$ man mount
Si desea leerlos en línea, puede buscar en Google la frase man nfs
y man mount
para obtener más información sobre estas opciones.
Paso 8:Desmontar recurso compartido NFS
Si ya no desea los montajes remotos en su sistema, puede desmontarlos usando el umount
dominio. Tenga en cuenta que el comando se llama umount y no desmontar lo cual es un error común.
Sal de las monturas compartidas y desmóntalas.
client:$ cd ~ client:$ sudo umount /nfs/share client:$ sudo umount /nfs/home
Si ya no necesita que los recursos compartidos vuelvan a montarse al reiniciar, asegúrese de comentar las entradas correspondientes en el /etc/fstab
archivo poniendo un #
firmar delante de ellos.
Conclusión
En este tutorial, aprendimos cómo crear un servidor host NFS y montar directorios usándolo, que compartimos con un cliente NFS. Si lo está implementando en una red privada, entonces no debería haber ningún problema, pero si lo está usando en producción, debe recordar que el protocolo no está encriptado y debe implementar alguna autenticación para proteger sus datos.
Si tiene alguna pregunta, publíquela en los comentarios a continuación.