sábado, 2 de marzo de 2013

Usando ldapsearch para solucionar problemas de configuración LDAP en IBM WebSphere Application Server



Hay muchas cosas que pueden impedir la configuración de LDAP funcione correctamente.
  • El DN (Distinguished Name) no esta en la ACL (Lista de control de Acceso) y por lo tanto no puede realizar ciertas consultas LDAP.
  • DN fue bloqueado  debido a demasiados intentos de conexión fallidos.
  • La contraseña del DN puede haber sido cambiada.
  • El servidor LDAP no puede permitir consultas anónimas.
  • El filtro predeterminado en el servidor de aplicaciones pueden no ajustarse a la configuración de los clientes. (Es decir, no hay definido objectclass=someObjectClass).
  • El Firewall no permite la comunicación con el puerto
  • ID del administrador LDAP que se utiliza para la identificación del servidor, pero el ID del administrador no se define como un usuario normal


Por estos y muchos otros problemas de configuración posibles la mejor forma de depurar rápidamente el problema es utilizar ldapsearch.
ldapsearch nos permite ver lo que está  devolvinedo la consulta, normalmente oculto por el Application Server.

La idea es utilizar las mismas opciones de configuración, en la línea de comandos, como se ha definido en


consola WAS > Security > user Registries > LDAP settings


Security Server ID
Nombre corto del identificador que consulta el LDAP.
Security Server Password
Password del ID en el LDAP
Directory Type
Lista predefinida de servidores LDAP soportados.
Host
Nombre de host del servidor LDAP. Puede ser el nombre corto, largo nombre o la dirección IP.
Port
389 es el puerto por defecto del servidor LDAP
Base Distinguished Name
(BaseDN)
Localización inicial de la consulta LDAP
Bind Distinguished Name
(BindDN)
Fully qualified DN que tiene la autoridad de realizar “bind” en el servidor LDAP y realizar consultas. Algunos servidores LDAP permiten consultas anónimas
Bind Password
Password de bind del DN’s


Propiedades avanzadas de LDAP

User Filter
String usado para consultar al servidor LDAP.
User ID Map
Define que será mostrado en WebSphere del resultado de la consulta.



ldapsearch –h <Host> -p <Puerto> -b “<BaseDN>” –D <BindDN> -w <Bind Password> “<User Filter>”


Ejemplos:

ldapsearch –h mariano.ldap.server -p 389 -b "o=ibm,c=us" uid=test
cn=test,o=ibm,c=us
sn=test
objectclass=top
objectclass=organizationalPerson
objectclass=ePerson
objectclass=person
objectclass=inetOrgPerson
uid=test
cn=test



ldapsearch -h mariano.ldap.server -p 389 -b "o=ibm,c=us" "(&(uid=test)(objectclass=ePerson))"
cn=test,o=ibm,c=us
sn=test
objectclass=top
objectclass=organizationalPerson
objectclass=ePerson
objectclass=person
objectclass=inetOrgPerson
uid=test
cn=test





La consulta  de ldapsearch podría causar una excepción para el servidor de aplicaciones:

A continuación fallaría en Application Server porque el filtro de búsqueda está buscando un objectclass de "XYZ", pero no hay objectclass  "XYZ" definido LDAP. Esto da como resultado una cadena de retorno vacío.




ldapsearch -h mariano.ldap.server -p 389 -b "o=ibm,c=us" "(&(uid=test)(objectclass=XYZ))"



La siguiente busqueda fallaría en el Application Server porque 2 DN se devuelven en lugar de 1. Application Server sólo se autenticará utilizando un único DN. Si la consulta es uid=test en lugar de cn=test, entonces sólo un DN habría sido devuelto.




ldapsearch -h mariano.ldap.server -p 389 -b "o=ibm,c=us" "(&(cn=test)(objectclass=ePerson))"
cn=test,o=ibm,c=us
sn=test
objectclass=top
objectclass=organizationalPerson
objectclass=ePerson
objectclass=person
objectclass=inetOrgPerson
uid=test
cn=test

cn=test,ou=Larry's Group,ou=Austin,o=ibm,c=us
sn=User
objectclass=top
objectclass=organizationalPerson
objectclass=ePerson
objectclass=person
objectclass=inetOrgPerson
cn=Test




 Troubleshooting basico

  

Referencias de error  SECJ0369E y SECJ0055E se pueden generar en el SystemOut.log. Hay, sin embargo, diversas causas de raíz que se pueden derivar de los valores que siguen a la descripción inicial. Un ejemplo se muestra a continuación.

