Configuración de Samba para Compartir Archivos: Guía Completa de Configuración Multiplataforma

Samba es el puente esencial para compartir archivos entre servidores Linux y clientes Windows, haciéndolo indispensable para redes de entornos mixtos. Ya sea que estés configurando un servidor de archivos para una pequeña oficina, creando almacenamiento compartido para un equipo de desarrollo, o implementando servicios de archivos a nivel empresarial, Samba proporciona capacidades de compartición de archivos robustas y ricas en funciones.

Esta guía completa cubre la configuración completa de Samba desde la configuración básica hasta funciones avanzadas incluyendo autenticación de usuarios, gestión de permisos y optimización de rendimiento.

Introducción a Samba

Samba es una implementación de código abierto del protocolo SMB/CIFS (Server Message Block/Common Internet File System), permitiendo a los sistemas Linux proporcionar servicios de archivos e impresión a clientes Windows, macOS y otros clientes compatibles con SMB.

¿Por Qué Usar Samba?

  • Compatibilidad multiplataforma: Integración perfecta entre Windows y Linux
  • Protocolo nativo: Los clientes Windows se conectan sin software adicional
  • Integración con Active Directory: Puede unirse a dominios AD
  • Compartición de impresoras: Comparte impresoras a través de la red
  • Autenticación de usuarios: Control de acceso seguro
  • Rendimiento: Optimizado para redes modernas
  • Gratuito y de código abierto: Sin costos de licencia

Casos de Uso Comunes de Samba

  • Servidores de archivos de oficina: Almacenamiento centralizado de documentos
  • Directorios home: Unidades de red específicas de usuario
  • Distribución de software: Instaladores de aplicaciones centralizados
  • Comparticiones de equipo de desarrollo: Archivos compartidos de código y proyectos
  • Servidores multimedia: Bibliotecas compartidas de música, video y fotos
  • Destinos de respaldo: Objetivos de respaldo de red
  • Redes de entornos mixtos: Servidores Linux sirviendo clientes Windows

Prerrequisitos

Antes de configurar Samba, asegúrate de tener:

  • Acceso root o sudo en el servidor Linux
  • Dirección IP estática o nombre de host confiable
  • Firewall configurado para permitir tráfico SMB/CIFS
  • Cuentas de usuario para acceso a Samba
  • Comprensión de permisos de archivos
  • Respaldo de configuración de Samba existente (si modificas configuración existente)

Advertencia Crítica de Seguridad

ADVERTENCIA: Comparticiones de Samba configuradas incorrectamente pueden exponer datos sensibles. Siempre:

  1. Usa contraseñas fuertes para usuarios de Samba
  2. Restringe el acceso a comparticiones a usuarios/grupos específicos
  3. Implementa reglas de firewall
  4. Usa conexiones cifradas cuando sea posible
  5. Mantén Samba actualizado
  6. Nunca expongas Samba directamente a internet
  7. Auditorías de seguridad regulares

Paso 1: Instalar Samba

En Debian/Ubuntu

sudo apt update
sudo apt install samba samba-common-bin

En CentOS/RHEL/Rocky Linux

sudo yum install samba samba-client samba-common
# o
sudo dnf install samba samba-client samba-common

Verificar Instalación

# Verificar versión de Samba
smbd --version

# Verificar estado del servicio
sudo systemctl status smbd nmbd

Salida esperada:

Version 4.13.17-Ubuntu

Paso 2: Respaldar Configuración Predeterminada

Antes de hacer cambios, respalda la configuración original:

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup.$(date +%Y%m%d)

Paso 3: Configuración Básica de Samba

Entender la Estructura de smb.conf

El archivo /etc/samba/smb.conf tiene dos secciones principales:

[global]: Configuraciones a nivel de servidor [nombre_comparticion]: Configuraciones de comparticiones individuales

Configurar Ajustes Globales

Edita el archivo de configuración:

sudo nano /etc/samba/smb.conf

Configuración global básica:

[global]
   workgroup = WORKGROUP
   server string = Servidor Samba %v
   netbios name = servidorarchivos
   security = user
   map to guest = bad user
   dns proxy = no

   # Logging
   log file = /var/log/samba/log.%m
   max log size = 1000

   # Ajuste de rendimiento
   socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=524288 SO_SNDBUF=524288
   read raw = yes
   write raw = yes
   oplocks = yes
   max xmit = 65535
   dead time = 15
   getwd cache = yes

