[bglug] Come impazzire usando ldap
micron
micron@madlab.it
Lun 5 Lug 2004 15:39:43 CEST
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Sono finalmente riuscito a tirare insieme un server open-ldap interno per
gestire una rubrica di posta condivisa.
Dopo innumerevoli tentativi, dovuti alla stupidità di open-ldap (ho
"piacevolmente" scoperto che ldap non accetta eventuali spazi di fine riga
nei suoi file di configurazione!!!), sono riuscito a ottenere buoni
risultati: infatti la rubrica centralizzata è accessibile da KMail, outlook
express e l'addressbook di macosx.
Dato che l'os che uso per la maggiore è linux (con kde) mi sono lanciato alla
scoperta delle innumerevoli pecche di KAddressBook (infatti il suo supporto a
ldap è ancora in uno stato "embrionale").
PROBLEMI:
Ecco cosa non fa KAddressBook:
1) non permette di modificare i contatti direttamente sul server
2) non permette di usare ldaps (secure)
3) perde una serie di campi durante l'import dal server
SOLUZIONI (o quasi):
1) Si può semplicemente esportare un contatto in formato ldif e importarlo
successivamente sul server. Purtroppo i file ldif creati da KAddressBook non
sono compatibili con open-ldap (dipende da come avete creato l'oggetto
"persona della rubrica"), per ovviare a questo ho scritto un banale programma
in python che risolve il tutto.
In alternativa si aspetta kde 3.3, in cui ci saranno dei miglioramenti di
KAddressBook.
2) aspettiamo un nuovo KAddressBook, o mettiamoci a tunnellizzare con ssh le
comunicazioni tra noi ed il server
3) sono campi proprio stupidi, passiamo vivere anche senza
IL VERO PROBLEMA:
A questo punto funziona tutto, peccato che il mio addressbook sia leggibile
dall'intero universo, e questo (per una persona con un po' di scrupoli e
tanta paranoia :) non è accettabile.
Per risolvere il problema basta impostare delle ACL in slapd.conf, per
esempio:
access to *
by self write
by users read
by dn.base="cn=rootdn,dc=unixum,dc=lan" write
by anonymous auth
così possono leggere solo gli utenti che si sono autentificati.
Il tutto funziona, infatti facendo:
$ ldapsearch -x -D "uid=micron,ou=users,dc=unixum,dc=lan" -b
"ou=addressbook,dc=unixum,dc=lan" "mail=*utente*" -W
mi restituisce dei risultati corretti.
NB: uid=micron specifica un utente creato ad hoc in ldap:
dn: uid=micron,ou=users,dc=unixum,dc=lan
uid: micron
userPassword: {md5}Ch3_'Te_Fr3g4?
objectClass: top
objectClass: account
objectClass: simpleSecurityObject
Al che in KAddressBook ho messo i seguenti parametri nel campo "BIND DN" (nel
pannello di configurazione per ldap):
uid=micron,ou=users,dc=unixum,dc=lan
Purtroppo le ricerche non restituisce nulla, infatti guardando il debug di
slapd risulta:
=> id2entry_r( 245 )
=> ldbm_cache_open( "id2entry.dbb", 73, 600 )
<= ldbm_cache_open (cache 1)
=> str2entry
>>> dnPrettyNormal: <cn=Utente pippo,ou=addressbook,dc=unixum,dc=lan>
=> ldap_bv2dn(cn=Utente pippo,ou=addressbook,dc=unixum,dc=lan,0)
<= ldap_bv2dn(cn=Utente pippo,ou=addressbook,dc=unixum,dc=lan,0)=0
=> ldap_dn2bv(272)
<= ldap_dn2bv(cn=Utente pippo,ou=addressbook,dc=unixum,dc=lan,272)=0
=> ldap_dn2bv(272)
<= ldap_dn2bv(cn=utente pippo,ou=addressbook,dc=unixum,dc=lan,272)=0
<<< dnPrettyNormal: <cn=Utente pippo,ou=addressbook,dc=unixum,dc=lan>,
<cn=utente pippo,ou=addressbook,dc=unixum,dc=lan>
<= str2entry(cn=Utente pippo,ou=addressbook,dc=unixum,dc=lan) -> 0x81965c0
<= id2entry_r( 245 ) 0x81965c0 (disk)
=> test_filter
SUBSTRINGS
begin test_substrings_filter
=> access_allowed: search access to "cn=Utente
pippo,ou=addressbook,dc=unixum,dc=lan" "mail" requested
=> acl_get: [1] check attr mail
<= acl_get: [1] acl cn=Utente pippo,ou=addressbook,dc=unixum,dc=lan attr: mail
=> acl_mask: access to entry "cn=Utente
pippo,ou=addressbook,dc=unixum,dc=lan", attr "mail" requested
=> acl_mask: to all values by "", (=n)
<= check a_dn_pat: self
<= check a_dn_pat: users
<= check a_dn_pat: cn=rootdn,dc=unixum,dc=lan
<= check a_dn_pat: anonymous
<= acl_mask: [4] applying auth(=x) (stop)
<= acl_mask: [4] mask: auth(=x)
=> access_allowed: search access denied by auth(=x)
<= test_filter 50
ldbm_search: candidate entry 245 does not match filter
Ergo kaddressbook non si è autentificato, temo che provi ad autentificarsi
usando cyrus sasl, proprio come fa di base anche ldap a meno che non si usi
l'opzione -x (che come avrete notato ho sempre usato).
Adesso mi si presentano tre soluzioni:
1) ricompilare openldap senza il supporto a cyrus sasl
2) fare funzionare cyrus sasl
3) impostare l'autentificazione semplice (quella -x) al posto di sasl come
default
La 1 mi pare proprio da stupidi, per la 2 ho provato ma non sono riuscito
(ovviamente i test prima li faccio con i programmi da linea di comando, solo
dopo con le gui), per la 3 non ho trovato nessuna opzione.
Ed ecco, dopo un post chilometrico, la tanto attesa domanda: nessuno sa come
diavolo funziona cyrus sasl? come la interfaccio con ldap (alcune guide
prevedono l'uso di kerberos, aiuto!!!!)
grazie in anticipo
micron
PS: sorry per il post lunghissimo, ma so che l'argomento interessava ad un po'
di gente
- --
|§ micron<- ICQ #118796665
|§ GPG Key:
|§ ~ Keyserver: pgp.mit.edu
|§ ~ KeyID: 6D632BED
~ "Progress is merely a realisation of utopias" ~
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)
iD8DBQFA6VofADGi/m1jK+0RArLNAJ4opr442mzVyHvQVFXbiw6pfWsDtQCcDPtS
g6ORlJ3MKl73JRHoqJlOUUI=
=E01X
-----END PGP SIGNATURE-----
Maggiori informazioni sulla lista
bglug