301.2 Configuración Samba

Objetivos del subtema

Este subtema abarca la configuración detallada de Samba mediante smb.conf, incluyendo modos de seguridad, backends de autenticación, módulos VFS y optimización de rendimiento. Es el subtema con mayor peso del tema 301.

Estructura de smb.conf

Secciones del archivo

El archivo /etc/samba/smb.conf se organiza en secciones delimitadas por corchetes:

[global]
# Configuración general del servidor
workgroup = MIDOMINIO
server role = standalone server
 
[homes]
# Sección especial: directorios home de usuarios
comment = Directorio personal
browseable = no
writable = yes
 
[printers]
# Sección especial: impresoras del sistema
comment = Impresoras
path = /var/spool/samba
printable = yes
 
[datos]
# Recurso compartido personalizado
comment = Datos compartidos
path = /srv/samba/datos
read only = no
valid users = @usuarios

Secciones especiales

  • [global]: Configuración que aplica a todo el servidor y valores predeterminados para recursos
  • [homes]: Sección dinámica que crea automáticamente un recurso para el directorio home de cada usuario
  • [printers]: Sección dinámica que comparte automáticamente las impresoras del sistema
  • [print$]: Recurso para drivers de impresoras (distribución automática)

Sintaxis general

  • Los comentarios comienzan con # o ;
  • Los parámetros usan formato nombre = valor
  • Los nombres de parámetros no distinguen mayúsculas/minúsculas
  • Se permite usar sinónimos (ej: writable = yes equivale a read only = no)
  • Las líneas largas se pueden continuar con \
  • Se pueden incluir archivos externos: include = /etc/samba/smb.conf.%m

Para el examen: testparm es la herramienta obligatoria para verificar la sintaxis de smb.conf. Siempre debe ejecutarse después de cada cambio.

Validación con testparm

# Verificar sintaxis y mostrar configuración efectiva
testparm
 
# Mostrar sin pausa interactiva
testparm -s
 
# Verificar un archivo específico
testparm /ruta/al/smb.conf
 
# Mostrar configuración para un host específico
testparm -s --section-name=datos
 
# Mostrar valor de un parámetro específico
testparm -s -v --parameter-name="server role"

Modos de seguridad (server role)

El parámetro server role (anteriormente security) define el rol del servidor:

ValorDescripción
standalone serverServidor independiente con autenticación local
member serverMiembro de un dominio AD o NT4
classic primary domain controllerPDC de dominio NT4 (legacy)
classic backup domain controllerBDC de dominio NT4 (legacy)
active directory domain controllerControlador de dominio AD

Equivalencia con el parámetro legacy security

security (legacy)server role (actual)
security = userstandalone server o member server
security = domainmember server (NT4)
security = adsmember server (AD)

Para el examen: El parámetro security = share fue eliminado en Samba 4. server role es la forma moderna y preferida de configurar el modo de seguridad.

Backends de autenticación (passdb backend)

El parámetro passdb backend define dónde se almacenan las credenciales:

tdbsam (predeterminado)

[global]
passdb backend = tdbsam
# Almacena en /var/lib/samba/private/passdb.tdb
  • Base de datos TDB local (Trivial Database)
  • Formato predeterminado desde Samba 3
  • Bueno para servidores independientes y pequeños entornos
  • Administrado con pdbedit y smbpasswd

smbpasswd (legacy)

[global]
passdb backend = smbpasswd:/etc/samba/smbpasswd
  • Archivo de texto plano similar a /etc/passwd
  • Formato legacy, no recomendado
  • No almacena atributos extendidos de cuenta
  • Solo mantiene hashes LM y NT

ldapsam

[global]
passdb backend = ldapsam:ldap://ldap.ejemplo.com
ldap suffix = dc=ejemplo,dc=com
ldap user suffix = ou=Users
ldap group suffix = ou=Groups
ldap admin dn = cn=admin,dc=ejemplo,dc=com
  • Almacena cuentas Samba en un servidor LDAP externo
  • Útil para entornos con múltiples servidores Samba
  • Requiere esquema LDAP de Samba instalado
  • Permite centralización de usuarios

