301.4 Resolución de Problemas

Objetivos del subtema

Este subtema aborda las técnicas y herramientas para diagnosticar y resolver problemas comunes en entornos Samba, incluyendo niveles de log, análisis de tráfico de red, resolución de nombres y errores de permisos.

Niveles de log en Samba

Samba proporciona niveles de log granulares del 0 al 10:

NivelDescripciónUso recomendado
0Solo errores críticos y mensajes del sistemaProducción normal
1Advertencias y mensajes informativos básicosProducción (predeterminado)
2Información de conexiones y desconexionesDiagnóstico básico
3Operaciones de archivos detalladasProblemas de acceso
4Operaciones de bloqueo de archivosProblemas de bloqueo
5Llamadas RPC y operaciones internasDiagnóstico avanzado
6-7Información detallada de protocoloDesarrollo/debug
8-9Volcado de paquetes parcialDesarrollo
10Volcado completo de datos (muy verboso)Solo depuración extrema

Configuración de niveles de log

[global]
# Nivel global de log
log level = 1
 
# Niveles por componente (más granular)
log level = 1 auth:3 passdb:5 winbind:2 smb:3
 
# Componentes disponibles para log selectivo:
# all, tdb, printdrivers, lanman, smb, rpc_parse, rpc_srv,
# rpc_cli, passdb, sam, auth, winbind, vfs, idmap, quota,
# acls, locking, msdfs, dmapi, registry, scavenger, dns,
# ldb, tevent, auth_audit, auth_json_audit, kerberos, drs_repl

Cambiar nivel de log en caliente

# Aumentar nivel de log temporalmente sin reiniciar
smbcontrol smbd debug 3
 
# Para todos los procesos
smbcontrol all debug 3
 
# Volver al nivel normal
smbcontrol all debug 1
 
# Para un PID específico
smbcontrol 12345 debug 5

Para el examen: Es crucial conocer los niveles de log y la capacidad de ajustarlos por componente. El nivel 3 es normalmente suficiente para diagnosticar problemas de acceso. Nunca usar nivel 10 en producción.

Análisis de tráfico SMB

Wireshark para SMB

Wireshark es la herramienta principal para analizar tráfico SMB:

# Capturar tráfico SMB con tshark (versión CLI de Wireshark)
tshark -i eth0 -f "port 445 or port 139"
 
# Filtrar solo negociación SMB
tshark -i eth0 -Y "smb2.cmd == 0" -f "port 445"
 
# Guardar captura para análisis posterior
tshark -i eth0 -f "port 445" -w captura_smb.pcap
 
# Filtros útiles de Wireshark para SMB:
# smb2           - Todo tráfico SMB2/3
# smb            - Tráfico SMB1
# smb2.cmd == 5  - Operaciones de creación/apertura
# smb2.nt_status != 0 - Respuestas con error

tcpdump para SMB

# Capturar tráfico en puertos SMB
tcpdump -i eth0 port 445 or port 139 -w smb_capture.pcap
 
# Capturar con detalle
tcpdump -i eth0 -vvv port 445
 
# Filtrar por host específico
tcpdump -i eth0 host 192.168.1.10 and port 445
 
# Capturar tráfico NetBIOS
tcpdump -i eth0 port 137 or port 138
 
# Capturar tráfico Kerberos (útil en AD)
tcpdump -i eth0 port 88

Para el examen: Conocer los puertos a filtrar (445, 139, 137, 138) y los filtros básicos de Wireshark para SMB. tcpdump es útil para capturas rápidas en servidores sin interfaz gráfica.

Diagnóstico con herramientas Samba

testparm para validación

# Verificar configuración y errores
testparm
 
# Mostrar configuración efectiva silenciosamente
testparm -s
 
# Verificar acceso de un host específico a un recurso
testparm /etc/samba/smb.conf 192.168.1.100
 
# Mostrar todos los parámetros (incluidos valores por defecto)
testparm -s -v

smbclient para pruebas de conectividad

# Verificar que el servidor responde y listar recursos
smbclient -L //servidor -U usuario
 
# Probar acceso anónimo
smbclient -L //servidor -N
 
# Probar acceso a un recurso específico
smbclient //servidor/recurso -U usuario -c "ls"
 
# Forzar protocolo específico para probar compatibilidad
smbclient -L //servidor -U usuario -m SMB2
smbclient -L //servidor -U usuario -m SMB3
 
# Modo debug para más información
smbclient -L //servidor -U usuario -d 3