Parámetros clave explicados:

  • workgroup: Nombre del grupo de trabajo de Windows (predeterminado: WORKGROUP)
  • server string: Descripción del servidor visible para clientes
  • netbios name: Nombre del servidor en la red
  • security = user: Requiere autenticación (recomendado)
  • map to guest = bad user: Maneja nombres de usuario inválidos
  • log file: Ubicación de archivos de registro

Paso 4: Crear Directorios Compartidos

Crea directorios para compartir:

# Directorio compartido general
sudo mkdir -p /srv/samba/compartido

# Comparticiones específicas de departamento
sudo mkdir -p /srv/samba/contabilidad
sudo mkdir -p /srv/samba/desarrollo
sudo mkdir -p /srv/samba/marketing

# Directorios home de usuario
sudo mkdir -p /srv/samba/homes

# Directorio público
sudo mkdir -p /srv/samba/publico

Paso 5: Establecer Permisos de Directorio

Configura permisos apropiados:

# Compartición pública (todos pueden acceder)
sudo chmod 777 /srv/samba/publico
sudo chown nobody:nogroup /srv/samba/publico

# Directorio compartido (acceso de grupo)
sudo chmod 2775 /srv/samba/compartido
sudo chown root:sambashare /srv/samba/compartido

# Comparticiones de departamento (acceso restringido)
sudo chmod 770 /srv/samba/contabilidad
sudo chown root:contabilidad /srv/samba/contabilidad

Paso 6: Configurar Comparticiones de Samba

Añade definiciones de comparticiones a /etc/samba/smb.conf:

Ejemplo 1: Compartición Pública (Sin Autenticación)

[Publico]
   comment = Compartición de Archivos Públicos
   path = /srv/samba/publico
   browseable = yes
   writable = yes
   guest ok = yes
   read only = no
   create mask = 0777
   directory mask = 0777

Ejemplo 2: Compartición Autenticada

[Compartido]
   comment = Archivos Compartidos del Equipo
   path = /srv/samba/compartido
   browseable = yes
   writable = yes
   valid users = @sambashare
   create mask = 0660
   directory mask = 0770
   force group = sambashare

Ejemplo 3: Directorios Home de Usuario

[homes]
   comment = Directorios Home de Usuario
   browseable = no
   writable = yes
   valid users = %S
   create mask = 0700
   directory mask = 0700

Ejemplo 4: Compartición de Solo Lectura

[Documentacion]
   comment = Documentación de la Empresa
   path = /srv/samba/docs
   browseable = yes
   read only = yes
   guest ok = no
   valid users = @empleados

Ejemplo 5: Compartición Específica de Departamento

[Contabilidad]
   comment = Archivos del Departamento de Contabilidad
   path = /srv/samba/contabilidad
   browseable = yes
   writable = yes
   valid users = @contabilidad
   admin users = juan, maria
   create mask = 0660
   directory mask = 0770
   force group = contabilidad

Entender las Opciones de Compartición

Control de Acceso:

  • browseable = yes/no: Visible en listas de navegación de red
  • writable = yes/no: Acceso de escritura permitido
  • read only = yes/no: Opuesto de writable
  • guest ok = yes/no: Permitir acceso de invitado
  • valid users: Usuarios/grupos permitidos (usa @nombregrupo para grupos)
  • admin users: Usuarios con derechos administrativos
  • write list: Usuarios con acceso de escritura (sobrescribe read-only)

Opciones de Permisos:

  • create mask: Permisos para nuevos archivos (0660 = rw-rw----)
  • directory mask: Permisos para nuevos directorios (0770 = rwxrwx---)
  • force user: Forzar archivos a ser propiedad de usuario específico
  • force group: Forzar archivos a ser propiedad de grupo específico
  • inherit permissions: Heredar permisos del directorio padre

Otras Opciones:

  • comment: Descripción de la compartición
  • path: Ruta del sistema de archivos
  • available = yes/no: Compartición habilitada/deshabilitada
  • follow symlinks = yes/no: Seguir enlaces simbólicos
  • veto files: Archivos para ocultar/bloquear
  • hide files: Archivos para ocultar (pero aún accesibles)

Paso 7: Crear Usuarios de Samba

Samba usa base de datos de contraseñas separada de usuarios Linux.

Crear Usuario Linux Primero

# Crear usuario sin shell de inicio de sesión
sudo useradd -M -s /sbin/nologin usuariosamba

# O crear usuario regular
sudo useradd -m usuariosamba

Añadir Usuario a Samba

# Añadir contraseña de Samba para usuario
sudo smbpasswd -a usuariosamba

# Ingresar contraseña cuando se solicite

Crear Grupo para Usuarios de Samba

# Crear grupo
sudo groupadd sambashare

# Añadir usuarios al grupo
sudo usermod -aG sambashare usuariosamba
sudo usermod -aG sambashare juan
sudo usermod -aG sambashare maria

Gestionar Usuarios de Samba

# Habilitar usuario de Samba
sudo smbpasswd -e usuariosamba

# Deshabilitar usuario de Samba
sudo smbpasswd -d usuariosamba

# Cambiar contraseña de Samba
sudo smbpasswd usuariosamba

# Eliminar usuario de Samba
sudo smbpasswd -x usuariosamba

# Listar usuarios de Samba
sudo pdbedit -L

Paso 8: Probar Configuración

Verificar sintaxis de configuración de Samba:

sudo testparm

La salida debe mostrar:

Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions

Si aparecen errores, corrígelos antes de continuar.

Paso 9: Iniciar y Habilitar Servicios de Samba

En Debian/Ubuntu

sudo systemctl enable smbd nmbd
sudo systemctl start smbd nmbd
sudo systemctl status smbd nmbd

En CentOS/RHEL/Rocky Linux

sudo systemctl enable smb nmb
sudo systemctl start smb nmb
sudo systemctl status smb nmb

Paso 10: Configurar Firewall

Permitir tráfico de Samba a través del firewall.

Usando UFW (Debian/Ubuntu)

# Permitir Samba desde subred específica
sudo ufw allow from 192.168.1.0/24 to any app Samba

# O permitir puertos específicos
sudo ufw allow from 192.168.1.0/24 to any port 445
sudo ufw allow from 192.168.1.0/24 to any port 139

# Recargar
sudo ufw reload

Usando firewalld (CentOS/RHEL)

# Añadir servicio Samba
sudo firewall-cmd --permanent --add-service=samba
sudo firewall-cmd --reload

# Verificar
sudo firewall-cmd --list-services

Usando iptables

# Permitir puertos de Samba
sudo iptables -A INPUT -p tcp --dport 445 -s 192.168.1.0/24 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 139 -s 192.168.1.0/24 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 137:138 -s 192.168.1.0/24 -j ACCEPT

# Guardar reglas
sudo iptables-save | sudo tee /etc/iptables/rules.v4

Conectarse a Comparticiones de Samba

Desde Windows

Método 1: Explorador de Archivos

  1. Abrir Explorador de Archivos
  2. Escribir en la barra de direcciones: \\192.168.1.10\Compartido
  3. Ingresar nombre de usuario y contraseña
  4. Acceder archivos

Método 2: Mapear Unidad de Red

  1. Clic derecho en "Este equipo"
  2. Seleccionar "Conectar a unidad de red"
  3. Ingresar ruta: \\192.168.1.10\Compartido
  4. Marcar "Reconectar al iniciar sesión"
  5. Ingresar credenciales

Método 3: Línea de Comandos

net use Z: \\192.168.1.10\Compartido /user:usuariosamba contraseña

Desde Linux

Montar Temporalmente:

# Instalar cifs-utils
sudo apt install cifs-utils

# Crear punto de montaje
sudo mkdir /mnt/samba_compartido

# Montar compartición
sudo mount -t cifs //192.168.1.10/Compartido /mnt/samba_compartido -o username=usuariosamba,password=contraseña

Montar Permanentemente:

Crear archivo de credenciales:

sudo nano /root/.smbcredentials

Añadir:

username=usuariosamba
password=contraseña
domain=WORKGROUP

Asegurar credenciales:

sudo chmod 600 /root/.smbcredentials

Añadir a /etc/fstab:

//192.168.1.10/Compartido  /mnt/samba_compartido  cifs  credentials=/root/.smbcredentials,uid=1000,gid=1000  0  0