Para el examen: tdbsam es el backend predeterminado. ldapsam se usa para entornos distribuidos. smbpasswd es legacy y no recomendado.

Configuración de red

Interfaces y bind

[global]
# Limitar interfaces de escucha
interfaces = eth0 lo 192.168.1.0/24
bind interfaces only = yes
  • interfaces: Define en qué interfaces o subredes escucha Samba
  • bind interfaces only = yes: Restringe estrictamente a esas interfaces
  • Importante para seguridad en servidores con múltiples interfaces

Hosts allow/deny

[global]
hosts allow = 192.168.1. 10.0.0.0/8 127.
hosts deny = ALL
 
[confidencial]
hosts allow = 192.168.1.10 192.168.1.11
  • Se pueden aplicar globalmente o por recurso compartido
  • hosts allow se evalúa primero; si coincide, se permite el acceso
  • hosts deny se evalúa después si no hubo coincidencia en allow

Registro de logs

Configuración de logs

[global]
# Archivo de log (puede usar variables)
log file = /var/log/samba/log.%m
 
# Tamaño máximo en KB (0 = ilimitado)
max log size = 5000
 
# Nivel de log (0-10)
log level = 1
 
# Log detallado por componente
log level = 3 passdb:5 auth:10 winbind:2
 
# Usar syslog en lugar de archivos propios
logging = syslog

Variables de sustitución en smb.conf

VariableSignificado
%mNombre NetBIOS del cliente
%IDirección IP del cliente
%UNombre de usuario (solicitado)
%uNombre de usuario (efectivo)
%HDirectorio home del usuario
%SNombre del recurso compartido
%gGrupo primario del usuario
%DNombre del dominio
%LNombre NetBIOS del servidor

Conjuntos de caracteres

[global]
# Codificación para nombres de archivos en disco
unix charset = UTF-8
 
# Codificación para comunicación con clientes
dos charset = CP850
 
# Mostrar nombres con codificación correcta
display charset = UTF-8
  • unix charset: Codificación del sistema de archivos Linux (normalmente UTF-8)
  • dos charset: Codificación para clientes DOS/Windows antiguos
  • Importante para nombres de archivos con caracteres especiales (tildes, eñes)

Módulos VFS (Virtual File System)

Los módulos VFS extienden la funcionalidad de los recursos compartidos:

[datos]
path = /srv/samba/datos
vfs objects = acl_xattr recycle full_audit

Módulos VFS comunes

MóduloFunción
acl_xattrAlmacena ACLs NT en atributos extendidos
recyclePapelera de reciclaje para archivos eliminados
full_auditAuditoría detallada de operaciones
shadow_copy2Versiones anteriores (integración con snapshots)
fruitCompatibilidad con macOS (Time Machine)
catiaMapeo de caracteres ilegales en NTFS
streams_xattrFlujos de datos alternativos NTFS
crossrenamePermite renombrar entre sistemas de archivos

Ejemplo: módulo recycle

[datos]
vfs objects = recycle
recycle:repository = .papelera
recycle:keeptree = yes
recycle:versions = yes
recycle:maxsize = 104857600

Ejemplo: módulo full_audit

[datos]
vfs objects = full_audit
full_audit:prefix = %u|%I|%S
full_audit:success = mkdir rmdir rename unlink write
full_audit:failure = none
full_audit:facility = local5
full_audit:priority = notice

Optimización de rendimiento

Parámetros de rendimiento

[global]
# Tamaño de buffers de lectura/escritura
read raw = yes
write raw = yes
socket options = TCP_NODELAY IPTOS_LOWDELAY
 
# Caché de directorio
directory cache size = 0
 
# Aceleración de creación de conexiones
change notify = no
 
# Deshabilitar bloqueos estrictos
strict locking = Auto
 
# Usar sendfile para transferencias grandes
use sendfile = yes
 
# Async I/O
aio read size = 16384
aio write size = 16384

