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:
- Usa contraseñas fuertes para usuarios de Samba
- Restringe el acceso a comparticiones a usuarios/grupos específicos
- Implementa reglas de firewall
- Usa conexiones cifradas cuando sea posible
- Mantén Samba actualizado
- Nunca expongas Samba directamente a internet
- 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
- Abrir Explorador de Archivos
- Escribir en la barra de direcciones:
\\192.168.1.10\Compartido - Ingresar nombre de usuario y contraseña
- Acceder archivos
Método 2: Mapear Unidad de Red
- Clic derecho en "Este equipo"
- Seleccionar "Conectar a unidad de red"
- Ingresar ruta:
\\192.168.1.10\Compartido - Marcar "Reconectar al iniciar sesión"
- 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
- Abrir Finder
- Ir → Conectar a Servidor (⌘K)
- Ingresar:
smb://192.168.1.10/Compartido - Clic en Conectar
- 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:
- Usar autenticación (security = user) para producción
- Configurar permisos apropiados para cada compartición
- Implementar reglas de firewall para restringir acceso
- Deshabilitar acceso de invitado a menos que sea específicamente necesario
- Habilitar registro para auditoría de seguridad
- Optimizar rendimiento con tamaños de búfer apropiados
- Deshabilitar SMBv1 por seguridad
- Respaldos regulares de configuración y datos
- Monitorear conexiones y patrones de acceso
- 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.


