2012. május 21., hétfő

Elévült jelszó LDAP-hitelesítéskor

Mi a teendő, ha ilyet látunk, amikor a kliensünkről LDAP-hitelesítéssel óhajtunk bejelentkezni:
You are required to change your password immediately (password aged)
Enter login(LDAP) password:
(You can read this post in English too)

Eccerű! Változtassunk jelszót. Fog is menni (főleg, ha a múltkor megoldottuk), de legközelebb megint ott az üzenet! 'Zanyád.
Első körben reprodukáljuk a hibát. Talán még emléxünk, hogy jó múltkor megalkottuk a bela nevű felhasználót. Béla tehát van, de nincs shadow accountja, árnyékfiókja. Illetve van, hiszen a
ldapsearch -D cn=admin,dc=itthon,dc=cucc -b dc=itthon,dc=cucc -w titok -LLL 'uid=bela'
parancs kimenete szerint bela egyik objektumosztálya a shadowAccount. Azonban a shadow-jellemzőket nem adtuk meg. (Ja, a -H ldapi:/// azért nem kell, mert az /etc/ldap/ldap.conf-ban kitöltöttük az URI értékét.)
Hozzuk létre a bela_shadow_be.ldif fájlt:
dn: uid=bela,ou=People,dc=itthon,dc=cucc
changetype: modify
add: shadowLastChange
shadowLastChange: 15461
- 
add: shadowMax
shadowMax: 45
Ha már volt shadowLastChange (mert változtattunk jelszót), akkor annak fényében módosítsuk ezt a fájlt. Ha kész, akkor:
ldapmodify -D cn=admin,dc=itthon,dc=cucc -w titok -f bela_shadow_be.ldif
Ha eddig nem jelentkezett a hibaüzenet, mostantól fog. Az ok az, hogy a shadowMax értékét nem tudja kiolvasni a kliens. Eddig se tudta, de eddig nem volt ilyen attribútum.
Ha biztosak akarunk lenni a fenti állítás igazában, akkor készítsük el a bela_shadow_ki.ldif fájlt:
dn: uid=bela,ou=People,dc=itthon,dc=cucc
changetype: modify
delete: shadowLastChange
-
delete: shadowMax
Majd érvényesítsük a változtatást:
ldapmodify -D cn=admin,dc=itthon,dc=cucc -w titok -f bela_shadow_ki.ldif
És Béla ismét baj nélkül képes bejelentkezni.
Na, akkor térjünk vissza oda, hogy Bélával baj van, majd készítsük el a legújabb ACL-fájlt (mondjuk legyen acl.ldif):
dn: olcDatabase={1}hdb,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to attrs=userPassword by self write by anonymous auth by dn="cn=admin,dc=itthon,dc=cucc" write by * none
olcAccess: {1}to attrs=shadowLastChange,shadowMax by self write by dn="cn=admin,dc=itthon,dc=cucc" write by * read
olcAccess: {2}to dn.base="" by * read
olcAccess: {3}to * by self write by dn="cn=admin,dc=itthon,dc=cucc" write by * read
Ha kész, akkor:
sudo ldapmodify -Y EXTERNAL -f acl.ldif
És baj nélkül be tudunk jelentkezni, semmi "password aged".
A probléma látványossá tehető a különféle ACL-ek mellett kiadott getent shadow parancsokkal. Az épp aktuális ACL lekérdezésére pedig jól jöhet a
sudo ldapsearch -Y EXTERNAL -b olcDatabase={1}hdb,cn=config
parancs.

Nincsenek megjegyzések: