209.1 - Configuración del servidor Samba

Peso: 5

Introducción

Samba es la implementación libre del protocolo SMB/CIFS que permite a sistemas Linux compartir archivos e impresoras con clientes Windows y otros sistemas. Con un peso de 5, este es uno de los subtemas más importantes del examen LPIC-2 202. Se requiere un conocimiento profundo de la configuración de smb.conf, herramientas de administración, modos de seguridad y la integración con Active Directory.

Instalación

# Debian/Ubuntu
apt install samba samba-client cifs-utils
 
# Red Hat/CentOS
yum install samba samba-client samba-common cifs-utils

Demonios de Samba

  • smbd: Gestiona las conexiones de compartición de archivos e impresoras (puertos TCP 139 y 445).
  • nmbd: Proporciona servicios de nombres NetBIOS y navegación de red (puertos UDP 137 y 138).
  • winbindd: Integración con Active Directory para mapeo de usuarios y grupos.
systemctl enable smb nmb
systemctl start smb nmb

Archivo de configuración smb.conf

El archivo principal de configuración es /etc/samba/smb.conf. Se divide en secciones identificadas por corchetes.

Secciones especiales

[global]
# Configuración general del servidor Samba
 
[homes]
# Compartición automática de directorios home de los usuarios
 
[printers]
# Compartición automática de impresoras del sistema

Sección [global]

[global]
    workgroup = MIGRUPO
    server string = Servidor Samba %v
    netbios name = SERVIDOR
    security = user
    map to guest = Bad User
    dns proxy = no
 
    # Logging
    log file = /var/log/samba/log.%m
    max log size = 1000
    log level = 1
 
    # Interfaces de red
    interfaces = eth0 lo
    bind interfaces only = yes
 
    # Rendimiento
    socket options = TCP_NODELAY IPTOS_LOWDELAY

Para el examen: La directiva workgroup define el grupo de trabajo o dominio Windows al que pertenece el servidor. security = user es el modo predeterminado y el más utilizado, que requiere autenticación con usuario y contraseña de Samba.

Modos de seguridad

ModoDescripción
security = userAutenticación contra la base de datos local de Samba (predeterminado)
security = adsEl servidor se une a un dominio Active Directory como miembro
security = domainEl servidor se une a un dominio NT4 (obsoleto)

Para el examen: El modo security = share fue eliminado en Samba 4. Los modos actuales son user (predeterminado) y ads (para integración con Active Directory). El modo domain es para dominios NT4 y está prácticamente obsoleto.

Definición de recursos compartidos

Compartición de directorios

[documentos]
    comment = Documentos compartidos
    path = /srv/samba/documentos
    browseable = yes
    read only = no
    writable = yes
    valid users = @grupo_docs, usuario1
    write list = @editores
    create mask = 0664
    directory mask = 0775
    force user = nobody
    force group = nogroup
    guest ok = no

Directivas de compartición importantes

DirectivaDescripción
pathRuta del directorio en el sistema de archivos
browseableSi el recurso aparece al explorar la red (yes/no)
read onlySolo lectura (yes/no)
writablePermite escritura (opuesto a read only)
valid usersUsuarios o grupos (@grupo) con acceso
write listUsuarios o grupos con permiso de escritura
read listUsuarios o grupos con permiso solo de lectura
create maskPermisos para archivos nuevos
directory maskPermisos para directorios nuevos
force userFuerza que todas las operaciones se hagan como este usuario
force groupFuerza que todas las operaciones se hagan como este grupo
guest okPermite acceso sin autenticación (yes/no)
hosts allowIPs o redes con acceso permitido
hosts denyIPs o redes con acceso denegado

Sección [homes]

[homes]
    comment = Directorio personal de %U
    browseable = no
    writable = yes
    valid users = %S
    create mask = 0700
    directory mask = 0700

