Admins/AutenticacionAD

De Wiki Expresso V3
Ir para: navegação, pesquisa

Conteúdo

Sincronização AD Ldap

Autenticación Pass-Trough con SASL

Consideraciones técnicas

La autenticación Pass-Trough Es un mecanismo usado por LDAP para delegar operaciones (BIND) a otros backends. O sea, que cuando alguna aplicación quiere hacer un bind al LDAP, el daemon verifique la contraseña en otro lugar (un Active Directory por ejemplo) y responde acordemente.

Pass-Trough es transparente para los clientes LDAP ya que ellos siguen mandando información estándar para el directorio LDAP y éste se encarga de delegar la autenticación y proveer una respuesta.

Lo que haremos en este caso es usar los usuarios del openldap que usa expresso, pero a través de Pass-Trough delegaremos el campo userPassword de modo que utilice el mismo password que el usuario en active directory.

La autenticación funcionará así:

  1. OpenLDAP recibirá una operación BIND con los parametros DN1 and PWD1
  2. OpenLDAP busca localmente el usuario DN1 y lee el campo userPassword correspondiente
  3. El campo userPassword de DN1 tiene una llamada SASL. OpenLDAP hace una autenticación mediante SASL con las credenciales “user@domain” y PWD1
  4. El daemon de autenticación SASL usa las credenciales para buscar en el backend (En este caso, Active Directory) y busca un DN2 igual a DN1
  5. SASL realiza un BIND usando DN2 y PWD1
  6. El backend administra la operación BIND y devuelve una respuesta a SASL
  7. SASL devuelve una respuesta a OpenLDAP (si/no)
  8. OpenLDAP le da la respuesta al cliente LDAP completando la autenticación Pass-Trough.
Diagrama de autenticación de Expresso en Active Directory vía SASL

Preparación

(Si se está usando una versión compilada desde fuentes de OpenLdap:, las siguientes opciones deben estar habilitadas). En caso de que sea un paquete de la distribución, es importante verificar si se compiló con estas opciones. En caso contrario no va a funcionar el pass-through.

 ./configure --enable-spasswd --with-cyrus-sasl

En el caso de que se esté utilizando Debian 7.X no es necesario compilar:

  apt-get install slapd sasl2-bin

Tener estas opciones habilitadas, permitirán usar la siguiente sintaxis para el atributo userPassword:

 userPassword: {SASL}user@domain

Este cambio lo puede insertar utilizando el comando ldapmodify(1). Nota: Al verificar el campo consultando la base con ldapsearch este campo se mostrará cifrado, esto es normal aunque debe verificar que el ldapmodify dio OK insertando la modificación.

Luego hay que instalar el daemon saslauthd, que está disponible en los repositorios.


Valores de ejemplo:

 Server address: ldap://ad.ejemplo.com
 Bind DN: CN=Administrador,CN=Usuarios,DC=ejemplo,DC=com
 Bind Password: ADpassword
 Usuarios branch: CN=UsuariosdeDominio,DC=ejemplo,DC=com

Para saber si estamos seteando bien los valores, podemos hacer la siguiente prueba

 ldapsearch -x -H ldap://ad.ejemplo.com -D CN=Administrador,CN=Usuarios,DC=ejemplo,DC=com -w ADpassword -b CN=UsuariosdeDominio,DC=ejemplo,DC=com

Instalar saslauthd:

Instalar saslauthd:

 apt-get install sasl2-bin

Configurar saslauthd:

Primero checkeamos

 saslauthd -v

Dentro de los mecanismos válidos de autenticación, debería estar ldap.

Luego activamos LDAP como un mecanismo SASL:

vi /etc/default/saslauthd

 START=yes
 DESC=”SASL Authentication Daemon”
 NAME=”saslauthd”
 MECHANISM=”ldap”
 THREADS=5
 OPTIONS=”-c -t 60 -m /var/run/saslauthd”

Luego:

vi /etc/saslauthd.conf

 ldap_servers: ldap://ad.ejemplo.com
 ldap_search_base: CN=UsuariosdeDominio,DC=ejemplo,DC=com
 ldap_timeout: 10
 ldap_filter: sAMAccountName=%U
 ldap_bind_dn: CN=Administrador,CN=Usuarios,DC=ejemplo,DC=com
 ldap_password: ADpassword
 ldap_deref: never
 ldap_restart: yes
 ldap_scope: sub
 ldap_use_sasl: no
 ldap_start_tls: no
 ldap_version: 3
 ldap_auth_method: bind

Donde:

 ldap_servers: es la URI del AD
 ldap_bind_dn: es el DN de la cuenta con permisos para explorar el directorio
 ldap_password: Password para la conexión
 ldap_search_base: Base de búsqueda
 ldap_filter: Filtro para la búsqueda
 ldap_scope: Campo de búsqueda.

Para los parámetros ldap_search_base y ldap_filter, se pueden usar las siguientes variables

  •  %u: user@domain
  •  %U: user
  •  %d: domain

Reiniciar saslauthd:

 service saslauthd restart


Communication entre OpenLDAP y saslauthd

La comunicación entre ambos daemons se realiza a trav{es de un socket mutex, que se configura del siguiente modo:

vi /usr/lib/sasl2/slapd.conf

 pwcheck_method: saslauthd
 saslauthd_path: /var/run/saslauthd/mux

Agregar el usuario de OpenLDAP al grupo sasl:

 usermod -a -G sasl openldap


Editar la configuración de OpenLDAP

El archivo /etc/ldap/slapd.conf debe tener esta configuración para establecer los parámetros SASL:

 sasl-host       localhost
 sasl-secprops   none

Reiniciar OpenLDAP:

 service slapd restart

Detalles finales

Autenticación plana

Expresso trabaja con autenticación plana, por lo que antes de seguir, debemos asegurarnos de que LDAP acepte autenticación plana de SASL

 ldapsearch -x -b "" -s base supportedSASLMechanisms

Deberíamos tener un resultado así:

 supportedSASLMechanisms: PLAIN

Luego, Para probar que SASL funcione, necesitamos crear un usuario en Active Directory, por ejemplo:

Usuario: usuariotest Password: passtest

Creación de Usuarios de Servicio

Queda crear en active directory dos usuarios llamados expresso-admin y cyrus-admin ( con los mismos password que los que están en la máquina de expresso.


Probar saslauthd

Luego probamos que sasl funcione ejecutando el siguiente comando desde la máquina de expresso:

 testsaslauthd -u usuariotest -p passtest

Si esto resulta bien, Crear una cuenta en ldap, por ejemplo:

 dn: uid=usuariotest,ou=Usuarios,dc=ejemplo,dc=com
 objectClass: inetOrgPerson
 objectClass: organizationalPerson
 objectClass: person
 objectClass: top
 uid: coudot
 cn: Usuario TEST
 sn: TEST
 userPassword: {SASL}usuariotest@ejemplo.com

Ahora se debería poder hacer BIND desde ldap:

 ldapsearch -x -H ldap://ldap.ejemplo.com -b dc=ejemplo,dc=com -D uid=coudot,ou=Usuarios,dc=ejemplo,dc=com -w password

Este último comando debe tener éxito, expresso realiza un BIND para autenticar al usuario durante el login, si un bind simple al LDAP con ldapsearch no funciona, tampoco funcionará en expresso.

Finalmente, probar autenticar desde expresso.

Ferramentas pessoais
Espaços nominais

Variantes
Ações
Navegação
Ferramentas