¿Cómo configurar sistemas de archivos compartidos en red? Samba y NFS

Aprender Certificado Fundación Linux en España contenido Técnicos desde Cero en CiberED

En entornos empresariales o domésticos avanzados es imprescindible compartir archivos entre distintos equipos de forma transparente.

5.1. Introducción a los sistemas de archivos en red

Linux, ofrece dos grandes protocolos para ello:

  • NFS (Network File System): nativo de Unix/Linux, rápido y sencillo para entornos homogéneos.
  • Samba: implementa el protocolo SMB/CIFS de Microsoft, permitiendo compartir archivos e impresoras con sistemas Windows, macOS y otros Linux.

Ambos son evaluados en el examen LFCS: se espera que sepas instalar el servidor, crear recursos compartidos, configurar permisos, montar los recursos en clientes y solucionar problemas básicos.

Parte I: Compartición con NFS

5.2. Fundamentos de NFS

NFS permite que un servidor exporte uno o varios directorios para que clientes remotos los monten como si fueran discos locales. La versión más utilizada hoy es NFSv4, aunque NFSv3 sigue presente por compatibilidad.

NFS utiliza llamadas a procedimiento remoto (RPC) y varios demonios:

  • nfsd: maneja las solicitudes NFS.
  • mountd: atiende peticiones de montaje (solo en NFSv3).
  • rpcbind o rpc.statd/rpc.lockd (según versión): registro de servicios RPC y bloqueos.

Con NFSv4, el puerto principal es el 2049 (TCP/UDP) y se simplifica la configuración de cortafuegos, ya que integra el montaje y bloqueo dentro del mismo protocolo.

5.3. Instalación del servidor NFS

En distribuciones basadas en Debian/Ubuntu:

sudo apt update && sudo apt install nfs-kernel-server

En RHEL/CentOS/Fedora:

sudo yum install nfs-utils
sudo systemctl enable --now nfs-server

Tras la instalación, los servicios deben estar activos:

sudo systemctl status nfs-server   # RHEL/CentOS
sudo systemctl status nfs-kernel-server   # Debian

5.4. El archivo de exportaciones: /etc/exports

El servidor define qué directorios se comparten mediante /etc/exports. Cada línea tiene el formato:

/directorio    cliente1(opciones) cliente2(opciones) ...

Los clientes pueden especificarse por:

  • Dirección IP: 192.168.1.100
  • Red: 192.168.1.0/24 o 192.168.1.0/255.255.255.0
  • Nombre de dominio FQDN: cliente.ejemplo.com
  • Comodines: *.ejemplo.com
  • * para todos (poco seguro, evitar en producción).

Opciones de exportación más importantes:

OpciónDescripción
rwLectura/escritura (por defecto)
roSolo lectura
syncEscribe los cambios en disco antes de responder (más seguro, por defecto en NFSv4)
asyncPermite escritura asíncrona (más rápido pero con riesgo de pérdida de datos)
no_subtree_checkMejora rendimiento omitiendo comprobaciones de subárbol (recomendado si se exporta un sistema de archivos completo)
root_squashConvierte las peticiones del usuario root del cliente al usuario anónimo nobody (seguridad, activo por defecto)
no_root_squashDesactiva lo anterior (peligroso, permite root remoto como root)
all_squashTodos los usuarios del cliente se mapean a nobody
anonuid/anongidEspecifica UID/GID para los usuarios mapeados cuando se usa squash

En distribuciones basadas en Debian/Ubuntu:

sudo apt update && sudo apt install nfs-kernel-server

En RHEL/CentOS/Fedora:

sudo yum install nfs-utils
sudo systemctl enable --now nfs-server

Tras la instalación, los servicios deben estar activos:

sudo systemctl status nfs-server   # RHEL/CentOS
sudo systemctl status nfs-kernel-server   # Debian

5.4. El archivo de exportaciones: /etc/exports

El servidor define qué directorios se comparten mediante /etc/exports. Cada línea tiene el formato:

/directorio    cliente1(opciones) cliente2(opciones) ...

Los clientes pueden especificarse por:

  • Dirección IP: 192.168.1.100
  • Red: 192.168.1.0/24 o 192.168.1.0/255.255.255.0
  • Nombre de dominio FQDN: cliente.ejemplo.com
  • Comodines: *.ejemplo.com
  • * para todos (poco seguro, evitar en producción).