wbinfo para diagnóstico de winbind

# Verificar que winbindd responde
wbinfo -p
 
# Listar usuarios del dominio
wbinfo -u
 
# Listar grupos del dominio
wbinfo -g
 
# Verificar autenticación de un usuario
wbinfo -a usuario%contraseña
 
# Obtener SID del dominio
wbinfo -s nombre_dominio
 
# Mapear usuario a UID
wbinfo --name-to-sid usuario
wbinfo --sid-to-uid S-1-5-...
 
# Verificar mapeo de IDs
wbinfo --uid-info UID
wbinfo --gid-info GID
 
# Verificar la confianza del dominio
wbinfo -t
 
# Listar dominios de confianza
wbinfo --trusted-domains
 
# Obtener información del DC
wbinfo --dsgetdcname=DOMINIO

getent para verificar integración NSS

# Listar usuarios del sistema (incluidos los de dominio)
getent passwd
 
# Buscar un usuario específico
getent passwd usuario_dominio
 
# Listar grupos (incluidos los de dominio)
getent group
 
# Buscar un grupo específico
getent group grupo_dominio
 
# Si los usuarios de dominio no aparecen:
# 1. Verificar nsswitch.conf
# 2. Verificar que winbindd está funcionando
# 3. Verificar con wbinfo -u primero

Resolución de nombres

Orden de resolución de nombres

El parámetro name resolve order en smb.conf define la secuencia:

[global]
# Orden predeterminado
name resolve order = lmhosts wins host bcast
MétodoDescripción
lmhostsArchivo estático /etc/samba/lmhosts
winsConsulta al servidor WINS
hostResolución DNS del sistema (/etc/hosts, DNS)
bcastBroadcast NetBIOS en la subred local

Diagnóstico de problemas de resolución

# Probar resolución NetBIOS
nmblookup SERVIDOR
 
# Probar resolución DNS
host servidor.dominio.com
dig servidor.dominio.com
nslookup servidor.dominio.com
 
# Verificar archivo lmhosts
cat /etc/samba/lmhosts
 
# Probar WINS
nmblookup -R -U ip_wins SERVIDOR
 
# Verificar registros SRV de AD
dig _ldap._tcp.dominio.com SRV
dig _kerberos._tcp.dominio.com SRV

Para el examen: El orden predeterminado es lmhosts wins host bcast. Conocer cada método y cuándo se utiliza es fundamental para diagnosticar problemas de resolución de nombres.

Problemas comunes de permisos

Capas de permisos en Samba

Los permisos se evalúan en este orden:

  1. Permisos de smb.conf: valid users, read only, write list, etc.
  2. ACLs de Samba/NT: Si se usan ACLs NT (con módulo VFS acl_xattr)
  3. Permisos POSIX: Permisos del sistema de archivos Linux (rwx)

El acceso efectivo es el más restrictivo de todas las capas.

Diagnóstico de permisos

# Verificar permisos POSIX del directorio compartido
ls -la /srv/samba/datos/
 
# Verificar ACLs extendidas
getfacl /srv/samba/datos/
 
# Verificar que el usuario existe y tiene el grupo correcto
id usuario
 
# Verificar mapeo de usuario de dominio
wbinfo --name-to-sid "DOMINIO\\usuario"
wbinfo --sid-to-uid SID
 
# Verificar con qué identidad accede el usuario
smbstatus -u usuario

Errores comunes y soluciones

ErrorCausa probableSolución
NT_STATUS_ACCESS_DENIEDPermisos insuficientesVerificar smb.conf y permisos POSIX
NT_STATUS_LOGON_FAILURECredenciales incorrectasVerificar passdb, Kerberos o AD
NT_STATUS_BAD_NETWORK_NAMERecurso no existeVerificar nombre y que el recurso está definido
NT_STATUS_CONNECTION_REFUSEDsmbd no escuchaVerificar que smbd está activo y puertos abiertos
NT_STATUS_HOST_UNREACHABLEProblema de redVerificar conectividad, firewall, routing
NT_STATUS_OBJECT_NAME_NOT_FOUNDArchivo/directorio no existeVerificar la ruta en el servidor
NT_STATUS_SHARING_VIOLATIONArchivo bloqueadoVerificar con smbstatus -L
NT_STATUS_NO_TRUST_SAM_ACCOUNTCuenta de máquina inválidaReunirse al dominio con net ads join

Problemas de DNS en entornos AD

