NFS
El servicio NFS es utilizado en muchos sistemas operativos para compartir directorios a nivel de red y posibilita que distintos sistemas conectados a una misma red accedan a ficheros remotos como si se tratara de locales. El protocolo NFS está incluido por defecto en los Sistemas Operativos UNIX y la mayoría de distribuciones Linux.
Con esto tenemos, entre otros puntos a favor, que los equipos usuarios no necesitan disponer de un directorio “home” en cada una de las máquinas de la organización. Los directorios “home” pueden crearse en el servidor de NFS para posteriormente poder acceder a ellos desde cualquier máquina a través de la infraestructura de red.
Su implementación más utilizada es en dominios de red locales en la que un servidor comparte las «/home» y otros directorios a una serie de clientes que mediante identificación por un servicio de autentificación, por ejemplo LDAP, se validan al servidor y trabajan con estos recursos en tiempo real. Esto tiene como ventaja la reducción de espacio en el cliente y la total gestión por parte del servidor.
Instalación y configuración en el servidor
Primero instalamos el servicio en nuestro equipo actualizado:
sudo dnf install nfs-utils
Habilitamos el servicio y lo iniciamos:
sudo systemctl enable nfs-server --now
sudo systemctl start nfs-server
Y añadimos la norma al cortafuegos:
sudo firewall-cmd --add-service={nfs,nfs3,mountd,rpc-bind}
sudo firewall-cmd --runtime-to-permanent
sudo firewall-cmd --reload
Editamos el fichero:
sudo vi /etc/idmapd.conf
Y cambiamos el valor de la fila 5 al nombre de nuestro dominio, por ejemplo:
Domain = mainkivi.info
Y pasamos a configurar el fichero de recursos compartidos:
sudo nano /etc/exports
Un ejemplo práctico de contenido de fichero:
/home/ 192.168.1.0/24(rw,sync,no_subtree_check)
/srv/exports/M *(rw,sync,no_subtree_check)
Primero estoy compartiendo el directorio «/home» de mi equipo servidor a todos los equipos que formen parte de la red «192.168.1.0/24», el resto no tendrá acceso. Igualmente, estoy compartiendo el directorio /srv/exports/M para todos los equipos que puedan acceder a la red.
El resto de parámetros se pueden explicar en la siguiente imagen:
Una vez configurado el servicio, reiniciamos con:
sudo systemctl restart nfs-server
Para comprobar los directorios compartidos ejecutamos:
sudo exportfs -v
Y nos devolverá los directorios compartidos y sus permisos.
/home 192.168.1.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
/srv/exports/M <world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
También podemos compartir un directorio de manera manual con:
sudo exportfs -o ro *:/data
Con este ejemplo, compartimos a todos los equipos locales el directorio «/data» con permisos de solo lectura.
Configurando el cliente
Lo primero que haremos es instalar las utilidades:
sudo dnf -y install nfs-utils
Para comprobar la conexión con el servidor y los directorios compartidos:
showmount -e 192.168.1.3
También podemos ver los directorios ya montados con:
showmount --directories
O ambos con con:
showmount --all 192.168.1.3
Para realizar un montado temporal podemos ejecutar:
sudo mkdir -p /mnt/temp #para crear el directorio temporal
sudo mount -t nfs 192.168.1.3:/home /mnt/temp #especifico el tipo de montage, el directorio compartido y dónde lo monto.
Persistiendo el montaje
Primero editamos en el cliente:
sudo nano /etc/idmapd.conf
Y en la línea 5 editamos el nombre de nuestro dominio:
Domain = mainkivi.info
Ahora tenemos dos opciones de persistencia, por fstab (montaje estático ) o por automount ( montaje dinámico ).
Montaje estático por fstab
Podemos añadir el punto de montaje al inicio del sistema editando:
sudo nano /etc/fstab
Y añadimos al final algo parecido a:
#/home en el servidor
192.168.1.3:/home /mnt/home nfs defaults 0 0
192.168.1.3:/srv/exports/M /mnt/M nfs defaults 0 0
Refrescamos el punto de montaje con:
sudo mount -a
Cada vez que iniciemos el equipo el montaje se realizará, fijémonos que de esta manera podemos hacer que la «/home» del equipo cliente sea la del servidor igual que cualquier directorio.
Un detalle importante es que los permisos vienen dados por el servidor según la ID del usuario, es decir, si el usuario local tiene la UID 10000 y en el servidor el mismo usuario tiene la UID 10001, los permisos NO se aplicarán de la misma manera, es por eso que la tarea del soporte tiene que ser la gestión también del ID del usuario local i remoto. Una buena práctica es hacer que los usuarios tengan una ID alta tanto en servidor como en cliente, por ejemplo 20000.
Para modificar la ID del usuario local ya creado ejecutamos el comando:
sudo usermod -u 20001 usaurio1
Con esto, el usuario1 cambia su ID, pero hay que tener en cuenta que también habría que cambian los atributos de otros ficheros locales.
Si el usuario es nuevo lo ejecutaremos con:
sudo useradd -u 20002 usuario2
La definición del límite de ID viene en el fichero
/etc/login.defs
Entre otros parámetros existen las líneas:
UID_MIN 1000
UID_MAX 60000
Como las correspondientes al grupo:
GID_MIN 1000
GID_MAX 60000
Con esto verificamos el número máximo que recibiría un usuario, en este caso 60000.