Page cover

Carpetas compartidas NFS

Introducción

En las redes locales, como las que se encuentran en las oficinas y los hogares, es deseable que los ordenadores no sólo puedan acceder a Internet, sino que también puedan comunicarse entre sí.

En ocasiones un ordenador puede actuar como un servidor y un cliente. Por ejemplo, cuando se desea acceder a los archivos de otro ordenador de la red (Supongamos, que se necesita acceder a un archivo almacenado en un ordenador de sobremesa desde un dispositivo portátil) sin la molestia de tener que copiarlo en una unidad USB o similar.

Ejemplo de mapa de servicio NFS con un servidor compartiendo carpetas.

Entre máquinas Linux, NFS (Network File System) se utiliza a menudo para este tipo de funciones, el protocolo NFS es la forma estándar de compartir sistemas de archivos en redes equipadas únicamente con máquinas Unix/Linux con las que un ordenador puede compartir uno o varios de sus directorios con ordenadores específicos de la red. De este modo, NFS puede leer y escribir archivos en estos directorios.

Incluso se puede usar NFS para compartir el árbol de directorios de todo un sistema operativo con clientes que lo usarán para arrancar (Bootear) desde el servidor. Estas computadoras, llamadas thin clients, se utilizan principalmente en redes grandes para evitar el mantenimiento de cada sistema operativo de cada máquina.

Si existen otros tipos de sistemas operativos conectados a la red, como Windows, se recomienda utilizar un protocolo de datos compartidos comprensible para todos ellos como es Samba.

Compartir una carpeta con un grupo de LDAP

Esta práctica esta pensada para realizarse con la práctica de la infraestructura LDAP, la puedes ver aquí ya que para poder realizar debemos revisar lo siguiente:

✅ Servidor LDAP configurado y funcionando.

✅ Grupo LDAP creado (por ejemplo, grupo_nfs).

✅ Usuarios LDAP que formen parte de ese grupo.

✅ Un servidor NFS instalado y funcionando.

✅ Un cliente que pueda montar ese recurso.

Si ya lo tienes todo claro, ¡prosigue con la guía!

Paso 1. Asegúrate de que LDAP gestiona los usuarios y grupos del sistema Si tienes LDAP funcionando con NSS (Name Service Switch), los grupos de usuarios de LDAP pueden ser reconocidos por el sistema, en mi caso es "smx" , desde el cliente ejecuta:

getent group smx

Si el grupo LDAP aparece en la salida, puedes usarlo en permisos de archivos, quédate con el gid del grupo que aparecerá al lado.

También es muy importante que los usuarios LDAP tengan el mismo UID/GID en el cliente y servidor NFS. Si no, los permisos no se aplicarán correctamente. Puedes verificar con:

#En servidor
ldapsearch -x -b dc=ifp,dc=local -s sub "(uid=alex)"

#En cliente:
getent passwd alex
id alex

Ahora deberemos comprobar que el servidor tambien detecte estos grupos como locales, para ello prueba lo mismo que antes, si esto no funciona deberás hacer lo siguiente:

Asegurarnos que el grupo ldap se reconoce correctamente

Si tu servidor NFS no está conectado a LDAP correctamente, necesitarás configurar el cliente LDAP en el servidor. Para ello, asegúrate de que los servicios como nslcd o sssd (dependiendo de la configuración de tu sistema) estén instalados y funcionando.

  • Instala nslcd (si no está instalado):

    sudo apt-get install nslcd

    Cuando aparezca el mensaje asegúrate de marcar las tres primeras opciones:

Esto permitirá usar los usuarios y grupos de ldap, realmente para esta practica con marcar la opción "group", ya funciona.
  • Luego, asegúrate de que el servicio esté activo y lo fijamos:

    sudo systemctl status nslcd
    sudo systemctl enable nslcd
  • Reinicia nslcd para que cargue la configuración:

    arsudo systemctl restart nslcd

Esto debería permitir que el sistema reconozca los grupos de LDAP y sea capaz de usarlos en los comandos de chown como lo haces con grupos locales.

Paso 2. Instala el servidor NFS:

Revisa si nfs esta instalado:

dpkg -l | grep nfs-kernel-server

y, sino, instálalo con:

sudo apt install nfs-kernel-server -y