[date/time] 0000000a LdapRegistryI A SECJ0419I: The user registry is currently connected to the LDAP server ldap://<hostname>:389.
[date/time] 0000000a LTPAServerObj E SECJ0369E: Authentication failed when using LTPA. The exception is [LDAP: error code 49 - 80090308: LdapErr: DSID-0C090334, comment: AcceptSecurityContext error, data 775, vece ].
[date/time] 0000000a distContextMa E SECJ0270E: Failed to get actual credentials. The exception is javax.naming.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C090334, comment: AcceptSecurityContext error, data 775, vece ]
at com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapCtx.java:3005)




Errores comunes de bind en Active Directory LDAP



--> 80090308: LdapErr: DSID-0C09030B, comment: AcceptSecurityContext error, data 525, v893
HEX: 0x525 - user not found
DEC: 1317 - ERROR_NO_SUCH_USER
(The specified account does not exist.)
NOTA: lo devuelve cuando el usuario no existe

80090308: LdapErr: DSID-0C09030B, comment: AcceptSecurityContext error, data 52e, v893
HEX: 0x52e - invalid credentials
DEC: 1326 - ERROR_LOGON_FAILURE
(Logon failure: unknown user name or bad password.)
NOTA: Lo devuelve cuando el usuario es valido, pero las credenciales/password es invalido. 


80090308: LdapErr: DSID-0C09030B, comment: AcceptSecurityContext error, data 530, v893
HEX: 0x530 - not permitted to logon at this time
DEC: 1328 - ERROR_INVALID_LOGON_HOURS
(Logon failure: account logon time restriction violation.)
NOTA: Lo devuelve solo cuando se presenta con un usuario y credenciales validas.



80090308: LdapErr: DSID-0C09030B, comment: AcceptSecurityContext error, data 531, v893
HEX: 0x531 - not permitted to logon from this workstation
DEC: 1329 - ERROR_INVALID_WORKSTATION
(Logon failure: user not allowed to log on to this computer.)
LDAP[userWorkstations: <multivalued list of workstation names>]
NOTA:
Lo devuelve solo cuando se presenta con un usuario y credenciales validas.

80090308: LdapErr: DSID-0C09030B, comment: AcceptSecurityContext error, data 532, v893
HEX: 0x532 - password expired
DEC: 1330 - ERROR_PASSWORD_EXPIRED
(Logon failure: the specified account password has expired.)
LDAP[userAccountControl: <bitmask=0x00800000>] - PASSWORDEXPIRED
NOTA:
Lo devuelve solo cuando se presenta con un usuario y credenciales validas.

80090308: LdapErr: DSID-0C09030B, comment: AcceptSecurityContext error, data 533, v893
HEX: 0x533 - account disabled
DEC: 1331 - ERROR_ACCOUNT_DISABLED
(Logon failure: account currently disabled.)
LDAP[userAccountControl: <bitmask=0x00000002>] - ACCOUNTDISABLE
NOTE: Returns only when presented with valid username and password/credential.

80090308: LdapErr: DSID-0C09030B, comment: AcceptSecurityContext error, data 701, v893
HEX: 0x701 - account expired
DEC: 1793 - ERROR_ACCOUNT_EXPIRED
(The user's account has expired.)
LDAP[accountExpires: <value of -1, 0, or extemely large value indicates account will not expire>] - ACCOUNTEXPIRED
NOTE:
Lo devuelve solo cuando se presenta con un usuario y credenciales validas.
 
80090308: LdapErr: DSID-0C09030B, comment: AcceptSecurityContext error, data 773, v893
HEX: 0x773 - user must reset password
DEC: 1907 - ERROR_PASSWORD_MUST_CHANGE
(The user's password must be changed before logging on the first time.)
LDAP[pwdLastSet: <value of 0 indicates admin-required password change>] - MUST_CHANGE_PASSWD
NOTE:
Lo devuelve solo cuando se presenta con un usuario y credenciales validas.
 
80090308: LdapErr: DSID-0C09030B, comment: AcceptSecurityContext error, data 775, v893
HEX: 0x775 - account locked out
DEC
: 1909 - ERROR_ACCOUNT_LOCKED_OUT (The referenced account is currently locked out and may not be logged on to.)
LDAP[userAccountControl: <bitmask=0x00000010>] - LOCKOUT
NOTE: Lo devuelve solo si presentas password invalidos.