Para el examen: La sección [homes] crea automáticamente un recurso compartido para cada usuario que se conecta, mapeándolo a su directorio home. La variable %S se reemplaza por el nombre del recurso solicitado (que coincide con el nombre de usuario) y %U con el nombre de usuario.

Compartir impresoras

[printers]
    comment = Todas las impresoras
    path = /var/spool/samba
    browseable = no
    printable = yes
    guest ok = no
    writable = no
    create mask = 0700
 
[impresora_oficina]
    comment = Impresora de la oficina
    path = /var/spool/samba
    printable = yes
    printer name = HP_LaserJet

Gestión de usuarios de Samba

smbpasswd

# Añadir usuario de Samba (el usuario UNIX debe existir primero)
smbpasswd -a usuario1
 
# Cambiar contraseña de un usuario
smbpasswd usuario1
 
# Habilitar un usuario deshabilitado
smbpasswd -e usuario1
 
# Deshabilitar un usuario
smbpasswd -d usuario1
 
# Eliminar un usuario
smbpasswd -x usuario1

pdbedit

# Listar todos los usuarios de Samba
pdbedit -L
 
# Listar con información detallada
pdbedit -L -v
 
# Añadir un usuario
pdbedit -a usuario1
 
# Eliminar un usuario
pdbedit -x usuario1
 
# Mostrar información de un usuario específico
pdbedit -v usuario1
 
# Exportar la base de datos en formato smbpasswd
pdbedit -e smbpasswd:/tmp/samba-backup

Para el examen: Tanto smbpasswd como pdbedit gestionan los usuarios de Samba, pero pdbedit es más completo y permite administrar diferentes backends de base de datos (tdbsam, ldapsam). Recuerda que el usuario Unix debe existir antes de crear el usuario Samba.

Herramientas de diagnóstico y cliente

testparm

# Verificar la sintaxis de smb.conf
testparm
 
# Verificar y mostrar solo la configuración activa
testparm -s
 
# Verificar la configuración vista desde una IP específica
testparm /etc/samba/smb.conf 192.168.1.100

smbclient

# Listar recursos compartidos de un servidor
smbclient -L //servidor -U usuario
 
# Conectarse a un recurso compartido
smbclient //servidor/compartido -U usuario
 
# Comandos dentro de smbclient
# smb: \> ls
# smb: \> get archivo.txt
# smb: \> put archivo.txt
# smb: \> mkdir directorio
# smb: \> cd directorio
# smb: \> exit
 
# Conectarse con un usuario de dominio
smbclient //servidor/compartido -U dominio\\usuario

smbstatus

# Mostrar conexiones activas
smbstatus
 
# Mostrar solo los recursos compartidos en uso
smbstatus -S
 
# Mostrar solo los procesos
smbstatus -p
 
# Mostrar solo los archivos bloqueados
smbstatus -L

nmblookup

# Resolver un nombre NetBIOS
nmblookup SERVIDOR
 
# Buscar el maestro de navegación del grupo de trabajo
nmblookup -M MIGRUPO
 
# Consultar un servidor específico
nmblookup -U 192.168.1.1 -R SERVIDOR
 
# Buscar todos los hosts en la red
nmblookup '*'

Montaje de recursos CIFS

Montaje manual

# Montar un recurso compartido
mount -t cifs //servidor/compartido /mnt/samba -o username=usuario,password=clave
 
# Montar con archivo de credenciales (más seguro)
mount -t cifs //servidor/compartido /mnt/samba -o credentials=/root/.smbcredentials
 
# Contenido de /root/.smbcredentials
# username=usuario
# password=clave
# domain=MIDOMINIO

Montaje permanente en /etc/fstab

//servidor/compartido  /mnt/samba  cifs  credentials=/root/.smbcredentials,uid=1000,gid=1000,iocharset=utf8  0  0

Samba como miembro de Active Directory

Unir el servidor a un dominio AD

