{MEGOLDVA} PAM + LDAP

Fórumok

Üdv!

PAM + LDAP autentikációt akarok csinálni. A http://wiki.debian.org/LDAP/PAM oldalon írtak alapján rém egyszerűen meg is lehet csinálni. A gond az, hogy nem működik, mert persze nekem úgy nem jó, ahogy le van írva, mivel az ldap adatbázis már tartalmaz accountokat a levelezéshez, és ezeket az adatokat akarom használni, nem külön usereket létrehozni. Így próbálom:

uid=fisher,dc=customer.hu,ou=domains,dc=company,dc=hu

Azaz a customer.hu alatt lévő userrel akarok bejelentkezni, ám "pam_ldap: error trying to bind as user ... (Invalid credentials)" üzenetet kapok a fenti adatokkal. Az ACL:

olcSuffix: dc=company,dc=hu
olcAccess: {0}to attrs=userPassword,shadowLastChange
 by self write
 by anonymous auth
 by dn="cn=admin,dc=company,dc=hu" write
 by dn="uid=dovecot,dc=company,dc=hu" read
 by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by self write
 by dn="cn=admin,dc=company,dc=hu" read
 by * read
 by dn="uid=exim,dc=company,dc=hu" read
 by dn="uid=dovecot,dc=company,dc=hu" read 
 by anonymous none

alapján (by anonymous auth,by * read) elvileg tudna bindelni is az user. De nem tud. Nyilván valamit rosszul csinálok, de mit?

Ja igen, próbáltam az ldapsearch-al is bindelni, azzal se ment, alighanem valami alapvető dolgot nézek be.

Update: a /etc/pam_ldap.conf -ban a base dc=customer.hu,ou=domains,dc=company,dc=hu -ra van állítva (ezért is próbálkozik a fenti userrel) az nss_base_passwd és nss_base_shadow átállítása se segített)

Hozzászólások

Sztem nem acl gond lesz, hanem alapertelmezetten loginokat a ou=People,base amit megadtal helyen keresi, tehat pl ha base-nek megadtad a dc=company,dc=hu -t akkor ou=People,dc=company,dc=hu alatt keresi a usereket, hacsak nem irod at pam_ldap.conf-ban nss_base reszeknel, mert te inkabb sajat logika szerint hoztad letre az ldap strukturat.

--
Don't Panic if you see me laughing,
that's not a bug, just a feature.

pam_ldap es nss_ldap config file tartalmat ird mar le.
Kerdes az,hogy admin userrel bindelsz, vagy az aktualis userrel, amivel azonositast vegzel.

Van egy user, ldapauth, amivel bindel. Utána viszont valamiért a fisher userrel is bindelni akar.

pam_ldap.conf, commentek nélkül:

base dc=company,dc=hu
uri ldap://ldap0.vz0.company.hu
ldap_version 3
binddn userid=ldapauth,dc=company,dc=hu
bindpw ***********
pam_password md5
nss_base_passwd        dc=customer.hu,ou=domains,dc=company,dc=hu?one
nss_base_shadow        dc=customer.hu,ou=domains,dc=company,dc=hu?one

nss_ldap konfigom nincs, mert nem NSS-en keresztül megy a auth. hanem PAM(_ldap)-on át.

Eredetileg a base az dc=customer.hu,ou=domains,dc=company,dc=hu volt és nem volt nss_base_ megadva.

binddn userid=ldapauth,dc=company,dc=hu biztos jo uesr? Igazabol base dn sem az igazi, mivel sokkal lejebb van ami neked kell, azt nem tudom, hogy default milyen scope van.
Szerintem base-nek dc=customer.hu,ou=domains,dc=company,dc=hu adjal meg, mivel aclekben ez a userid=ldapauth.... nem szerepel,valszeg elirhattad, megoldas lehet, hogy nem adsz meg binddn-t es bindpw-t, user ugyis ra fog autholni, csak a basedn legyen jo (ha mas nem,akkor scope legyen sub)
Elobb utobb nss-ldap is kell, mivel user nem letezik, akkor pam sem fog raprobalni.

Átírtam, ha be akarok jelentkezni ilyen üzenetet kapok (binddn nélkül):

pam_ldap: error trying to bind (Invalid credentials)