Montar:

sudo mount -a

Desde macOS

Método 1: Finder

  1. Abrir Finder
  2. Ir → Conectar a Servidor (⌘K)
  3. Ingresar: smb://192.168.1.10/Compartido
  4. Clic en Conectar
  5. Ingresar credenciales

Método 2: Línea de Comandos

mkdir ~/samba_mount
mount_smbfs //usuariosamba:contraseñ[email protected]/Compartido ~/samba_mount

Configuración Avanzada de Samba

Habilitar Conexiones Cifradas

Añadir a la sección [global]:

[global]
   server signing = mandatory
   smb encrypt = required

Reiniciar Samba:

sudo systemctl restart smbd

Configurar Papelera de Reciclaje

Prevenir eliminaciones accidentales:

[Compartido]
   comment = Archivos Compartidos con Papelera
   path = /srv/samba/compartido
   vfs objects = recycle
   recycle:repository = .recycle
   recycle:keeptree = yes
   recycle:versions = yes
   recycle:touch = yes
   recycle:excludedir = /tmp

Auditoría de Registro

Rastrear acceso a archivos:

[Compartido]
   comment = Compartición Auditada
   path = /srv/samba/compartido
   vfs objects = full_audit
   full_audit:prefix = %u|%I|%m|%S
   full_audit:success = mkdir rmdir read pread write pwrite rename unlink
   full_audit:failure = none
   full_audit:facility = local5
   full_audit:priority = notice

Soporte de Time Machine (macOS)

Configurar para respaldos de macOS:

[TimeMachine]
   comment = Respaldo Time Machine
   path = /srv/samba/timemachine
   valid users = usuariomac
   writable = yes
   vfs objects = catia fruit streams_xattr
   fruit:time machine = yes
   fruit:time machine max size = 500G

Copias de Sombra (Versiones Anteriores)

Habilitar función de Versiones Anteriores de Windows:

[Compartido]
   comment = Compartición con Instantáneas
   path = /srv/samba/compartido
   vfs objects = shadow_copy2
   shadow:snapdir = .snapshots
   shadow:basedir = /srv/samba/compartido
   shadow:sort = desc

Optimización de Rendimiento

Optimizar Ajustes Globales

[global]
   # Opciones de socket para rendimiento
   socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=524288 SO_SNDBUF=524288

   # Habilitar operaciones asíncronas
   aio read size = 16384
   aio write size = 16384
   use sendfile = yes

   # Optimizar para archivos grandes
   read raw = yes
   write raw = yes
   strict allocate = yes
   allocation roundup size = 4096

   # Optimización de conexión
   max connections = 100
   deadtime = 15
   keepalive = 300

   # Deshabilitar servicios no usados
   disable netbios = yes
   smb ports = 445

Habilitar Wide Links (Con Cuidado)

Permitir enlaces simbólicos fuera de la compartición:

[Compartido]
   path = /srv/samba/compartido
   follow symlinks = yes
   wide links = yes
   unix extensions = no

ADVERTENCIA: wide links puede ser un riesgo de seguridad.

Resolución de Problemas Comunes

Problema: No se Puede Conectar a Compartición de Samba

Causa: Firewall, servicio no ejecutándose, o problemas de red.

Solución:

# Verificar servicio Samba
sudo systemctl status smbd nmbd

# Reiniciar servicios
sudo systemctl restart smbd nmbd

# Verificar firewall
sudo ufw status
sudo firewall-cmd --list-services

# Probar desde cliente
telnet 192.168.1.10 445

# Verificar registros de Samba
sudo tail -f /var/log/samba/log.smbd

Problema: Autenticación Fallida

Causa: Contraseña incorrecta o usuario no en base de datos de Samba.

Solución:

# Listar usuarios de Samba
sudo pdbedit -L

# Restablecer contraseña de usuario
sudo smbpasswd usuariosamba

# Habilitar usuario
sudo smbpasswd -e usuariosamba

# Verificar usuario está en valid users
sudo testparm -s | grep -A10 "^\[NombreComparticion\]"

Problema: Permiso Denegado en Archivos

Causa: Permisos incorrectos del sistema de archivos o propiedad.

Solución:

# Verificar permisos del sistema de archivos
ls -la /srv/samba/compartido

