NFS¶
- NFS (Network File System) es un protocolo que permite la compartición de recursos entre sistemas heterogéneos.
- Creado por Sun Microsystems en 1985.
- Versión actual NFSv4. Las versiones anteriores prácticamente no tienen medidas de seguridad implementadas.
- Es compatible con una autenticación externa con Kerberos.
- Está implementado en Linux, macOS y Windows.
Ventajas NFS.¶
✅ Al centralizar los recursos evitamos tener varias copias en diferentes equipos de la red → Ahorrando espacio y evitando duplicidad de información.
✅ Asegura la integridad de los datos al obligar a que todas las escrituras sean finalizadas antes de que otro usuario haga modificaciones.
✅ Permite la compartición de los perfiles de usuario (/home/).
✅ Permite compartir dispositivos de almacenamiento externos como memorias flash o discos externos.
✅ Características de seguridad para el control de acceso: ACLS o KERBEROS.
Desventajas NFS.¶
❌ No soporta "failover", es decir, si se produce un error no puede conmutar automáticamente a un segundo servidor.
❌ NFS no tiene balanceo de carga. Por lo que no pueden haber más de un servidor compartiendo la carga de trabajo.
❌ NFS tiene una carencia en el control de permisos, identifica a los usuarios directamente por UID/GID, por lo que si en el servidor existe un usuario “javi” con UID 1003 y en el cliente hay un usuario “maría” con UID 1003 el sistema NFS los confunde y a ambos les da los mismos permisos. Para solventarlo se combina con un servicio LDAP que se encargará de la gestión de los permisos.
Instalación y Configuración en servidor Ubuntu.¶
sudo apt-get install nfs-kernel-server
Confirmar instalación.¶
sudo systemctl status nfs-server
Configuración del servicio.¶
- Crea en el servidor la carpeta a compartir.
mkdir /srv/nfsEjemplo
chown nobody:nogroup /srv/nfsEjemplo
chmod -R 777 /srv/nfsEjemplo
- Modificar fichero de configuración (/etc/exports).
Cada línea es un recurso compartido.
Estructura /etc/exports
ruta cliente_1(opciones) cliente_2(opciones) …
/srv/nfsEjemplo *(rw,sync,no_root_squash,no_subtree_check)
Reiniciar el servicio.¶
sudo systemctl restart nfs-server
Instalación y Configuración en cliente Ubuntu.¶
Instalación.¶
sudo apt-get install nfs-common rpcbind
Configuración.¶
- Creamos un punto de montaje donde se conectará a la carpeta NFS del servidor.
sudo mkdir -p /mnt/compartida
- Le damos permisos totales para evitar problemas de usuarios que no existan en cliente/servidor con mismo UID/GID.
sudo chmod -R 777 /mnt/compartida
- Montamos con el servidor.
sudo mount 192.168.56.100:/srv/nfsEjemplo /mnt/compartida
- Comprobamos el montaje
df -h
Instalación y Configuración en cliente Windows.¶
Instalación.¶
- Es necesario activar NFS en las características de Windows:
Panel de control → Programas → Programas y características → Activar o desactivar las características de Windows
Configuración.¶
Opciones.¶
Opción | |
---|---|
ro |
Solo lectura |
rw |
Lectura y Escritura |
sync |
Escribe en disco y luego confirma que la tarea ha sido realizada. Más lenta pero evita problemas posibles problemas de sincronismo. |
async |
Deshabilita sync. Confirma que la tarea ha sido realizadad y luego escribe en disco. Mejor rendimiento pero más posibilidad de crear ficheros corruptos. |
root_squash |
Un usuario administrador del sistema pierde sus privilegios al acceder de forma remota por NFS. En su lugar, se les trata como un usuario “nfsnobody” que es un usuario con permisos mínimos. |
no_root_squash |
Deshabilita la opción root_squash. |
subtree_check |
Tiene en cuenta los permisos de las carpetas padre. |
no_subtree_check |
No tiene en cuenta los permisos de las carpetas padre. |
async
Mejora el rendimiento a cambio de que exista el riesgo de corrupción en los archivos o, incluso, en todo el sistema de archivos, si se produjese una interrupción del fluido eléctrico o un bloqueo del sistema. Recibe la orden de escritura y confirma al cliente que ha sido realizada con éxito (mentira, ya que no ha sido realizada), acto seguido puede recibir X órdenes de otros clientes y a todos les hará lo mismo, finalmente realiza escribe todos los cambios a la vez. Por tanto es más rápido que el método síncrono ya que no debe realizar tantos accesos a memoria.
Ejemplos¶
/home *(rw,sync,no_root_squash,no_subtree_check)
~/compartida *(rw,sync,no_subtree_check)
/usr/local 192.168.0.1(ro) 192.168.0.2(ro)
/srv/salva 192.168.0.1(rw) 192.168.0.2(rw)
/srv/local 192.168.0.0/255.255.255.0(ro)
/srv/pepe 192.168.0.0/255.255.255.0(rw)
Montaje automático.¶
La configuración de montaje de esta forma tiene un gran inconveniente, si se reinicia el cliente la configuración se pierde. Para solucionarlo se dispone de un archivo denominado /etc/fstab (file systems table) donde se guarda la información necesaria sobre los diferentes volúmenes que se montarán durante el arranque del sistema.
Para modificar este archivo se debe tener en cuenta:
Cada línea del archivo representa un volumen diferente y atiende al siguiente formato:
Dispositivo: Referencia al volumen que vamos a montar. En este caso su valor será 192.168.2.4:/home/sor/compartida.
Punto de montaje: La carpeta donde se montarán los datos del volumen. Su valor para la primera carpeta será /mnt/nfs/home/sor/compartida.
Sistema de archivos: Indica el sistema de archivos utilizado en el volumen. En ambos casos, el valor será nfs.
Opciones: Indica los parámetros que usará mount para montar el dispositivo. Estarán separadas por comas y no incluirán espacios. En este caso las opciones serán auto,noatime,nolock,bg,nfsvers=3,intr,tcp,actimeo=1800. Estas opciones son explicadas en detalle en la documentación oficial de ubuntu Enlace.
Frecuencia de respaldo: Frecuencia con la que se utiliza la herramienta dump para respaldar (copiar) el sistema de archivos. Si su valor es cero, el volumen no se respalda.
Orden de revisión: Orden en el que la herramienta fsck revisa el volumen en busca de posibles errores durante el proceso de inicio. Si su valor es cero, el volumen no se revisa.
Por lo tanto se debe incluir la línea indicada abajo para realizar la configuración automática del montaje:
sudo nano /etc/fstab
#IP_SERVIDOR:RUTA_SERVIDOR RUTA_CLIENTE nfs OPCIONES 0 0
192.168.2.4:/home/sor/compartida /mnt/nfs/home/sor/compartida nfs auto,noatime,nolock,bg,nfsvers=3,intr,tcp,actimeo=1800 0 0