# Configuración en smb.conf
# [global]
#     security = ads
#     realm = EMPRESA.COM
#     workgroup = EMPRESA
#     idmap config * : backend = tdb
#     idmap config * : range = 10000-20000
#     idmap config EMPRESA : backend = rid
#     idmap config EMPRESA : range = 20001-30000
#     winbind use default domain = yes
 
# Unir al dominio
net ads join -U administrador
 
# Verificar la unión al dominio
net ads testjoin
 
# Obtener información del dominio
net ads info

Comando net

# Listar recursos compartidos remotos
net rpc share list -U usuario -S servidor
 
# Unir al dominio
net ads join -U admin
 
# Salir del dominio
net ads leave -U admin
 
# Mostrar información del dominio
net ads info
 
# Ver hora del servidor
net time -S servidor

Variables de sustitución en smb.conf

VariableDescripción
%UNombre de usuario de la sesión
%GGrupo principal del usuario
%HDirectorio home del usuario
%mNombre NetBIOS del cliente
%LNombre NetBIOS del servidor
%MNombre DNS del cliente
%IDirección IP del cliente
%SNombre del recurso compartido
%vVersión de Samba

Para el examen: Las variables de sustitución son muy útiles para crear configuraciones dinámicas. Por ejemplo, log file = /var/log/samba/log.%m crea un archivo de log separado para cada cliente que se conecta.

Mapeo de usuarios

[global]
    # Archivo de mapeo de nombres de usuario
    username map = /etc/samba/smbusers

Contenido de /etc/samba/smbusers:

# usuario_unix = nombre_windows
root = administrador admin
juan = jperez "Juan Perez"

Para el examen: El archivo de mapeo de usuarios permite que los usuarios de Windows inicien sesión con nombres diferentes a los de sus cuentas Unix. El formato es usuario_unix = nombre_windows [nombre_windows2 ...].


Trampas del examen

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

  • security = share fue eliminado en Samba 4 — si una pregunta ofrece security = share como opcion, es incorrecta para versiones modernas. Los modos validos actuales son user (predeterminado) y ads (Active Directory).

  • El usuario Unix DEBE existir antes de crear el usuario Sambasmbpasswd -a usuario fallara si el usuario no existe en /etc/passwd. Primero useradd, despues smbpasswd -a.

  • smbpasswd vs pdbedit — ambos gestionan usuarios Samba, pero pdbedit es mas completo y soporta distintos backends (tdbsam, ldapsam). Para listar usuarios con detalle, pdbedit -L -v es el comando correcto.

  • testparm verifica smb.conf, NO la conectividadtestparm valida la sintaxis del archivo de configuracion. Para diagnosticar conexiones se usa smbclient o smbstatus. No confundir sus funciones.

  • read only = yes y writable = yes son mutuamente excluyentes — son la misma directiva con logica inversa. Si pones ambas, la ultima prevalece. El examen puede incluir configuraciones contradictoria para confundir.

  • browseable = no NO impide el acceso, solo oculta el recurso — el recurso sigue siendo accesible si conoces el nombre (\\servidor\recurso). Solo deja de aparecer al explorar la red.

  • Puertos de Samba: TCP 139/445 y UDP 137/138smbd usa TCP 139 y 445 para comparticion de archivos. nmbd usa UDP 137 y 138 para NetBIOS. El examen puede preguntar que demonio usa cada puerto.

  • Variables de sustitucion: %U (usuario), %m (cliente NetBIOS), %S (recurso)log file = /var/log/samba/log.%m crea un log por cada cliente. valid users = %S en [homes] restringe el acceso al propio usuario. Confundir estas variables es comun.

  • net ads join -U admin para unir a Active Directory — requiere security = ads y realm = DOMINIO.COM en smb.conf. Sin el realm o con security = user, la union al dominio AD falla.

  • force user y force group afectan los permisos del sistema de archivos — todos los archivos creados por cualquier usuario de Samba se crearan como si fueran de ese usuario/grupo forzado. Es util pero peligroso si no se entiende el impacto.