Servidor Samba con LDAP NSS – PAM en Debian Wheezy

De WikiSalud
Revisión a fecha de 11:06 12 jul 2019; Alortiz (Discusión | contribuciones)

(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar
Este artículo se mantiene por motivos de consulta.
Podría interesarle revisar Migrando un dominio Samba NT4 a Samba Active Directory

Contenido

Resumen

Este artículo describe el proceso de instalación y configuración de un Controlador de Dominio Primario (PDC por sus siglas en inglés) sobre Debian 7.0 "Wheezy", usando SAMBA, OpenLDAP como almacén de credenciales, NSS y PAM para autenticación-autorización de usuarios.

Introducción

Este artículo es una actualización de Servidor Samba con LDAP NSS – PAM en Debian. Principalmente, se actualiza el método para configurar OpenLDAP y se simplifican otras partes de la configuración.

N.B. Todas las configuraciones como usario root, a menos que se indique lo contrario.

¿Por qué no samba4?

Debian "Wheezy" incluye una versión de Samba 4 en sus repositorios (lo que indica que se considera estable), sin embargo, en la descripción del paquete se menciona lo siguiente:
These packages contain snapshot versions of Samba 4, the next-generation version of Samba. These should be considered _experimental_, and should not be used in production.
Este paquete contiene una instantánea de las versiones de Samba4, la siguiente generación de la versión de Samba. Estos deben ser considerados _experimentales_, y no deben ser utilizados en producción. (Traducción libre).

Configuración previa del Servidor

  • Es importante tener configurados los repositorios y la configuración de red correcta de tal manera que permita la comunicación.
  • Revise que la configuración del idioma sea español
  • Configure NTP si el servidor va tomar parte de procesos de réplica con otros servidores, puesto que las marcas de tiempo que usa en los atributos de operaciones son configuradas en base a la hora del sistema

Instalar LDAP

aptitude install slapd ldap-utils

Durante el proceso de instalación de solicita que se introduzca una contraseña.

Para configurar el paquete slapd recién instalado se utiliza dpkg-reconfigure:

dpkg-reconfigure slapd
  • ¿Desea omitir la configuración del servidor OpenLDAP? No

Omitir la configuración de OpenLDAP

  • Introduzca su nombre de dominio DNS: salud.gob.sv

Nombre de dominio DNS

  • Nombre de la organización: Ministerio de Salud

Nombre de la organización

  • Contraseña del administrador:

Contraseña del administrador

  • Verificación de contraseña:

Verificación de contraseña

  • Motor de base de datos a utilizar: HDB

Motor de base de datos

  • ¿Desea que se borre la base de datos cuando se purgue el paquete slapd? No

No borrar base de datos al purgar el paquete

  • ¿Desea mover la base de datos antigua?

Mover la base de datos antigua

  • ¿Desea permitir el protocolo LDAPv2? No

No permitir el protocolo LDAPv2

Usuario de lectura

Crear un directorio de trabajo:

mkdir -p /root/openldap.conf.d/

Crear una contraseña cifrada:

password=$(slappasswd -s Contraseña-del-usuario-de-lectura -h {SHA})

El siguiente comando creará el fichero ldif /root/openldap.conf.d/usuario-lectura, que usaremos para agregar al usuario en nuestro árbol LDAP

cat <<MAFI> /root/openldap.conf/usuario-lectura.ldif
dn: cn=lector,dc=salud,dc=gob,dc=sv
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: lectura
description: LDAP lectura
userPassword: $password
MAFI


Ejecutar la siguiente orden para agregar al usuario a la base de datos de LDAP. Se debe ingresar la contraseña especificada durante el proceso de configuración:

ldapadd -x -D cn=admin,dc=salud,dc=gob,dc=sv -W -f /root/openldap.conf.d/usuario-lectura.ldif

Agregar usuario a la base de datos de LDAP.

Configuraciones avanzadas para servidores LDAP en Debian

Si lo desea, en este punto puede dirigirse a Configuraciones avanzadas para servidores LDAP en Debian para habilitar el tráfico cifrado y algunas opciones avanzadas de LDAP (registro de autenticación y replicación)

Soporte para SAMBA LDAP

Instalar el paquete que contiene la documentación de Samba:

aptitude install samba-doc

Copiar el esquema al directorio de configuración de ldap.

zcat /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz > /etc/ldap/schema/samba.schema  

Crear un directorio de trabajo para el esquema

mkdir -p /root/schemas.conf.d/

Crear el archivo /root/schemas.conf.d/schemas.ldif con el siguiente comando:

cat <<MAFI> /root/schemas.conf.d/schemas.ldif
include /etc/ldap/schema/core.schema 
include /etc/ldap/schema/cosine.schema 
include /etc/ldap/schema/nis.schema 
include /etc/ldap/schema/inetorgperson.schema 
include /etc/ldap/schema/samba.schema
MAFI

Cargar el esquema que se ha creado:

slaptest -f /root/schemas.conf.d/schemas.ldif -F /root/schemas.conf.d/

Cargar el esquema para LDAP.

Arroja el siguiente resultado.

config file testing succeeded 

Ahora copias el esquema ldiff creado al directorio correspondiente

cp schemas.conf.d/cn\=config/cn\=schema/cn\=\{4\}samba.ldif /etc/ldap/slapd.d/cn\=config/cn\=schema/

Normalizas los permisos del archivo que acabas de copiar.

chown openldap:openldap /etc/ldap/slapd.d/cn\=config/cn\=schema/cn\=\{4\}samba.ldif 

Reinicias el servidor LDAP para que agregue los anteriores esquemas

service slapd restart

Modificando ldap: ACL e índices

Cree el fichero cambios.ldif con el siguiente contenido:

cambios.ldif
dn: olcDatabase={1}hdb,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange,sambaLMPassword,sambaNTPassword by self write by anonymous auth by dn="cn=admin,dc=psalud,dc=gob,dc=sv" write by * none
-
add: olcAccess
olcAccess: {1}to dn.base="" by * read
-
add: olcAccess
olcAccess: {2}to * by dn="cn=admin,dc=psalud,dc=gob,dc=sv" write by * read
-
replace: olcDbIndex
olcDbIndex: uidNumber eq
olcDbIndex: gidNumber eq
olcDbIndex: cn pres,sub,eq
olcDbIndex: sn pres,sub,eq
olcDbIndex: uid pres,sub,eq
olcDbIndex: displayName pres,sub,eq
olcDbIndex: memberUid eq,subinitial
olcDbIndex: uniqueMember eq
olcDbIndex: mail eq,subinitial
olcDbIndex: givenname eq,subinitial
olcDbIndex: sambaSID eq
olcDbIndex: sambaPrimaryGroupSID eq
olcDbIndex: sambaDomainName eq
olcDbIndex: sambaGroupType eq
olcDbIndex: sambaSIDList eq

Se aplica con:

ldapmodify -Y EXTERNAL -H ldapi:/// -f cambios.ldif 

Puede ver lo linda que queda la configuración con el siguiente comando

ldapsearch -Y EXTERNAL -H ldapi:/// -b olcDatabase={1}hdb,cn=config -LLL

Comprobar que no haya tenido un error escribiendo en el archivo de configuración, y que reconozca el archivo LDIF del esquema SAMBA.

slaptest -vu 

Y debe devolver algo como

config file testing succeeded 

Comprobar que todo este bien con un simple

ldapsearch -x -b '' -s base '(objectClass=*)' namingContexts -LLL 

Devolverá algo como esto

dn: namingContexts: dc=salud,dc=gob,dc=sv 

O con algo más elaborado. Comprobará además que su clave es la correcta.

ldapsearch -x -D cn=admin,dc=salud,dc=gob,dc=sv -b dc=salud,dc=gob,dc=sv -W -LLL

El resultado debe ser como el siguiente. Verifique que el atributo marcado userPassword aparezca

dn: dc=salud,dc=gob,dc=sv 
objectClass: top 
objectClass: dcObject 
objectClass: organization 
o: Ministerio de Salud 
dc: salud 

dn: cn=admin,dc=salud,dc=gob,dc=sv 
objectClass: simpleSecurityObject 
objectClass: organizationalRole 
cn: admin 
description: LDAP administrator 
userPassword:: {hash-password-ldap-root} 

dn: cn=lector,dc=salud,dc=gob,dc=sv 
objectClass: simpleSecurityObject 
objectClass: organizationalRole 
cn: mafi description: LDAP lectura 
userPassword:: {hash-password-ldap-lector} 

Configuración del Cliente LDAP

Configure el archivo /etc/ldap/ldap.conf (Cliente LDAP en Debian) siguiendo el siguiente ejemplo y cambiando los valores adecuados.

/etc/ldap/ldap.conf
BASE dc=salud,dc=gob,dc=sv 
URI ldap:192.168.192.12:389 
BINDDN cn=admin,dc=salud,dc=gob,dc=sv 

Compruebe con una búsqueda con ldapsearch

ldapsearch -x -LLL 

La respuesta debe ser del como la que sigue, sin el atributo userPassword

dn: dc=salud,dc=gob,dc=sv 
objectClass: top 
objectClass: dcObject 
objectClass: organization 
o: Ministerio de Salud dc: salud 

dn: cn=admin,dc=salud,dc=gob,dc=sv 
objectClass: simpleSecurityObject 
objectClass: organizationalRole 
cn: admin description: LDAP administrator 

dn: cn=mafi,dc=salud,dc=gob,dc=sv 
objectClass: simpleSecurityObject 
objectClass: organizationalRole 
cn: mafi description: LDAP lectura 

Samba

Instalar samba

 aptitude install samba{,-tools} smbclient  

No aparece más un asistente de configuración. Nada cambia si se invoca.

Detener el servicio. No lo vuelva a levantar hasta que se indique, después de la sección sobre smbldap-tools

service samba stop  

Borrar los datos de configuración que SAMBA hizo al inicio. Sí, los que acaba de crear

 rm /var/lib/samba/*{tdb,dat}  

Posiblemente aparezca el siguiente mensaje de error. No es nada de que preocuparse.

rm: no se puede borrar «/var/lib/samba/*dat»: No existe el fichero o el directorio 

Configurar samba

El siguiente archivo de configuración pareciera tener todas las opciones necesarias para el uso que se ha descrito en la presentación de este trabajo. Será bueno que mantenga en alguna medida los comentarios para referencias futuras sobre cambios que quieran hacerse.

Los atributos que deben modificarse son:

  • workgroup = dominio.com
  • netbios name= <hostname>
  • passdb backend: = <ip del servidor LDAP>
  • ldap admin dn: = cn=admin,dc=<dominio>,dc=gob,dc=sv
  • ldap suffix: = dc=<dominio>,dc=gob,dc=sv
/etc/samba/smb.conf
[global] 
    server role = classic primary domain controller
    loglevel = 2 
    workgroup = salud.gob.sv 
    netbios name = pdc
    server string = %h server - %L 
    wins support = yes 
    name resolve order = lmhosts host wins bcast 
    dns proxy = no 

    socket options = TCP_NODELAY 
    smb ports = 139 
    log file = /var/log/samba/log.%m 
    max log size = 1000 
    syslog = 2 
    log level = 0 
    panic action = /usr/share/samba/panic-action %d 

    security = user 
    enable privileges = yes 
    passdb backend = ldapsam:ldap://pdc.salud.gob.sv
    ldap admin dn = cn=admin,dc=salud,dc=gob,dc=sv 
    ldap suffix = dc=salud,dc=gob,dc=sv 
    ldap user suffix = ou=Users 
    ldap machine suffix = ou=Computers 
    ldap passwd sync = Yes 
    ldap delete dn = No 
    ldap ssl = no
    ldap replication sleep = 1000 
    ldap timeout = 5 
    ldap delete dn = No 
    obey pam restrictions = yes 
    encrypt passwords = true 
    pam password change = yes 
    add user script = /usr/sbin/smbldap-useradd -a -m "%u" 
    add group script = /usr/usr/sbin/smbldap-groupadd -p "%g" 
    add machine script = /usr/sbin/smbldap-useradd -W "%u" 
    add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g" 
    set primary group script = /usr/sbin/smbldap-usermod -g "%g" "%u" 
    delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g" 

    ldapsam:trusted = yes
    ldapsam:editposix = yes
     
    domain logons = yes 
    domain master = yes 
    local master = yes 
    os level = 65 
    logon path = 
    logon drive = H: 
    logon home = 
    logon script = 
    client ntlmv2 auth = yes 
    wins proxy = no 
    lanman auth = yes 
    ntlm auth = yes 

    load printers = no 
    printing = bsd 
    printcap name = /dev/null 
    disable spoolss = yes 
[homes] 
    comment = Home Directories 
    browseable = no 
    read only = no 
    writeable = yes 
    create mask = 0700 
    directory mask = 0700 
    valid users = %S 
    veto files =/*.mp3/*.mp4/*.mpg/*.avi 

[netlogon] 
    comment = Network Logon Service 
    path = /var/lib/samba/netlogon 
    guest ok = yes 
    read only = yes 
    write list = root

Creamos el directorio para netlogon, sobre todo, por cualquier eventualidad en el futuro

mkdir /var/lib/samba/netlogon  

Normalizas permisos:

chown -R root:sambashare /var/lib/samba/netlogon/ 

Revisamos el archivo de configuración: testparm La salida debe ser similar a esto:

Load smb config files from /etc/samba/smb.conf 
rlimit_max: rlimit_max (1024) below minimum Windows limit (16384) 
Processing section "[homes]" 
Processing section "[netlogon]" 
Loaded services file OK. 
Server role: ROLE_DOMAIN_PDC 
Press enter to see a dump of your service definitions 

Veremos por el error rlimit_max: rlimit_max (1024) below minimum Windows limit (16384) hacia el final de este documento.

Agregar el password del administrador del árbol ldap

smbpasswd -W 

SMBLDAP-TOOLS

Se espera que el servidor SAMBA no haya sido iniciado desde la sección anterior.

Instalar smbldap-tools.

aptitude install smbldap-tools 

Configuración de SMBLDAP-TOOLS

Conseguir los archivos de configuración necesarios.

zcat /usr/share/doc/smbldap-tools/examples/smbldap.conf.gz >/etc/smbldap-tools/smbldap.conf  
cp /usr/share/doc/smbldap-tools/examples/smbldap_bind.conf /etc/smbldap-tools/ 

Adecuar los permisos

chown root:openldap /etc/smbldap-tools/smbldap* 

Cambiaremos el archivo /etc/smbldap-tools/smbldap_bind.conf, para que ambas los valores de autenticación se correspondan con los nuestros.

slaveDN="cn=admin,dc=salud,dc=gob,dc=sv" 
slavePw="{password-ldap-root}" 
masterDN="cn=lector,dc=salud,dc=gob,dc=sv" 
masterPw="{password-ldap-lector}" 

Verifique que se ha desactivado TLS y SSL para la comunicación con el servidor LDAP. Luego, revise que se han desactivado las opciones de usuarios móviles. Se configura el SID de nuestro servidor Samba anterior. En smbldap.conf se deben configurar todas las opciones que entendamos con nuestro smb.conf en mano. Toda saldra bien.

/etc/smbldap-tools/smbldap.conf
##############################################################################
#
# General Configuration
#
##############################################################################

SID="S-1-5-21-2434350264-4182727829-1472804664"
sambaDomain="SALUD.GOB.SV"

##############################################################################
#
# LDAP Configuration
#
##############################################################################

slaveLDAP="ldap://pdc.salud.gob.sv/"

masterLDAP="ldap://pdc.salud.gob.sv/"

ldapTLS="0"
verify="require"
cafile="/etc/smbldap-tools/ca.pem"
clientcert="/etc/smbldap-tools/smbldap-tools.example.com.pem"
clientkey="/etc/smbldap-tools/smbldap-tools.example.com.key"

suffix="dc=salud,dc=gob,dc=sv"
usersdn="ou=Users,${suffix}"
computersdn="ou=Computers,${suffix}"
groupsdn="ou=Groups,${suffix}"
idmapdn="ou=Idmap,${suffix}"
sambaUnixIdPooldn="sambaDomainName=${sambaDomain},${suffix}"
scope="sub"

password_hash="SSHA"
password_crypt_salt_format="%s"

##############################################################################
# 
# Unix Accounts Configuration
# 
##############################################################################

userLoginShell="/bin/false"
userHome="/home/%U"
userHomeDirectoryMode="764"
userGecos="System User"
defaultUserGid="513"
defaultComputerGid="515"
skeletonDir="/etc/skel"
shadowAccount="1"
defaultMaxPasswordAge="99999"

##############################################################################
#
# SAMBA Configuration
#
##############################################################################

userSmbHome="\\PDC\%U"
userProfile=""
userHomeDrive="H:"
userScript="logon.bat"
mailDomain="salud.gob.sv"

##############################################################################
#
# SMBLDAP-TOOLS Configuration (default are ok for a RedHat)
#
##############################################################################

with_smbpasswd="0"
smbpasswd="/usr/bin/smbpasswd"
with_slappasswd="0"
slappasswd="/usr/sbin/slappasswd"

Luego, corres el archivo que lo demuestra todo

smbldap-populate  

Inicias el servidor samba

service samba start  

Seteas el valor del SID para que coincida con el que esta en el archivo de configuración de smbldap.conf

net setlocalsid S-1-5-21-2434350264-4182727829-1472804664

Configuraciones especiales en el servidor

Editar el archivo /etc/sysctl.conf

Agregar, si es que no lo esta, la línea

net.ipv6.bindv6only = 1 

Si no le es posible reiniciar el servidor por esta vez, configure sobre la marcha

sysctl -p 

Agregue la siguiente línea al archivo /etc/security/limits.conf, para aumentar el número de ficheros que el usuario root (quién administra los procesos de samba) puede mantener abiertos.

root             -       nofile          16384

Si no le es posible reiniciar el servidor esta vez, configure sobre la marcha

ulimit -n 16384

Módulos para NSSSWITCH y PAM

Se instala el paquetes libnss-ldap. El resolverás las dependencias necesarias

aptitude install  libnss-ldap libpam-ldap 

A continuación, aparecen unos asistentes de configuración que pueden resultar engorrosos para la mayoría, amén del hecho que es fácil equivocarse dentro de ellos. Se recomienda que los ignore y configure los archivos de la siguiente manera:

/etc/libnss-ldap.conf
base dc=salud,dc=gob,dc=sv
uri ldap://10.20.20.10
ldap_version 3
binddn cn=lector,dc=salud,dc=gob,dc=sv
bindpw {contraseña-lector-ldap}
rootbinddn cn=admin,dc=salud,dc=gob,dc=sv
bind_policy soft
nss_base_passwd		ou=Users,dc=salud,dc=gob,dc=sv?one
nss_base_shadow		ou=Users,dc=salud,dc=gob,dc=sv?one
nss_base_group		ou=Groups,dc=salud,dc=gob,dc=sv?one
/etc/pam_ldap.conf
base dc=salud,dc=gob,dc=sv
uri ldap://10.20.20.10
ldap_version 3
binddn cn=lector,dc=salud,dc=gob,dc=sv
bindpw {contraseña-lector-ldap}
rootbinddn cn=admin,dc=salud,dc=gob,dc=sv
bind_policy soft
pam_password crypt
nss_base_passwd        ou=Users,dc=salud,dc=gob,dc=sv?one
nss_base_shadow        ou=Users,dc=salud,dc=gob,dc=sv?one
nss_base_group         ou=Groups,dc=salud,dc=gob,dc=sv?one

El archivo /etc/libnss-ldap.secret se crea con una redirección de echo:

echo "{contraseña-administrador-ldap}" > /etc/libnss-ldap.secret 
/etc/libnss-ldap.secret
{contraseña-administrador-ldap}

El archivo /etc/pam_ldap.secret se crea con una redirección de echo:

echo "{contraseña-administrador-ldap}" > /etc/pam_ldap.secret 
/etc/pam_ldap.secret
{contraseña-administrador-ldap}

Configuraremos ahora el archivo /etc/nsswitch.conf, modificaremos las siguiente líneas para que queden como tal:

/etc/nsswitch.conf
passwd: compat ldap 
group:  compat ldap 
shadow: compat ldap 

hosts:  files wins dns 

Empiezan las pruebas: Se obtiene la lista de usuarios del sistema (NSSWITCH)

getent passwd 

Luego, ejecutar y deseleccionar la opcion LDAP Authentication

pam-auth-update 

Reinicias el servicio nscd

service nscd restart  

Y verificar con un usuario al azar que sea un verdadero usuario del sistema. (Pero el truco anterior le impedirá loguearse en el servidor)

id lramirez 

Que debe devolver algo como esto

uid=3058(lramirez) gid=1020(HNSensunte) grupos=1020(HNSensunte) 

El siguiente comando debe devolver un estado del mapeo de grupos Unix-Samba

net groupmap list 

El resultado debe dar algo como esto, tome en cuenta que esta es una salida recortada

Domain Admins (S-1-5-21-371878337-141820978-2368272707-512) -> Administradores 
rorien (S-1-5-21-371878337-141820978-2368272707-3013) ->  Reg_Oriental 
... 
Domain Admins (S-1-5-21-371878337-141820978-2368272707-512) ->  Domain Admins 
Domain Users (S-1-5-21-371878337-141820978-2368272707-513) ->  Domain Users 

Respaldo – restauración del árbol LDAP

Respaldo

Se debe obtener un respaldo por rama del servidor en cuestión. Con esto bastará.

ldapsearch -x -D cn=admin,dc=salud,dc=gob,dc=sv -w {password-ldap-root} -b ou=Users,dc=salud,dc=gob,dc=sv>personas.ldif 
ldapsearch -x -D cn=admin,dc=salud,dc=gob,dc=sv -w {password-ldap-root} -b ou=Computers,dc=salud,dc=gob,dc=sv>machines.ldif 
ldapsearch -x -D cn=admin,dc=salud,dc=gob,dc=sv -w {password-ldap-root} -b ou=Groups,dc=salud,dc=gob,dc=sv>group.ldif 

Y si se hace desde la terminal de un equipo externo agregas el parametro -H

 ldapsearch -x -H ldap://192.168.10.14:389  -D cn=admin,dc=salud,dc=gob,dc=sv -w contrasenia -b ou=people,dc=salud,dc=gob,dc=sv>personas.ldif 

Como puedas, borra la entrada de nobody y root del archivo ldiff, porque ya existen en esa rama. Borra también la entrada en la rama.

Cuando esto se haya hecho, puede levantarse el sevicio samba

service samba restart 

Si usted migra desde otro servidor, revise que los atributos que cada objeto tenga se corresponda con los disponibles en los esquemas agregados. Ese fue un trabajo especialmente interesante en nuestra organización. Y sí, prácticamente es a prueba y error.

Recuperación

Para volverse al lugar de donde vinieron, solo debe correrse lo siguiente con cada archivo de subarbol que se haya recuperado . Debe usarse el usuario administrador.

ldapadd -D cn=admin,dc=salud,dc=gob,dc=sv -w {password-ldap} -f personas.ldif 
ldapadd -D cn=admin,dc=salud,dc=gob,dc=sv -w {password-ldap} -f machines.ldif 
ldapadd -D cn=admin,dc=salud,dc=gob,dc=sv -w {password-ldap} -f group.ldif 

Cuando se recuperen, se debe revisar que samba los pueda leer.

pdbedit -L

Primeros pasos en la administración

El usuario más normal del mundo puede crearse con el siguiente comando, el cual parece ser bastante explicativo sobre el uso de cada opción propuesta. Mencionar que -m le creará al usuario un directorio en home, algo que en realidad muy pocos usuarios tendrán el privilegio de tener. El uso más común que tendrá el usuario será el siguiente:

smbldap-useradd -a -P -N "Alexander" -S "Figueroa" -c "Alexander Figueroa" -g "Domain Admins" -d "" admin01 

Se recomienda darle permisos de administrador en el dominio

net -S 10.10.20.49 rpc rights grant 'salud.gob.sv\Domain Admins' SeTakeOwnershipPrivilege SeAddUsersPrivilege SeMachineAccountPrivilege 

Fuentes

Herramientas personales
Espacios de nombres

Variantes
Acciones
Navegación
Herramientas