Recomendaciones de rendimiento

  • Habilitar use sendfile = yes para mejorar transferencia de archivos grandes
  • Usar SMB2/SMB3 que tienen mejor rendimiento que SMB1
  • Configurar read raw = yes y write raw = yes para transferencias sin procesar
  • Ajustar socket options según la red
  • Deshabilitar change notify si no se necesitan notificaciones de cambio
  • Considerar strict allocate = yes para archivos grandes preasignados

Para el examen: Conocer los parámetros de rendimiento más comunes y los módulos VFS principales. testparm es imprescindible para verificar la configuración.

Definición de recursos compartidos

Parámetros esenciales de un recurso

[proyecto]
comment = Archivos del proyecto
path = /srv/samba/proyecto
browseable = yes
read only = no
valid users = @desarrollo, admin
write list = @desarrollo
create mask = 0660
directory mask = 0770
force group = desarrollo
inherit permissions = yes
ParámetroFunción
pathRuta del directorio en el sistema
browseableVisible al listar recursos
read only / writableControl de escritura
valid usersUsuarios con acceso permitido
write listUsuarios con permiso de escritura
create maskPermisos para nuevos archivos
directory maskPermisos para nuevos directorios
force user / force groupForzar identidad para operaciones
inherit permissionsHeredar permisos del directorio padre
guest okPermitir acceso sin autenticación

Resumen de conceptos clave

  • smb.conf se divide en [global] y secciones de recursos compartidos
  • testparm es obligatorio para validar la configuración
  • server role reemplaza el antiguo parámetro security
  • tdbsam es el backend de autenticación predeterminado
  • Los módulos VFS extienden funcionalidad (recycle, audit, ACLs)
  • Las variables como %m, %U, %I permiten configuraciones dinámicas
  • La optimización incluye sendfile, async I/O y ajustes de socket

Trampas del examen

Errores comunes y distinciones criticas que LPI suele evaluar en este subtema:

  • server role vs security (legacy)security = share fue eliminado en Samba 4. La forma moderna es server role. Confundir security = ads (miembro AD) con security = user (standalone) es error frecuente; server role = member server con security = ads es lo correcto para unirse a AD.
  • testparm es OBLIGATORIO — Siempre ejecutar testparm despues de modificar smb.conf. Las preguntas suelen presentar escenarios donde la configuracion falla y la respuesta correcta es “ejecutar testparm primero”.
  • tdbsam vs smbpasswd vs ldapsamtdbsam es el backend predeterminado. smbpasswd es legacy (archivo texto plano, sin atributos extendidos). ldapsam es para entornos distribuidos con LDAP externo. No confundir con el backend de AD DC que usa sam.ldb.
  • writable = yes equivale a read only = no — Son sinonimos opuestos. read only = yes es el valor por defecto. Preguntas tramposas presentan ambos parametros en el mismo recurso para confundir.
  • Variables de sustitucion: %U vs %u vs %S%U es el usuario solicitado, %u es el usuario efectivo (despues de mapeo), %S es el nombre del recurso compartido. Confundir estas variables es error muy comun.
  • Modulos VFS: orden importavfs objects = acl_xattr recycle full_audit se ejecutan en orden. acl_xattr almacena ACLs NT en xattr, recycle implementa papelera, shadow_copy2 da versiones anteriores, fruit es para macOS. Preguntas suelen pedir identificar el modulo correcto para una funcion.
  • [homes] y [printers] son secciones especiales[homes] crea shares dinamicos basados en el directorio home del usuario. [printers] comparte automaticamente impresoras del sistema. No son shares estaticos normales.
  • hosts allow se evalua ANTES que hosts deny — Si un host coincide en hosts allow, se permite el acceso aunque este en hosts deny. Si no hay coincidencia en allow, se evalua deny. El orden de evaluacion es pregunta frecuente.
  • include con variablesinclude = /etc/samba/smb.conf.%m permite configuracion por cliente. Esto permite configuraciones dinamicas que muchas preguntas asumen es solo un archivo estatico.