Symptôme
Lors d'une installation ITDS sur un serveur Linux CentOS 6.3, avec une base DB2 9.5 FP3, la commande idscfgdb tombe en erreur. :
/opt/ibm/ldap/V6.2/sbin/idscfgdb -I idsldap -a idsldap -w MotDePasse -t idsldap -l /product/db2data You have chosen to perform the following actions: GLPCDB023I Database 'idsldap' will be configured. GLPCDB024I Database 'idsldap' will be created at '/product/db2data' GLPCDB035I Adding database 'idsldap' to directory server instance: 'idsldap'. GLPCTL017I Cataloging database instance node: 'idsldap'. GLPCTL018I Cataloged database instance node: 'idsldap'. GLPCTL008I Starting database manager for database instance: 'idsldap'. GLPCTL009I Started database manager for database instance: 'idsldap'. GLPCTL026I Creating database: 'idsldap'. GLPCTL030E The DB2 administrator ID or password specified is not valid. GLPCTL028E Failed to create database: 'idsldap'. The failure might have occurred because the system was not set up correctly before using the tool.
Diagnostic de l'erreur
Dans le fichier db2dump/db2diag.log :
FUNCTION: DB2 UDB, bsu security, sqlexLogPluginMessage, probe:20 DATA #1 : String with size, 66 bytes Password validation for user idsldap failed with rc = -2146500504
Chose curieuse, on arrive bien à se connecter au niveau de l'OS, avec le bon mot de passe.
Cause
Après plusieurs recherches, il s'avère que ceci est dû à un problème d'algorithme d'encryption du mot de passe, incompatible avec la version DB2 9.5 FP3 (cf . http://www-01.ibm.com/support/docview.wss?uid=swg21470246). Cette version 9.5 FP3 accepte les algorithmes suivants :
- Crypt
- MD5
- SHA1
Résolution
Pour voir l'algorithme utilisé actuellement (sur une distribution RedHat ou CentOS) :
authconfig --test | grep hashing password hashing algorithm is sha512
Effectivement, depuis la version 6.x de RedHat, l'algorithme a été passé en SHA512, alors qu'il était auparavant en MD5 par défaut.
On peut modifier cet algorithme, avec la commande suivante, pour le remettre en md5:
authconfig --passalgo=md5 --update
On peut ensuite changer le mot de passe du compte, et vérifier son mot de passe dans le fichier /etc/shadow
:
idsldap:$1$/vnYHAO0$TRDsnUiwtXCBRc4uvDbY/1:15950:0:99999:7:::
Le premier élément du mot de passe donne le type de cryptage utilisé :
- $1$: MD5.
- $5$: SHA-256.
- $6$: SHA-512.
- $2a$: blowfish.
- Sinon, c'est du DES.
Dans le cas initial (SHA512), la ligne correspondante dans le fichier était la suivante :
idsldap:$6$BISB5e9r$1PELkpAv9KnJalG0DNbYsI23kK2r9Z4og51G8X/6mGSJGYVxrq.hFLOBgWadsa/iVPssTtBj.AuzdAmonIXAi0:15950:0:99999:7:::
Attention : ceci modifie l'algorithme, en baissant le niveau d'encryption. Une autre solution est de passer sur DB2 FixPack4, qui gère d'autres types d'algorithmes :
- Crypt
- MD5
- SHA1
- SHA256
- SHA512
- Blowfish