En los clientes hay que instalar el siguiente paquete para poder acceder a carpetas compartidas por NFS:
apt install nfs-common
En el servidor hay que instalar el siguiente paquete para poder compartir una carpeta por NFS:
apt install nfs-kernel-server
Al instalarlo informará que se creó el archivo /etc/exports.
1. Editar el archivo de configuración:
nano /etc/exports
2. Añadir una línea para compartir la carpeta:
/carpeta_a_compartir hostname_permitido(permisos) hostname_permitido_2(permisos) ...
Hay que usar el tabulador para separar los elementos de la línea.
/carpeta_a_compartir: La carpeta local del servidor que desea compartirse a otros equipos.
/hostname_permitido(permisos): Definimos los equipos que puedan acceder al recurso. Entre paréntesis seleccionamos los permisos rw (read and write) o ro (read only). Definición de hostnames:
* - Se permite a cualquier equipo.
hostname - Se permite a un equipo específico mediante su nombre de equipo.
Hay que especificar en el archivo /etc/hosts una línea para definir su dirección IP.
IP - Se permite a un equipo específico mediante su dirección IP.
dirección_red/mascara - Se permite el acceso a los equipos de una subred mediante la dirección de red.
Se define la máscara en formato CIDR (ej. /24).
3. Guardar y salirse del editor y aplicar los cambios con el comando:
exportfs -ra
1. En el cliente se puede mirar que carpetas se puede montar del servidor:
showmount -e IP_servidor
IP_servidor: La IPv4 del servidor que aloja el recurso compartido.
Dará error si no se instaló el paquete nfs-common.
2. Una vez podamos ver el recurso hay que montar la carpeta del servidor en una carpeta del cliente:
mkdir /mnt/carpeta_local
mount -t nfs IP_servidor:/carpeta_remota /mnt/carpeta_local
/mnt/carpeta_local: Una span_contenido local del cliente en la que montar el recurso compartido.
/carpeta_remota: La span_contenido en el servidor del recurso compartido.
3. Al montarse no se puede acceder a la carpeta por permisos. En el servidor hay que darle permisos a otros:
chmod 755 /carpeta_remota
El comando ls -ld /mnt/carpeta_local no da la información correcta en el cliente al dar un usuario y grupo propietario diferente al real en el servidor. Esto sucede ya que Linux utiliza los UID y GID del servidor y que en el cliente normalmente tiene usuarios diferentes creados en esos IDs.
Se puede ver los IDs del servidor sin traducirlos al nombre usuario local del cliente con el comando ls -ldn /mnt/carpeta_local.
1. Asegurarse de que los UID y GID coincidan entre cliente y servidor. Luego crear en el cliente los mismos usuarios y grupos que en el servidor usando el mismo UID y GID:
groupadd -g gid_grupo nombre_grupo
useradd -m -u uid_usuario -g gid_grupo nombre_usuario
2. Forzar el montaje de NFS con versión 3:
mount -t nfs -o nfsvers=3 IP_servidor:/carpeta_remota /mnt/carpeta_local
A TENER EN CUENTA:
Si la carpeta se comparte con permisos ro y se entra de forma remota tendrá esos permisos aunque de forma local en el servidor tenga los permisos rwx.
Los permisos que se aplican son ro al ser de forma remota. Si entra en local tendrá los permisos rwx.
Si es al revés (remota - rw, local - rx) dará error ya que no tiene el local el permiso w.
IMPORTANTE:
Los permisos efectivos son los más restrictivos entre los permisos del sistema de ficheros y los definidos en la exportación (ro / rw).
PROBLEMA DE SEGURIDAD:
Si en un cliente existen usuarios con el mismo UID que en el servidor, aunque tengan nombres diferentes, esos usuarios podrán acceder a los recursos del servidor con los permisos asociados a ese UID. Esto significa que un usuario no autorizado podría tener acceso, ya que NFSv3 solo utiliza el UID/GID para autenticar, no los nombres de usuario.
PROBLEMA DE GESTIÓN:
Por cada usuario y grupo del servidor se deben duplicar en todos los clientes, lo que provoca exceso de usuarios y grupos, mala escalabilidad y mayor complejidad administrativa.
MEJOR SOLUCIÓN:
Centralizar la gestión de usuarios y grupos mediante un sistema como LDAP.
1. Hay que editar el siguiente archivo:
nano /etc/fstab
2. Añadimos la siguiente línea:
IP_servidor:/carpeta_remota /mnt/carpeta_local nfs defaults,nfsvers=3 0 0
Hay que usar el tabulador para separar los elementos de la línea.
IP_servidor: La dirección IP que tiene el servidor que aloja el recurso compartido.
/carpeta_remota: La span_contenido en el servidor del recurso compartido.
/mnt/carpeta_local: La span_contenido local en la que vamos a montar la carpeta.
nfs: Tipo de sistema de ficheros.
defaults: Opciones predefinidas.
nfsvers=3: Se indica que se debe usar NFSv3.
0: No realizar una copia de seguridad.
0: No realizar una comprobación del sistema de ficheiros con los programas dump y fsck.