Portál AbcLinuxu, 8. května 2025 00:07
ldapsearch -H ldaps://localhost:636 -x -D "uid=webuser,ou=people,dc=domain,dc=tld" -W -b "ou=users,dc=domain,dc=tld" "(uID=1011223)" "URL"PHP funkcia:
ldap_bind($ldap_conn, 'uid=webuser,ou=people,dc=domain,dc=tld', 'heslo') $ldap_dn = 'ou=users,dc=domain,dc=tld'; $ldap_filter = "(uID=$uid)"; $ldap_attr = array('URL'); $ldap_search_result = ldap_search($ldap_conn, $ldap_dn, $ldap_filter, $ldap_attr);skončí chybovou hláškou PHP Warning: ldap_search(): Search: No such object. Pri debugovaní na strane servera som zistil, že PHP ldap_search() sa snaží ísť o úroveň vyššie (dc=domain,dc=tld) a neviem prečo. Debug konzolového príkazu ldapsearch:
conn=1007 op=1 SRCH base="ou=users,dc=domain,dc=tld" scope=2 deref=0 filter="(uid=1011223)" conn=1007 op=1 SRCH attr=url => access_allowed: search access to "ou=users,dc=domain,dc=tld" "entry" requested => dn: [1] ou=users,dc=domain,dc=tld => acl_get: [1] matched => acl_get: [1] attr entry => acl_mask: access to entry "ou=users,dc=domain,dc=tld", attr "entry" requested => acl_mask: to all values by "uid=webuser,ou=people,dc=domain,dc=tld", (=0) <= check a_dn_pat: uid=webuser,ou=people,dc=domain,dc=tld <= acl_mask: [1] applying read(=rscxd) (stop) <= acl_mask: [1] mask: read(=rscxd) => slap_access_allowed: search access granted by read(=rscxd) => access_allowed: search access granted by read(=rscxd)Debug PHP funkcie ldap_search():
conn=1011 op=1 SRCH base="ou=users,dc=domain,dc=tld" scope=2 deref=0 filter="(uid=1011223)" conn=1011 op=1 SRCH attr=url => access_allowed: disclose access to "dc=domain,dc=tld" "entry" requested => dn: [1] ou=users,dc=domain,dc=tld => acl_get: [3] attr entry => acl_mask: access to entry "dc=domain,dc=tld", attr "entry" requested => acl_mask: to all values by "uid=webuser,ou=people,dc=domain,dc=tld", (=0) <= check a_dn_pat: cn=manager,dc=domain,dc=tld <= acl_mask: no more who clauses, returning =0 (stop) => slap_access_allowed: disclose access denied by =0 => access_allowed: no more rulesSkúšal som pridať oprávnenie disclose a dokonca read pre dc=domain,dc=tld. Výsledok bol, že som už nemal "access denied", ale nemal som ani očakávaný výsledok. Chyba v PHP bola stále tá istá (ldap_search(): Search: No such object). LDAP používateľ webuser má nastavené oprávnenie, že vie čítať iba dva atribúty uID a URL a to len zo stromu "ou=users,dc=domain,dc=tld". Defaultné ACL "access to * by users read" mám zakázané, lebo takto vedel webuser čítať aj iné atribúty. A možno tu je kameň úrazu. Podľa dokumentácie k OpenLDAP-u sa ACL spracúvajú v poradí ako sú napísané a ich spracovávanie končí pri prvej zhode (ak sa nepoužije break). ACL pre webuser-a bol ako prvý a "access to * by users read" ako posledný, ale aj tak vedel webuser vyčítavať atribúty, ktoré nemal. V prípade, že je aktívny "access to * by users read", tak to nemá nijaký vplyv na výsledok ldap_search(), v debug logoch síce nemám "access denied", ale nemám ani výsledok. Neviem ako si mám vysvetlovať slovo "stop" v logoch (napr.: acl_mask: [2] applying read(=rscxd) (stop)), či to znamená chybu alebo niečo iné. ACL z konfiguráku OpenLDAP-u:
access to dn.subtree="ou=users,dc=domain,dc=tld" attrs=uID,URL by dn.exact="uid=webuser,ou=people,dc=domain,dc=tld" read by * none access to attrs=userPassword by anonymous auth by * none access to * by dn.exact="cn=Manager,dc=domain,dc=tld" write # by users read by * noneSkúšal som aj ldap_read() a ldap_list(), ktoré sa líšia v scope. V oboch prípadoch (ldapsearch a ldap_search()) je bind úspešný, takže tam nie je problém. Ešte skúsim novšiu verziu PHP (mám 5.3.3-7+squeeze26) napriek tomu privítam rady.
access to * by dn.exact="cn=Manager,dc=domain,dc=tld" write by dn.exact="cn=zzz,dc=domain,dc=tld" read by users read by * nonea objavilo sa to v debug logoch:
May 21 07:28:03 localhost slapd[11218]: <= check a_dn_pat: cn=manager,dc=domain,dc=tld May 21 07:28:03 localhost slapd[11218]: <= check a_dn_pat: cn=zzz,dc=domain,dc=tld May 21 07:28:03 localhost slapd[11218]: <= check a_dn_pat: usersInak, skúšal som PHP 5.6.9 na Windows s rovnakým neúspešným výsledkom.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.