Opciones de exportación más importantes:

OpciónDescripción
rwLectura/escritura (por defecto)
roSolo lectura
syncEscribe los cambios en disco antes de responder (más seguro, por defecto en NFSv4)
asyncPermite escritura asíncrona (más rápido pero con riesgo de pérdida de datos)
no_subtree_checkMejora rendimiento omitiendo comprobaciones de subárbol (recomendado si se exporta un sistema de archivos completo)
root_squashConvierte las peticiones del usuario root del cliente al usuario anónimo nobody (seguridad, activo por defecto)
no_root_squashDesactiva lo anterior (peligroso, permite root remoto como root)
all_squashTodos los usuarios del cliente se mapean a nobody
anonuid/anongidEspecifica UID/GID para los usuarios mapeados cuando se usa squash

Ejemplo de /etc/exports:

/home/compartido 192.168.1.0/24(rw,sync,no_subtree_check)
/datos           *.local(rw,sync,no_subtree_check,all_squash,anonuid=1000,anongid=1000)
/backup          10.0.0.5(ro,sync,no_subtree_check)

Tras modificar /etc/exports, se aplican los cambios con:

sudo exportfs -a   # exportar todo lo definido
sudo exportfs -r   # reexportar (aplica cambios)
sudo exportfs -v   # muestra lo exportado actualmente

Ejemplo de /etc/exports:

/home/compartido 192.168.1.0/24(rw,sync,no_subtree_check)
/datos           *.local(rw,sync,no_subtree_check,all_squash,anonuid=1000,anongid=1000)
/backup          10.0.0.5(ro,sync,no_subtree_check)

Tras modificar /etc/exports, se aplican los cambios con:

sudo exportfs -a   # exportar todo lo definido
sudo exportfs -r   # reexportar (aplica cambios)
sudo exportfs -v   # muestra lo exportado actualmente

Ejemplo de /etc/exports:

/home/compartido 192.168.1.0/24(rw,sync,no_subtree_check)
/datos           *.local(rw,sync,no_subtree_check,all_squash,anonuid=1000,anongid=1000)
/backup          10.0.0.5(ro,sync,no_subtree_check)

Tras modificar /etc/exports, se aplican los cambios con:

sudo exportfs -a   # exportar todo lo definido
sudo exportfs -r   # reexportar (aplica cambios)
sudo exportfs -v   # muestra lo exportado actualmente

5.5. Configuración del servicio NFS

El archivo /etc/default/nfs-kernel-server (Debian) o /etc/sysconfig/nfs (RHEL) permite ajustar parámetros como los hilos del servidor (RPCNFSDCOUNT=8). Generalmente no es necesario modificarlos para el examen.

Para NFSv4, se puede configurar un pseudo-root común. Por defecto, NFSv4 exporta todo bajo un único árbol jerárquico, pero se recomienda usar el archivo /etc/exports normalmente.

Ajuste del firewall:

Si se usa firewalld:

sudo firewall-cmd --add-service=nfs --permanent
sudo firewall-cmd --add-service=rpc-bind --permanent   # para NFSv3
sudo firewall-cmd --reload

Con ufw (Ubuntu):

sudo ufw allow from 192.168.1.0/24 to any port nfs

Para NFSv3 se necesitan además los puertos de mountd y statd, que son dinámicos (se pueden fijar en /etc/sysconfig/nfs).

5.6. Cliente NFS: montaje manual

En el cliente, se necesita el paquete nfs-common (Debian) o nfs-utils (RHEL). Luego se monta con:

sudo mount -t nfs servidor:/ruta/exportada /punto/de/montaje

Ejemplo:

sudo mount -t nfs 192.168.1.50:/home/compartido /mnt/nfs

Opciones útiles:

  • -o rw,hard,intr : montaje de lectura/escritura, con bloqueo duro (el cliente reintenta indefinidamente), permitiendo interrumpir señales.
  • -o soft,timeo=10 : montaje suave, si el servidor no responde en 10 decisegundos devuelve error (menos recomendado para escritura).
  • -o nfsvers=4 : fuerza la versión 4.

Verificar montajes NFS: mount | grep nfs o df -h.

5.7. Montaje automático con /etc/fstab

Para persistencia, se añade al fstab:

servidor:/home/compartido /mnt/nfs nfs defaults,_netdev 0 0
  • _netdev: indica que es un dispositivo de red y esperará a que la red esté disponible (evita errores en el arranque).
  • nofail: opcional, para que no falle el arranque si no se puede montar.