A megadott jelszó jó. Az ldapauth user is, azzal rá is bindel az ldapra (és az működik ldapsearch-al is). A dc=customer.hu,ou=domains,dc=company,dc=hu -s userekkel nem tudok bejelentkezni ldapsearch-al sem. Nekem ez továbbra is ldap acl problémának tűnik, csak sík hülye vagyok az ldap-hoz :(

A dc=customer.hu,ou=domains,dc=company,dc=hu -s userekkel nem tudok bejelentkezni ldapsearch-al sem. Nekem ez továbbra is ldap acl problémának tűnik, csak sík hülye vagyok az ldap-hoz :(

az nem acl probléma, ha az ldap szerverre egy user, aki benne van az ldap adatbázisban, nem tud kapcsolódni.
az leginkább valamilyen password probléma szokott lenni.

dumpold ki légyszíves az ominózus user ldap entryjét directory managerként, de mielőtt kiírod ide, randomizáld a benne levő kényes adatokat, meg a jelszót is.

Imé:

# Entry 1: uid=fisher,dc=customer.hu,ou=domains,dc=company,dc=hu
dn: uid=fisher,dc=customer.hu,ou=domains,dc=company,dc=hu
cn: user Fisher from LDAP
displayname: Fisher
gidnumber: 1000
givenname: Fisher
homedirectory: /vmail/customer.hu/fisher
mail: fisher@customer.hu
mailhost: 172.16.123.111
maillocaladdress: fisher@customer.hu
mailquota: 1000
objectclass: inetLocalMailRecipient
objectclass: inetOrgPerson
objectclass: posixAccount
objectclass: top
sn: Fisher
uid: fisher
uidnumber: 1001
userpassword: {CRYPT}zhamWCqjtfU6k

Bocs, este már az imap se ment, ezért inkább aludni mentem :D

Annak az oka annyi volt, hogy az nem szerette a cryptelt jelszót, mert md5 van beállítva a dovecot-nak, ezért visszaírtam a jelszót md5-ösre (ha jól sejtem egy ldap bind-nél ennek nincs jelentősége). A logba nem ír semmit (na jó, annyit, hogy az uid nincs felindexelve). Még úgy se, hogy -s 4095-el futtatom a slapd-t.

(ha jól sejtem egy ldap bind-nél ennek nincs jelentősége)

ebben ne légy biztos.

másrészt azért szerettem volna látni a logot, mert abból kiderül, hogy a dovecot egy fix admin userral bindol, majd kiolvassa az enkriptált jelszót (ez esetben nem hasonlítható a pamhoz), vagy ő is a cleartext jelszóval próbál az adott user nevében bindolni az ldaphoz.

nálam pl. ilyenek vannak a syslogban:


slapd[3966]: conn=5930 fd=9 ACCEPT from IP=127.0.0.1:48794 (IP=127.0.0.1:389)
slapd[3966]: conn=5930 op=0 BIND dn="uid=mancika,ou=People,dc=valami,dc=hu" method=128
slapd[3966]: conn=5930 op=0 RESULT tag=97 err=49 text=
slapd[3966]: conn=5930 op=1 UNBIND
slapd[3966]: conn=5930 fd=9 closed

slapd[3966]: conn=5931 fd=9 fd=9 ACCEPT from IP=127.0.0.1:48798 (IP=127.0.0.1:389)
slapd[3966]: conn=5931 fd=9 op=0 BIND dn="uid=mancika,ou=People,dc=valami,dc=hu" method=128
slapd[3966]: conn=5931 fd=9 op=0 BIND dn="uid=mancika,ou=People,dc=valami,dc=hu" mech=SIMPLE ssf=0
slapd[3966]: conn=5931 fd=9 op=0 RESULT tag=97 err=0 text=

ez első verzió (err=49) a hibás jelszó volt, a második (err=0) a jó bejelentkezés.

A slapd valamiért nem akar logolni a syslogba, viszont a -d működik. Végre látom, hogy mi a baja, és valóban, nekem is err=49-es hiba jön a bejelentkezésre. A dovecot viszont bebindel egy dovecot userrel, és az md5 hash-t keresi, amit meg is talál.

Valamiért viszont most már az ldapsearch tud bindelni az ldaphoz. Csak a pam nem találja el, hogy. Ez már sok segítség, legalább látom, hogy merre keresgéljek még.

az lehet a gond, hogy esetleg a dovecot megeszi, ha a password mezőben egy darab md5 hash van (pl. d41d8cd98f00b204e9800998ecf8427e), mert a dovecot szénné konfigurálható, míg az 'igazi' authentikációhoz ez nem jó. oda valami {MD5}$1$volc6oQc$4a26nio2m32q3ol4s56J1. -szerű string kell.

Azt még hozzáírtam, hogy "invalid credentials"-ra panaszkodik, de a jelszó jó, az user jó(?) mert ezzel használja az imap szerver, és az meg működik.

No, működik. A pontos okát nem tudom. A megoldás annyi volt, hogy kidobtam a libnss-ldap-ot és helyette libnss-ldapd van fent. Az alapvető probléma az volt - ha jól nyomtam a tcpdump-ot -, hogy az sshd(?) jelszó helyett az "INCORRECT" stringet küldte el, ami persze igen nem jó.