# Corregir propiedad
sudo chown -R root:sambashare /srv/samba/compartido

# Corregir permisos
sudo chmod -R 2775 /srv/samba/compartido

# Verificar configuración de Samba
# En smb.conf:
create mask = 0660
directory mask = 0770
force group = sambashare

Problema: Compartición No Visible

Causa: browseable = no o descubrimiento de red deshabilitado.

Solución:

# Habilitar navegación en configuración de compartición
[NombreComparticion]
   browseable = yes

# Reiniciar Samba
sudo systemctl restart smbd nmbd

# Verificar con smbclient
smbclient -L //192.168.1.10 -U nombreusuario

Problema: Rendimiento Lento

Causa: Tamaños de búfer predeterminados o configuraciones de red.

Solución:

# Optimizar smb.conf
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=524288 SO_SNDBUF=524288
use sendfile = yes
read raw = yes
write raw = yes

# Habilitar E/S asíncrona
aio read size = 16384
aio write size = 16384

# Reiniciar Samba
sudo systemctl restart smbd

Mejores Prácticas de Seguridad

1. Restringir Acceso de Red

Limitar a redes específicas:

[global]
   hosts allow = 192.168.1. 127.
   hosts deny = 0.0.0.0/0

2. Deshabilitar Acceso de Invitado

[global]
   map to guest = never
   restrict anonymous = 2

3. Usar Contraseñas Fuertes

# Forzar contraseñas fuertes
sudo nano /etc/pam.d/common-password
# Añadir: password requisite pam_pwquality.so retry=3 minlen=12

4. Habilitar Registro

[global]
   log level = 2
   log file = /var/log/samba/log.%m
   max log size = 1000

5. Auditorías de Seguridad Regulares

# Verificar versión de Samba
smbd --version

# Actualizar Samba
sudo apt update && sudo apt upgrade samba

# Revisar registros
sudo grep -i "failed\|error" /var/log/samba/log.smbd

6. Deshabilitar SMBv1

[global]
   server min protocol = SMB2
   client min protocol = SMB2

7. Usar Conexiones Cifradas

[global]
   smb encrypt = required

Monitorear Samba

Verificar Usuarios Conectados

sudo smbstatus

Monitorear Conexiones en Tiempo Real

watch -n 2 'sudo smbstatus -b'

Verificar Acceso a Comparticiones

# Listar conexiones activas por compartición
sudo smbstatus -S

Ver Archivos Abiertos

sudo smbstatus -L

Respaldo y Recuperación

Respaldar Configuración de Samba

# Respaldar configuración
sudo tar -czf /backup/samba_config_$(date +%Y%m%d).tar.gz /etc/samba/

# Respaldar base de datos de usuarios
sudo tdbbackup /var/lib/samba/private/passdb.tdb

Restaurar Configuración

# Detener Samba
sudo systemctl stop smbd nmbd

# Restaurar configuración
sudo tar -xzf /backup/samba_config_20260111.tar.gz -C /

# Reiniciar Samba
sudo systemctl start smbd nmbd

Conclusión

Samba proporciona compartición de archivos robusta y confiable entre servidores Linux y diversos clientes incluyendo Windows, macOS y otros sistemas. Al configurar correctamente la autenticación, permisos y medidas de seguridad, puedes crear infraestructura de compartición de archivos de nivel empresarial.

Puntos clave:

  1. Usar autenticación (security = user) para producción
  2. Configurar permisos apropiados para cada compartición
  3. Implementar reglas de firewall para restringir acceso
  4. Deshabilitar acceso de invitado a menos que sea específicamente necesario
  5. Habilitar registro para auditoría de seguridad
  6. Optimizar rendimiento con tamaños de búfer apropiados
  7. Deshabilitar SMBv1 por seguridad
  8. Respaldos regulares de configuración y datos
  9. Monitorear conexiones y patrones de acceso
  10. Mantener Samba actualizado para parches de seguridad

Samba cierra la brecha entre servidores Linux y clientes Windows sin problemas, haciéndolo una herramienta esencial para entornos de red heterogéneos. Siguiendo las mejores prácticas y configuraciones descritas en esta guía, puedes desplegar servicios de compartición de archivos seguros y de alto rendimiento que satisfagan las necesidades de tu organización.