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).rpcbindorpc.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/24o192.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ón | Descripción |
|---|---|
rw | Lectura/escritura (por defecto) |
ro | Solo lectura |
sync | Escribe los cambios en disco antes de responder (más seguro, por defecto en NFSv4) |
async | Permite escritura asíncrona (más rápido pero con riesgo de pérdida de datos) |
no_subtree_check | Mejora rendimiento omitiendo comprobaciones de subárbol (recomendado si se exporta un sistema de archivos completo) |
root_squash | Convierte las peticiones del usuario root del cliente al usuario anónimo nobody (seguridad, activo por defecto) |
no_root_squash | Desactiva lo anterior (peligroso, permite root remoto como root) |
all_squash | Todos los usuarios del cliente se mapean a nobody |
anonuid/anongid | Especifica 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/24o192.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ón | Descripción |
|---|---|
rw | Lectura/escritura (por defecto) |
ro | Solo lectura |
sync | Escribe los cambios en disco antes de responder (más seguro, por defecto en NFSv4) |
async | Permite escritura asíncrona (más rápido pero con riesgo de pérdida de datos) |
no_subtree_check | Mejora rendimiento omitiendo comprobaciones de subárbol (recomendado si se exporta un sistema de archivos completo) |
root_squash | Convierte las peticiones del usuario root del cliente al usuario anónimo nobody (seguridad, activo por defecto) |
no_root_squash | Desactiva lo anterior (peligroso, permite root remoto como root) |
all_squash | Todos los usuarios del cliente se mapean a nobody |
anonuid/anongid | Especifica 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).showmountusa RPC y puede requerirrpcbinden 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), ajustarsizeywsize(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_squashy asegúrate de que el directorio exportado usafsid=0en 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 = yespermite 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 conusername=...,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
nmbdesté 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
NFS básico: Configura un servidor NFS que exporte
/export/docsa una subred (por ejemplo192.168.56.0/24) con opcionesrw,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.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.Montaje automático NFS: Agrega la entrada en
/etc/fstabdel cliente para que monte automáticamente al arranque. Utiliza la opción_netdevynofail. Reinicia y verifica.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.Samba con autenticación: Crea el recurso
[finanzas]con acceso solo para usuarios del grupofinanzas. Crea dos usuarios (anayluis), añadeanaal grupo, configura Samba. Comprueba queanapuede montar y escribir, peroluisno.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.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/exportsy el uso deexportfsson fundamentales. - Samba: conoce la sintaxis básica de
smb.conf, cómo añadir usuarios (smbpasswd), y el montaje conmount.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 restartacelera 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..
Descubre más desde CIBERED
Suscríbete y recibe las últimas entradas en tu correo electrónico.