Paso 3. Crea la carpeta compartida en el servidor NFS

En nuestro caso la carpeta la llamaremos "redes", le daremos los permisos solo para el grupo "smx":

sudo mkdir -p /srv/nfs/redes
sudo chown root:smx /srv/nfs/redes
sudo chmod 770 /srv/nfs/redes

El chmod con esta configuración permitirá que usuarios del grupo LDAP grupo_nfs puedan leer, escribir y ejecutar (entrar en) la carpeta pero bloqueará completamente el acceso a usuarios que no pertenezcan ni al grupo ni sean root.

Paso 4. Exporta la carpeta en /etc/exports Abrimos el archivo:

sudo nano /etc/exports

Y agregaremos una entrada que definirá que directorios se van a compartir por NFS y con que opciones (recuerda cambiar la IP a la de tu red):

/srv/nfs/redes 20.0.0.0/24(rw,sync,no_root_squash)

Las opciones marcadas entre paréntesis hacen lo siguiente:

Opción
Qué hace

rw

Permite lectura y escritura a los clientes.

sync

Hace que los datos se escriban de inmediato en disco, no en caché (más seguro, menos rápido).

no_subtree_check

Desactiva la comprobación de subdirectorios, lo cual mejora el rendimiento y evita errores si el directorio compartido es parte de otro más grande.

Paso 5. Aplica los cambios en el servidor NFS

Es necesario como siempre, para aplicar los cambios, que reiniciemos los servicios:

sudo exportfs -ra
sudo systemctl restart nfs-kernel-server

Paso 6. Monta la carpeta en los clientes Vamos ahora a nuestro cliente, que son los equipos que usarán la carpeta NFS, ejecutaremos:

sudo apt install nfs-common

Crearemos el punto de montaje:

sudo mkdir -p /mnt/nfs/redes

Montamos la carpeta usando la IP del servidor:

  • Si queremos que sea temporal para esta sesión:

    sudo mount 20.0.0.5:/srv/nfs/redes /mnt/nfs/redes

Y si queremos que sea permanente deberemos añadirla a fstab:

echo "20.0.0.5:/srv/nfs/redes /mnt/nfs/redes nfs defaults 0 0" | sudo tee -a /etc/fstab

Y ahora, para terminarlo del todo:

sudo mount -a

La magia de esto está en que solo los usuarios del grupo smx podrán ahora escribir, gracias a los permisos 770 y la pertenencia al grupo, por lo tanto, si tus usuarios LDAP están en ese grupo, ya deberían poder ver la carpeta.


Comprobación del servicio NFS

Vamos ahora a ver, en cualquier caso, cómo verificar que todo esté correcto desde el servidor NFS y desde el cliente:

🖥️ EN EL SERVIDOR NFS

1. Verifica que la carpeta exista

La carpeta que estás compartiendo en /etc/exports debería existir ya en el sistema de archivos:

ls -ld /srv/nfs/compartido

* Si no aparece nada o da error, vuelve a revisar los pasos

2. Asegúrate de que tenga permisos adecuados

Puedes revisar:

ls -ld /srv/nfs/compartido

3. Verifica la exportación NFS

Una vez hayas añadido la línea al /etc/exports, ejecuta:

sudo exportfs -ra         # Recarga las exportaciones
sudo exportfs -v          # Muestra lo que está exportado y con qué opciones

💻 EN EL CLIENTE NFS

1. Verifica que puedes ver lo que exporta el servidor:

showmount -e 20.0.0.5

Esto te mostrará algo como:

Export list for 20.0.0.5:
/srv/nfs/redes 20.0.0.5/24

2. Verifica que está montada:

df -h | grep nfs

Vamos a hacer la prueba para revisar si al subir un archivo se comparte con otros usuarios:

  1. Desde el servidor creamos un archivo:

Desde servidor
  1. Ahora vamos a comprobar desde un usuario no perteneciente al grupo smx el acceso a la carpeta:

Como ves, desde el usuario "ubuntu" no me deja acceder ni ver el directorio.
  1. Ahora vamos a probar desde el usuario "alex" de mi ldap autorizado en el cliente:

Ahora sí! ya puedo ver el archivo compartido.

Espero que esta guia te haya ayudado.

Última actualización