# Verificar que los registros SRV existen
dig _ldap._tcp.dc._msdcs.dominio.com SRV
dig _kerberos._tcp.dc._msdcs.dominio.com SRV
 
# Verificar resolución del DC
dig dc.dominio.com
 
# Verificar resolución inversa
dig -x IP_DEL_DC
 
# Verificar configuración DNS del cliente
cat /etc/resolv.conf
 
# Comprobar que el DC de Samba responde consultas DNS
samba-tool dns query localhost dominio.com @ ALL

Escenarios de diagnóstico completo

Paso 1: Verificar servicios

systemctl status smbd nmbd winbindd
ss -tlnp | grep -E "445|139"
ss -ulnp | grep -E "137|138"

Paso 2: Verificar configuración

testparm -s

Paso 3: Verificar conectividad

smbclient -L //localhost -U usuario
nmblookup -A 127.0.0.1

Paso 4: Verificar integración con dominio

net ads testjoin
wbinfo -t
wbinfo -u
getent passwd usuario_dominio

Paso 5: Aumentar logs y analizar

smbcontrol all debug 3
tail -f /var/log/samba/log.smbd
# Reproducir el problema
smbcontrol all debug 1

Paso 6: Captura de red (si necesario)

tcpdump -i eth0 port 445 -w debug.pcap
# Reproducir el problema
# Analizar con Wireshark

Resumen de conceptos clave

  • Niveles de log del 0 al 10, ajustables por componente y en caliente con smbcontrol
  • Wireshark y tcpdump para análisis de tráfico SMB (puertos 445, 139, 137, 138)
  • testparm valida configuración; smbclient -L prueba conectividad
  • wbinfo diagnostica problemas de winbind y dominio
  • getent verifica integración NSS con usuarios/grupos de dominio
  • Orden de resolución: lmhosts, wins, host, bcast
  • Los permisos se evalúan en capas: smb.conf > ACLs NT > permisos POSIX
  • Los códigos NT_STATUS_* identifican el tipo de error específico

Trampas del examen

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

  • Niveles de log: 3 para diagnostico, nunca 10 en produccion — El nivel 1 es el predeterminado. Nivel 3 es suficiente para problemas de acceso. Nivel 10 genera cantidades masivas de datos y degrada el rendimiento. Las preguntas suelen pedir el nivel adecuado para un escenario.
  • smbcontrol para cambiar log en calientesmbcontrol all debug 3 cambia el nivel de log sin reiniciar Samba. No confundir con editar smb.conf y reiniciar, que es el metodo persistente.
  • Log por componente: log level = 1 auth:3 winbind:5 — Se pueden ajustar niveles individualmente por componente (auth, passdb, winbind, smb, vfs, etc.). Las preguntas suelen presentar problemas de autenticacion donde solo hay que subir el nivel de auth.
  • NT_STATUS_ACCESS_DENIED vs NT_STATUS_LOGON_FAILURE — ACCESS_DENIED indica permisos insuficientes (usuario autenticado pero sin acceso). LOGON_FAILURE indica credenciales incorrectas. Confundir ambos lleva a diagnosticos erroneos.
  • Orden de resolucion de nombres: lmhosts wins host bcast — Este es el orden predeterminado. lmhosts es el archivo estatico local, wins consulta servidor WINS, host usa DNS del sistema, bcast usa broadcast NetBIOS. Las preguntas suelen pedir el orden o que metodo falla primero.
  • Capas de permisos: smb.conf > ACLs NT > permisos POSIX — El acceso efectivo es el MAS RESTRICTIVO de todas las capas. Si smb.conf permite pero POSIX deniega, el acceso se deniega. Este concepto es fundamental y frecuentemente evaluado.
  • wbinfo -t vs wbinfo -p-t verifica la confianza del dominio (relacion con el DC). -p solo verifica que winbindd responde (ping local). Para diagnosticar problemas de dominio, usar -t; para verificar que el servicio esta vivo, usar -p.
  • getent passwd no muestra usuarios de dominio — Si getent no resuelve usuarios, verificar en este orden: 1) nsswitch.conf tiene winbind o sss, 2) winbindd/sssd esta activo, 3) wbinfo -u funciona directamente. Las preguntas presentan este flujo de diagnostico.
  • Puertos de filtrado para tcpdump/Wireshark — Puerto 445=SMB directo, 139=SMB sobre NetBIOS, 137/138=nombres NetBIOS, 88=Kerberos. Filtrar el puerto incorrecto es error comun en escenarios de captura de red.