302.5 Gestión Local de Usuarios
Objetivos del subtema
Este subtema cubre la gestión de usuarios locales de Samba, incluyendo las herramientas smbpasswd y pdbedit, el mapeo de nombres de usuario, opciones de forzar usuario/grupo, cuenta de invitado y la interacción entre usuarios locales y winbind.
smbpasswd - Gestión de contraseñas Samba
smbpasswd es la herramienta clásica para gestionar contraseñas de usuarios en la base de datos local de Samba:
Operaciones básicas
# Añadir un usuario a la base de datos Samba
# (el usuario debe existir previamente en /etc/passwd)
smbpasswd -a pedro
# Cambiar la contraseña de un usuario
smbpasswd pedro
# Deshabilitar una cuenta Samba
smbpasswd -d pedro
# Habilitar una cuenta Samba
smbpasswd -e pedro
# Eliminar un usuario de la base de datos Samba
smbpasswd -x pedro
# Establecer contraseña nula (sin contraseña)
smbpasswd -n pedro
# Requiere: null passwords = yes en smb.conf
# Cambiar la contraseña de la cuenta de máquina
smbpasswd -mConsideraciones importantes
- El usuario debe existir en el sistema Linux (
/etc/passwd) antes de añadirlo a Samba - La contraseña Samba es independiente de la contraseña del sistema Linux
smbpasswdtrabaja con el backend definido enpassdb backend- En entornos AD DC, no se usa
smbpasswdsinosamba-tool user - La opción
-r servidorpermite cambiar la contraseña en un servidor remoto
Para el examen:
smbpasswd -arequiere que el usuario UNIX exista previamente. La contraseña Samba y la contraseña UNIX son bases de datos separadas.
pdbedit - Gestión avanzada de la base de datos de usuarios
pdbedit es una herramienta más completa que smbpasswd para gestionar la base de datos passdb:
Operaciones con pdbedit
# Listar todos los usuarios
pdbedit -L
# Listar con información detallada
pdbedit -L -v
# Listar en formato smbpasswd (legacy)
pdbedit -L -w
# Añadir un usuario
pdbedit -a -u pedro
# Eliminar un usuario
pdbedit -x -u pedro
# Mostrar información detallada de un usuario
pdbedit -v -u pedro
# Modificar atributos de un usuario
pdbedit -u pedro --fullname="Pedro García"
pdbedit -u pedro --homedir="\\\\servidor\\pedro"
pdbedit -u pedro --drive="H:"
pdbedit -u pedro --profile="\\\\servidor\\profiles\\pedro"
pdbedit -u pedro --logon-script="login.bat"
# Configurar políticas de cuenta
pdbedit -u pedro --account-policy="password history" --value=5
# Establecer horas de login permitidas
pdbedit -u pedro --logon-hours="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
# Exportar base de datos
pdbedit -e smbpasswd:/tmp/export.txt
# Importar base de datos
pdbedit -i smbpasswd:/tmp/export.txt
# Migrar entre backends
pdbedit -i smbpasswd:/etc/samba/smbpasswd -e tdbsam:/var/lib/samba/private/passdb.tdbAtributos gestionados por pdbedit
| Atributo | Opción | Descripción |
|---|---|---|
| Nombre completo | --fullname | Nombre para mostrar |
| Directorio home | --homedir | Ruta UNC del home en red |
| Unidad de disco | --drive | Letra de unidad para mapear home |
| Script de login | --logon-script | Script ejecutado al iniciar sesión |
| Perfil | --profile | Ruta UNC del perfil de usuario |
| Descripción | --account-desc | Descripción de la cuenta |
| Caducidad de cuenta | --account-control | Flags de control de cuenta |
Para el examen:
pdbeditpermite operaciones quesmbpasswdno puede, como migración entre backends, exportación/importación y modificación de atributos extendidos.
Mapeo de nombres de usuario (username map)
El parámetro username map permite traducir nombres de usuario entre los que envía el cliente Windows y los que existen en el sistema Linux:
Configuración del mapeo
# smb.conf
[global]
username map = /etc/samba/smbusersFormato del archivo de mapeo
# /etc/samba/smbusers
# Formato: usuario_unix = usuario_windows [usuario_windows2 ...]
# Mapear administrador de Windows a root
root = administrator admin "Admin Principal"
# Mapear usuario de red a usuario local
pedro = "Pedro Garcia" pgarcia
# Mapear múltiples usuarios de Windows a un usuario Unix
webmaster = "Web Admin" webadmin
# Usar comodín (cualquier usuario no mapeado usa su mismo nombre)
!nobody = *
Reglas de mapeo
- Se evalúan en orden, la primera coincidencia gana
- Los nombres con espacios se encierran entre comillas
- El carácter
!indica que se deja de buscar después de esa línea - El comodín
*coincide con cualquier nombre no mapeado previamente - El mapeo se aplica antes de la autenticación
username map script
Para mapeos dinámicos, se puede usar un script:
[global]
username map script = /usr/local/bin/samba-user-map.sh#!/bin/bash
# /usr/local/bin/samba-user-map.sh
# Recibe el nombre de usuario como argumento
# Debe devolver el nombre mapeado
echo "${1,,}" # Ejemplo: convertir a minúsculasPara el examen: El archivo de mapeo traduce nombres ANTES de la autenticación. Es especialmente útil para mapear “administrator” a “root” y para resolver diferencias de nombres entre Windows y Linux.
Force user y force group
Estos parámetros fuerzan la identidad utilizada para operaciones de archivos en un recurso compartido:
force user
[datos]
path = /srv/samba/datos
force user = sambauser- Todas las operaciones de archivos se realizan como
sambauser - El usuario autenticado mantiene sus permisos Samba, pero los archivos se crean con la identidad forzada
- Útil para recursos donde todos los archivos deben pertenecer al mismo usuario
force group
[proyecto]
path = /srv/samba/proyecto
force group = proyecto- Todas las operaciones de archivos usan el grupo
proyecto - Se puede combinar con
force user - Útil para directorios colaborativos donde el grupo debe ser consistente
force group con +
[compartido]
path = /srv/samba/compartido
force group = +equipo- El signo
+indica que solo se fuerza el grupo si el usuario ya es miembro del grupoequipo - Si el usuario no pertenece al grupo, se usa su grupo primario normal
- Permite control más granular
Ejemplo combinado
[web]
path = /var/www/html
read only = no
valid users = @webteam
force user = www-data
force group = www-data
create mask = 0664
directory mask = 0775Cuenta de invitado (guest account)
La cuenta de invitado permite acceso anónimo a recursos compartidos:
Configuración
[global]
# Definir la cuenta Unix usada para accesos de invitado
guest account = nobody
# Qué hacer cuando falla la autenticación
map to guest = Bad User
# Opciones:
# Never - Nunca mapear a invitado (predeterminado)
# Bad User - Si el usuario no existe, tratarlo como invitado
# Bad Password - Si la contraseña falla, tratarlo como invitado (inseguro)
# Bad Uid - Si el usuario no tiene cuenta Unix
[publico]
path = /srv/samba/publico
guest ok = yes
read only = yes
browseable = yesConsideraciones de seguridad
map to guest = Bad Passwordes inseguro: un usuario con contraseña incorrecta accedería como invitado sin saberlomap to guest = Bad Useres más seguro: solo usuarios inexistentes son mapeados a invitado- La cuenta de invitado debe existir en el sistema (
nobodyes la opción estándar) - Los archivos creados por el invitado pertenecen a la cuenta
guest account
Para el examen: Conocer las diferencias entre las opciones de
map to guesty cuándo es seguro usar cada una.Bad Useres la opción más comúnmente usada.
Rangos idmap locales
Para servidores que usan tanto usuarios locales como de dominio, es importante definir rangos de ID no solapados:
[global]
# Rango para dominios desconocidos (comodín)
idmap config * : backend = tdb
idmap config * : range = 3000-7999
# Rango para el dominio AD
idmap config EMPRESA : backend = rid
idmap config EMPRESA : range = 10000-999999Reglas de rangos
- Los rangos NO deben solaparse entre backends
- Los UIDs/GIDs del sistema local (normalmente < 1000) no deben estar en ningún rango idmap
- El rango comodín (
*) debe ser más pequeño que los rangos de dominio - El rango debe ser suficientemente grande para todos los usuarios/grupos del dominio
Integración de getent con winbind
Verificar usuarios
# Listar todos los usuarios (locales + dominio)
getent passwd
# Buscar un usuario de dominio
getent passwd pedro
getent passwd EMPRESA\\pedro
getent passwd pedro@empresa.com
# Listar todos los grupos (locales + dominio)
getent group
# Buscar un grupo de dominio
getent group "Domain Users"
getent group "EMPRESA\\Domain Users"
# Verificar pertenencia a grupos
id pedro
groups pedroSolución de problemas con getent
# Si getent no muestra usuarios de dominio:
# 1. Verificar nsswitch.conf
grep winbind /etc/nsswitch.conf
# Debe mostrar: passwd: files winbind
# 2. Verificar que winbindd funciona
wbinfo -p
# 3. Verificar enumeración
# smb.conf debe tener:
# winbind enum users = yes
# winbind enum groups = yes
# 4. Verificar con wbinfo directamente
wbinfo -u
wbinfo -g
# 5. Verificar mapeo de un usuario específico
wbinfo -i pedrowinbind use default domain
[global]
# Con winbind use default domain = yes:
# getent passwd pedro -> funciona
# getent passwd EMPRESA\pedro -> funciona
# Con winbind use default domain = no (predeterminado):
# getent passwd EMPRESA\pedro -> funciona
# getent passwd pedro -> NO funciona (sin prefijo)Gestión de acceso por recurso
Combinación de controles de acceso
[confidencial]
path = /srv/samba/confidencial
# Autenticación: solo estos usuarios pueden acceder
valid users = @gerencia, director
# Escritura: solo director puede escribir
write list = director
# Lectura: gerencia solo puede leer
read list = @gerencia
# Identidad forzada para archivos
force group = gerencia
# Permisos de archivos nuevos
create mask = 0660
directory mask = 0770
# Sin acceso de invitado
guest ok = noResumen de conceptos clave
smbpasswdgestiona contraseñas locales de Samba; el usuario UNIX debe existir primeropdbeditpermite gestión avanzada: atributos extendidos, migración, exportación/importaciónusername maptraduce nombres de usuario antes de la autenticaciónforce useryforce groupfuerzan la identidad para operaciones de archivosforce group = +gruposolo aplica si el usuario ya es miembro del grupoguest accountdefine la cuenta UNIX para acceso anónimomap to guest = Bad Usermapea usuarios inexistentes a invitado- Los rangos idmap no deben solaparse entre backends ni con UIDs locales
getent passwd/groupverifica la integración NSS con winbindwinbind use default domain = yespermite login sin prefijo de dominio
Trampas del examen
Errores comunes y distinciones criticas que LPI suele evaluar en este subtema:
smbpasswd -arequiere usuario UNIX previo — El usuario debe existir en/etc/passwdANTES de añadirlo a Samba consmbpasswd -a. Si el usuario UNIX no existe, el comando falla. La contraseña Samba es independiente de la contraseña UNIX.pdbeditvssmbpasswd—pdbeditpermite migracion entre backends (-i/-e), exportacion, atributos extendidos (fullname, profile, drive, script).smbpasswdsolo gestiona contraseñas. Las preguntas piden la herramienta correcta para cada operacion.username mapse aplica ANTES de la autenticacion — El mapeo de nombres traduce el nombre del cliente Windows al nombre UNIX antes de verificar credenciales. El mapeo clasico esroot = administrator admin. Preguntas frecuentes sobre el orden de procesamiento.force uservsforce groupvsforce group = +grupo—force userfuerza la identidad para TODOS los accesos.force groupfuerza el grupo para todos.force group = +grupo(con +) solo fuerza si el usuario YA es miembro del grupo. El signo + es trampa frecuente.map to guest = Bad UservsBad Password—Bad Usermapea a invitado solo si el usuario no existe (seguro).Bad Passwordmapea si la contraseña falla (inseguro: un typo en la contraseña da acceso de invitado sin aviso). Las preguntas suelen pedir la opcion segura.guest account = nobody— La cuenta de invitado debe existir en el sistema Linux. Sinobodyno existe, los accesos de invitado fallan. Los archivos creados por invitados pertenecen a esta cuenta.pdbedit -i smbpasswd: -e tdbsam:— Esta es la sintaxis para migrar del backend smbpasswd al tdbsam. Las preguntas suelen presentar escenarios de migracion donde hay que usar pdbedit con las opciones-i(importar) y-e(exportar).- Contraseña Samba != contraseña UNIX — Son bases de datos completamente separadas. Cambiar la contraseña con
passwdno cambia la de Samba y viceversa. Para sincronizarlas se puede usar PAM conpam_smbpass, pero no es automatico por defecto. winbind enum users/groups = yespuede ser lento — En dominios grandes, enumerar todos los usuarios/grupos es costoso. Las preguntas presentan escenarios de rendimiento donde la solucion es desactivar la enumeracion y usar busquedas directas.