5.8. Solución de problemas NFS

  • El cliente no puede montar: verifica conectividad ping, firewall, que el servidor exporta el directorio (showmount -e servidor). showmount usa RPC y puede requerir rpcbind en ambos lados.
  • “Permission denied”: revisa los permisos del directorio exportado y las opciones de exportación. NFS respeta los UID/GID, así que los usuarios deben ser consistentes (pueden usarse servicios como NIS o LDAP para unificar).
  • Rendimiento pobre: prueba con async (si asumes riesgo), ajusta rsize y wsize (tamaño de bloque, ej. rsize=8192,wsize=8192).
  • NFSv4 con root: por defecto root se squashea. Si necesitas acceso root real (no recomendado), usa no_root_squash y asegúrate de que el directorio exportado usa fsid=0 en NFSv4 (pseudo-root).

Parte II: Compartición con Samba

5.9. ¿Qué es Samba?

Samba implementa el protocolo SMB/CIFS, que permite compartir archivos e impresoras entre Linux, Windows y macOS. Además puede actuar como controlador de dominio. En el ámbito LFCS, se espera que seas capaz de instalar Samba, crear un recurso compartido, configurar autenticación por usuario y acceder desde clientes.

5.10. Instalación de Samba

sudo apt install samba samba-client   # Debian/Ubuntu
sudo yum install samba samba-client   # RHEL/CentOS
sudo systemctl enable --now smb nmb   # smb: servicio SMB, nmb: resolución de nombres NetBIOS

5.11. Configuración principal: /etc/samba/smb.conf

El archivo de configuración se divide en secciones globales ([global]) y secciones de recurso compartido.

Un ejemplo mínimo funcional:

[global]
   workgroup = GRUPO_TRABAJO
   server string = Servidor Samba LFCS
   security = user
   map to guest = Bad User

[compartido]
   path = /srv/samba/compartido
   writable = yes
   guest ok = no
   valid users = @sambausers
   browseable = yes
  • security = user: cada conexión requiere un nombre de usuario y contraseña (los usuarios de Samba son usuarios locales de Linux con contraseña Samba separada).
  • security = share (obsoleto, no recomendado): acceso por recurso con contraseña.
  • guest ok = yes permite acceso sin autenticación (invitado).

5.12. Crear usuarios y contraseñas de Samba

Aunque los usuarios existan en el sistema Linux, Samba necesita una base de datos propia de contraseñas. Se añaden con:

sudo smbpasswd -a usuario   # añadir usuario
sudo pdbedit -L             # listar usuarios Samba

Ejemplo:

sudo useradd -m juan
sudo smbpasswd -a juan

También se puede crear un grupo para gestionar permisos:

sudo groupadd sambausers
sudo usermod -aG sambausers juan

Luego en smb.conf se restringe con valid users = @sambausers.

5.13. Compartir un directorio

Crear la carpeta y ajustar permisos locales:

sudo mkdir -p /srv/samba/publico /srv/samba/privado
sudo chmod 2770 /srv/samba/privado     # SGID + acceso grupo
sudo chown root:sambausers /srv/samba/privado
sudo chmod 755 /srv/samba/publico

Definir en smb.conf:

[publico]
   path = /srv/samba/publico
   browseable = yes
   read only = no
   guest ok = yes
   writable = yes
   create mask = 0664
   directory mask = 0775

[privado]
   path = /srv/samba/privado
   browseable = yes
   read only = no
   valid users = @sambausers
   create mask = 0660
   directory mask = 0770

Reiniciar Samba tras cambios:

sudo systemctl restart smb nmb

5.14. Acceder al recurso compartido desde un cliente Linux

Para montar un recurso SMB/CIFS se usa mount.cifs (paquete cifs-utils). Ejemplo:

sudo mount -t cifs //servidor/publico /mnt/samba -o username=juan,password=contraseña

Opciones adicionales:

  • uid=1000,gid=1000 : fuerzan propietario del montaje.
  • iocharset=utf8, vers=3.0 : compatibilidad.
  • credentials=/ruta/credenciales : archivo con username=..., password=... para no exponer contraseña en línea de comandos.

Para /etc/fstab:

//servidor/publico /mnt/samba cifs credentials=/etc/samba/creds,uid=1000,gid=1000,iocharset=utf8,vers=3.0,_netdev,nofail 0 0

El archivo de credenciales /etc/samba/creds debe tener permisos 600.

5.15. Acceder desde Windows

En Windows, se abre el Explorador de archivos y se escribe \\servidor\publico. Si la autenticación es de usuario, pedirá usuario y contraseña. Es posible que sea necesario habilitar SMB1 si se usa una versión muy antigua (no recomendado). Windows 10/11 soporta SMB2/3 de forma nativa.

5.16. Solución de problemas Samba

  • Error de credenciales: verifica usuario en pdbedit -L. Asegúrate de que el usuario exista en el sistema y tenga contraseña Samba.
  • Permiso denegado al escribir: revisa permisos Unix del directorio. Recuerda que el usuario Samba debe tener permisos de escritura a nivel de sistema de archivos.
  • No se ve el recurso en red: comprueba que nmbd esté corriendo y que el cortafuegos permita puertos 137-139 (NetBIOS) y 445 (SMB). Si solo se usa SMB moderno, basta con 445.
  • Configuración errónea: prueba la sintaxis con testparm. Muestra la configuración efectiva.

5.17. Configuración del cortafuegos para Samba

Con firewalld:

sudo firewall-cmd --add-service=samba --permanent
sudo firewall-cmd --reload

Con ufw:

sudo ufw allow samba

5.18. Ejercicios prácticos

  1. NFS básico: Configura un servidor NFS que exporte /export/docs a una subred (por ejemplo 192.168.56.0/24) con opciones rw,sync,no_subtree_check. En el cliente, monta el recurso en /mnt/docs, crea un archivo y verifica que aparece en el servidor con los mismos UID/GID.

  2. NFS con squash: Modifica la exportación para usar all_squash,anonuid=1000,anongid=1000. Monta en cliente y comprueba que los archivos creados por cualquier usuario aparecen como propiedad de UID 1000 en el servidor.

  3. Montaje automático NFS: Agrega la entrada en /etc/fstab del cliente para que monte automáticamente al arranque. Utiliza la opción _netdev y nofail. Reinicia y verifica.

  4. Samba público: Crea un recurso [descargas] en Samba que apunte a /srv/samba/descargas, accesible sin autenticación (guest ok = yes), con escritura para todos. Verifica que desde otra máquina Linux puedes montarlo y crear/borrar archivos.

  5. Samba con autenticación: Crea el recurso [finanzas] con acceso solo para usuarios del grupo finanzas. Crea dos usuarios (ana y luis), añade ana al grupo, configura Samba. Comprueba que ana puede montar y escribir, pero luis no.

  6. Credenciales en montaje CIFS: Crea un archivo de credenciales para el recurso anterior y configúralo en /etc/fstab. Asegúrate de que el montaje sobreviva a reinicios.

  7. Combinación: Exporta un mismo directorio vía NFS y Samba. Comprueba la interoperabilidad y las diferencias de permisos. Observa cómo NFS respeta los UID locales, mientras que Samba maneja su propia autenticación.


5.19. Resumen y consejos para el examen LFCS

  • NFS: debes ser capaz de instalar, exportar, montar, y manejar opciones de seguridad (root_squash, rw/ro). La edición de /etc/exports y el uso de exportfs son fundamentales.
  • Samba: conoce la sintaxis básica de smb.conf, cómo añadir usuarios (smbpasswd), y el montaje con mount.cifs. Recuerda los permisos Unix subyacentes; Samba no los anula, los combina.
  • Prueba siempre: tras cada cambio de configuración, reinicia el servicio y verifica con un cliente. En el examen, el tiempo apremia; tener claro testparm, exportfs -r, systemctl restart acelera la resolución de problemas.
  • Firewall: no olvides abrir los puertos necesarios. Muchos fallos en entornos de laboratorio se deben a reglas de firewall.
  • Versiones de protocolo: NFSv4 simplifica el firewall. SMB2/3 es más seguro y compatible con sistemas modernos; evita SMB1 si es posible.

Con esto completamos el dominio de comparticiones de red. En el próximo capítulo nos adentraremos en la configuración de RAID por software para mejorar rendimiento y tolerancia a fallos. Avanzamos..

Vistas: 2

Descubre más desde CIBERED

Suscríbete y recibe las últimas entradas en tu correo electrónico.

Scroll al inicio