Discussione:
Chiarimento LDAP PART-2
(troppo vecchio per rispondere)
SiriusDog
2005-12-08 17:37:05 UTC
Permalink
Ok, escludendo ogni riferimento all'ldap, sono riuscito a far funzionare
postfix utilizzando solo gli utenti locali, ed è OK.

Ora, il problema è nato quando ho provato a fargli pescare gli utenti
registrati nell'LDAP.

Dopo un'infinità di prove, ho notato dal debug che il risultato della
query_filter era un errore 32, riporto dal main.cf:

[CUT]
ldapsource_search_base = ou=people,dc=casa,dc=it
ldapsource_query_filter = (mail=%s)
ldapsource_result_attribute = mail
[CUT]

in effetti se provo la query con ldapsearch e quella base, non mi ritorna
nessun risultato, mentre se provo con:

ldapsearch -x -D "cn=admin,dc=casa,dc=it" -W mail

ottengo tutte le caselle email nell'ldap.

Dove ho sbagliato?

Da notare che in phpldapadmin, le caselle email le trovo tutte sotto la
ou=people quindi speravo che anche ldapsearch con base in people me le
facesse vedere.

Non so se serve, ma ho settato per ou=people la stessa PW di cn=admin.

Per scrupolo, riporto un tipico ldif che ho creato ed inserito nel ramo:

dn: cn=gino,ou=people,dc=casa,dc=it
cn: gino
gidNumber: 10007
mail: ***@casa.it
sn: Gino
uidNumber: 10005
objectClass: couriermailaccount
objectClass: person
objectClass: top
objectClass: inetOrgPerson
homeDirectory: /home/vmail
quota: 0
mailbox: casa.it/login/
userPassword: {CRYPT}gino

Ripeto, se provo con utenti di sistema funziona tutto in tutti i modi.
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
SiriusDog
2005-12-08 17:46:22 UTC
Permalink
OOOOpps

Mi sono accorto che se faccio:

ldapsearch -h localhost -x -w secret -D "cn=admin,dc=casa,dc=it" -b
"ou=people,dc=casa,dc=it" mail

mi ritorna esattamente le caselle email sotto il ramo ou=people, quindi
ora rimane il problema del perchè la stessa query nel main.cf mi produce
l'errore 32 ( è slapd che dice error 32 no such object ).
Post by SiriusDog
Ok, escludendo ogni riferimento all'ldap, sono riuscito a far funzionare
postfix utilizzando solo gli utenti locali, ed è OK.
Ora, il problema è nato quando ho provato a fargli pescare gli utenti
registrati nell'LDAP.
Dopo un'infinità di prove, ho notato dal debug che il risultato della
[CUT]
ldapsource_search_base = ou=people,dc=casa,dc=it
ldapsource_query_filter = (mail=%s)
ldapsource_result_attribute = mail
[CUT]
in effetti se provo la query con ldapsearch e quella base, non mi ritorna
ldapsearch -x -D "cn=admin,dc=casa,dc=it" -W mail
ottengo tutte le caselle email nell'ldap.
Dove ho sbagliato?
Da notare che in phpldapadmin, le caselle email le trovo tutte sotto la
ou=people quindi speravo che anche ldapsearch con base in people me le
facesse vedere.
Non so se serve, ma ho settato per ou=people la stessa PW di cn=admin.
dn: cn=gino,ou=people,dc=casa,dc=it
cn: gino
gidNumber: 10007
sn: Gino
uidNumber: 10005
objectClass: couriermailaccount
objectClass: person
objectClass: top
objectClass: inetOrgPerson
homeDirectory: /home/vmail
quota: 0
mailbox: casa.it/login/
userPassword: {CRYPT}gino
Ripeto, se provo con utenti di sistema funziona tutto in tutti i modi.
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
THe_ZiPMaN
2005-12-08 19:11:18 UTC
Permalink
Post by SiriusDog
ldapsearch -h localhost -x -w secret -D "cn=admin,dc=casa,dc=it" -b
"ou=people,dc=casa,dc=it" mail
Se ti può essere utile:

ldapaccounts_timeout = 10
ldapaccounts_server_host = localhost
ldapaccounts_search_base = ou=people,dc=example,dc=com
ldapaccounts_server_port = 389
ldapaccounts_domain = example.com
ldapaccounts_query_filter = (|(uid=%s)(mail=%s)(mailAlternateAddress=%s)
ldapaccounts_result_attribute = mailbox
ldapaccounts_bind = yes
ldapaccounts_bind_dn = cn=postfix,ou=daemons,dc=example,dc=com
ldapaccounts_bind_pw = password

Questo funziona.
--
Flavio Visentin

Membro del CICAP
Comitato Italiano per il Controllo delle Affermazioni di P4
SiriusDog
2005-12-08 20:27:12 UTC
Permalink
Post by THe_ZiPMaN
ldapaccounts_timeout = 10
ldapaccounts_server_host = localhost
ldapaccounts_search_base = ou=people,dc=example,dc=com
ldapaccounts_server_port = 389
ldapaccounts_domain = example.com
ldapaccounts_query_filter = (|(uid=%s)(mail=%s)(mailAlternateAddress=%s)
ldapaccounts_result_attribute = mailbox
ldapaccounts_bind = yes
ldapaccounts_bind_dn = cn=postfix,ou=daemons,dc=example,dc=com
ldapaccounts_bind_pw = password
Questo funziona.
Ora provo, ma mi spieghi questa riga?

ldapaccounts_bind_dn = cn=postfix,ou=daemons,dc=example,dc=com

Non sono sicuro di averla capita, non conoscento la struttura del tuo
albero LDAP.
Grazie
:-)
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
THe_ZiPMaN
2005-12-08 21:22:44 UTC
Permalink
Post by SiriusDog
Ora provo, ma mi spieghi questa riga?
ldapaccounts_bind_dn = cn=postfix,ou=daemons,dc=example,dc=com
E' l'utente con cui fare bind a LDAP.
E' buona norma *non* utilizzare l'admin per accedere a LDAP ma creare un
utente dedicato; io abitualmente creo un OU dedicata (daemons appunto)
contenenti tutti gli utenti utilizzati per il bind da parte dei vari
servizi (quindi uno per postfix, uno per courier, ecc.ecc.), in modo
tale da poter gestire in modo raffinato anche i permessi.
--
Flavio Visentin

Membro del CICAP
Comitato Italiano per il Controllo delle Affermazioni di P4
SiriusDog
2005-12-08 21:48:49 UTC
Permalink
Post by THe_ZiPMaN
E' l'utente con cui fare bind a LDAP.
E' buona norma *non* utilizzare l'admin per accedere a LDAP ma creare un
utente dedicato; io abitualmente creo un OU dedicata (daemons appunto)
contenenti tutti gli utenti utilizzati per il bind da parte dei vari
servizi (quindi uno per postfix, uno per courier, ecc.ecc.), in modo
tale da poter gestire in modo raffinato anche i permessi.
Ho capito, comunque anche facendo il bind con l'utente admin e non ti dico
quante prove sui filtri o sull'utilizzo stesso di altri parametri
dell'ldap, in condizioni normali, dovrebbe andare.

questo è, invece, il mio risultato:

Dopo aver fatto correttamente la connessione la server ldap,
al momento della query_filter->
-> dict_ldap_lookup: Search error 32: No such object

KAKKIO!!!
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
THe_ZiPMaN
2005-12-08 21:58:06 UTC
Permalink
Post by SiriusDog
Dopo aver fatto correttamente la connessione la server ldap,
al momento della query_filter->
-> dict_ldap_lookup: Search error 32: No such object
[CUT]
ldapsource_search_base = ou=people,dc=casa,dc=it
ldapsource_query_filter = (mail=%s)
ldapsource_result_attribute = mail
[CUT]

Perché il tuo result_attribute è mail? Non dovrebbe essere mailbox?
Perché ldapsource_domain non è definito?

Prova ad aumentare il livello di logging (306 o 4095) di slapd e posta
il log di tutta una transazione.
--
Flavio Visentin

Membro del CICAP
Comitato Italiano per il Controllo delle Affermazioni di P4
SiriusDog
2005-12-09 07:57:35 UTC
Permalink
Post by THe_ZiPMaN
Perché il tuo result_attribute è mail? Non dovrebbe essere mailbox?
Perché ldapsource_domain non è definito?
In realtà ldapsource_domain è definito, ma era compreso nel [CUT].

Ho usato result_attribute = mail perchè facendo ldasearch con mail
ottenevo le caselle email del ramo che andavo ad interrogare, comunque ho
provato a mettere mailbox ed ho fatto un postmap -v -q ***@casa.it
ldap:ldapsource ed ecco il risultato:

postmap: dict_ldap_lookup: No existing connection for LDAP source
ldapsource, reopening
postmap: dict_ldap_connect: Connecting to server ldap://mail.casa.it:389
postmap: dict_ldap_connect: Actual Protocol version used is 2.
postmap: dict_ldap_connect: Binding to server ldap://mail.casa.it:389 as
dn cn=admin,dc=casa,dc=it
postmap: dict_ldap_connect: Successful bind to server
ldap://mail.casa.it:389 as cn=admin,dc=casa,dc=it
postmap: dict_ldap_connect: Cached connection handle for LDAP source
ldapsource
postmap: dict_ldap_lookup: Searching with filter
(|(uid=***@casa.it)(mail=***@casa.it))(mailAlternateAddress=***@casa.it)
postmap: warning: dict_ldap_lookup: Search error 32: No such object


La query filter è quella che mi avevi suggerito, ma tanto ottengo sempre
lo stesso risultato anche lasciando solo mail=%s.
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
THe_ZiPMaN
2005-12-09 22:15:17 UTC
Permalink
Post by SiriusDog
La query filter è quella che mi avevi suggerito, ma tanto ottengo sempre
lo stesso risultato anche lasciando solo mail=%s.
La query filter va bene anche "(mail=%s)". Che dice il log di slapd?
quello di postfix è abbastanza inutile in questo caso.

Posta magari anche la conf. di openldap.
--
Flavio Visentin

Membro del CICAP
Comitato Italiano per il Controllo delle Affermazioni di P4
SiriusDog
2005-12-10 00:10:58 UTC
Permalink
Post by THe_ZiPMaN
Post by SiriusDog
La query filter è quella che mi avevi suggerito, ma tanto ottengo sempre
lo stesso risultato anche lasciando solo mail=%s.
La query filter va bene anche "(mail=%s)". Che dice il log di slapd?
quello di postfix è abbastanza inutile in questo caso.
Posta magari anche la conf. di openldap.
Ciao THe_ZiPMaN, dopo innumerevoli capriole carpiate all'indietro, ho
capito che "warning: dict_ldap_lookup: Search error 32: No such object" è
un errore generico dovuto o alla struttura errata di LDAP, o dalla
query_filter che non trova risultati.
A questo punto, dato che sono sicuro della corretta configurazione del
main.cf ( nello specifico parlo di ldapsource ), mi servirebbe un estratto
di un ou=people, con un paio di utenti sicuramente funzionanti.
Pensi di potermi postare una parte dell'LDIF che contiene i tui account
mail sotto ou=people ( o chi per lui) ?

Così proverò un import e vedrò se questa volta il postmap -q andrà a buon
fine.

Se potrai faremi questo favore, te ne sarò molto grato.

Grazie
Ciao
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
THe_ZiPMaN
2005-12-10 01:54:55 UTC
Permalink
Post by SiriusDog
Pensi di potermi postare una parte dell'LDIF che contiene i tui account
mail sotto ou=people ( o chi per lui) ?
Con ovviamente sostituiti i nomi :-)

La struttura base:

# extended LDIF
#
# LDAPv3
# base <> with scope sub
# filter: (objectclass=*)
# requesting: *
#

# example.com
dn: dc=example,dc=com
objectClass: top
objectClass: domain
objectClass: dcObject
description: top level of directory
o: Example
dc: example

# people, example.com
dn: ou=people,dc=example,dc=com
objectClass: top
objectClass: organizationalunit
ou: people
description: Rubrica Indirizzi

# daemons, example.com
dn: ou=daemons,dc=example,dc=com
objectClass: top
objectClass: organizationalunit
ou: daemons
description: Utenti per Daemons

# postfix, daemons, example.com
dn: cn=postfix,ou=daemons,dc=example,dc=com
cn: postfix
sn: postfix
objectClass: Person
userPassword:: XXXXXXXXXXXXXXXXX

# courier, daemons, example.com
dn: cn=courier,ou=daemons,dc=example,dc=com
cn: courier
sn: courier
objectClass: Person
userPassword:: XXXXXXXXXXXXXXXXX

Ed un utente tipo.

# extended LDIF
#
# LDAPv3
# base <> with scope sub
# filter: uid=pippo
# requesting: ALL
#

dn: uid=pippo,ou=people,dc=example,dc=com
objectClass: top
objectClass: posixAccount
objectClass: shadowAccount
objectClass: qmailuser
objectClass: Person
objectClass: OrganizationalPerson
objectClass: inetOrgPerson
objectClass: courierMailAccount
ou: people
uidNumber: 500
gidNumber: 100
homeDirectory: /mailstore/pippo
mailMessageStore: /mailstore/pippo/Maildir/
uid: pippo
cn: Pippo
givenName: Pippo
sn: Paperino
mailbox: Maildir/
mail: ***@example.com
mailAlternateAddress: ***@example.com
mailAlternateAddress: ***@example.com
accountStatus: active
mailQuota: 204800000S
shadowMax: 99999
shadowWarning: 7
shadowLastChange: 10000
loginShell: /bin/rbash
--
Flavio Visentin

Membro del CICAP
Comitato Italiano per il Controllo delle Affermazioni di P4
SiriusDog
2005-12-10 11:32:21 UTC
Permalink
Ciao Zip, ho provato ad inserire la base, ma si ferma qui sotto, dicendo:

ldapadd: invalid format (line 5) entry:
"cn=postfix,ou=daemons,dc=casa,dc=it"

Che può essere?
Post by THe_ZiPMaN
# postfix, daemons, example.com
dn: cn=postfix,ou=daemons,dc=example,dc=com
cn: postfix
sn: postfix
objectClass: Person
userPassword:: XXXXXXXXXXXXXXXXX
# courier, daemons, example.com
dn: cn=courier,ou=daemons,dc=example,dc=com
cn: courier
sn: courier
objectClass: Person
userPassword:: XXXXXXXXXXXXXXXXX
Vorrei approfittare della tua gentilezza chiedendoti come hai creato
questa lista. Io, con phpldamadmin, ottengo risultato un pò diversi.

Grazie 10000 volte!!!
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
THe_ZiPMaN
2005-12-10 18:49:51 UTC
Permalink
"cn=postfix,ou=daemons,dc=casa,dc=com"
Che può essere?
NN saprei; probabilmente abbiamo caricato degli schemi differenti; ti
chiedevo di postare la conf di ldap anche per questo.
Vorrei approfittare della tua gentilezza chiedendoti come hai creato
questa lista. Io, con phpldamadmin, ottengo risultato un pò diversi.
A mano.
--
Flavio Visentin

Membro del CICAP
Comitato Italiano per il Controllo delle Affermazioni di P4
SiriusDog
2005-12-10 20:40:38 UTC
Permalink
Ecco il mio slapd.conf:

allow bind_v2
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/authldap.schema
include /etc/ldap/schema/misc.schema

schemacheck on

pidfile /var/run/slapd/slapd.pid

argsfile /var/run/slapd.args

loglevel 50000 # Non mi è stato molto utile

modulepath /usr/lib/ldap
moduleload back_bdb

backend bdb
checkpoint 512 30
database bdb
suffix "dc=casa,dc=it"

directory "/var/lib/ldap"
rootdn "cn=admin,dc=casa,dc=it"
rootpw secret

index objectClass,uidNumber,uid eq

lastmod on

access to attrs=userPassword
by dn="cn=admin,dc=casa,dc=it" write
by anonymous auth
by self write
by * read

access to *
by dn="cn=admin,dc=casa,dc=it" write
by * read

access to dn.base="dc=casa,dc=it"
by * read
access to dn.base="ou=people,dc=casa,dc=it"
by * read


Guarda se noti qualche errore perchè sta query_filter continua a non
trovarmi nulla, nonostante abbia arato il db di LDAP e l'abbia ricreato
partendo da uqello che mi hai dato.

Grazie
Ciao
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
SiriusDog
2005-12-10 21:01:25 UTC
Permalink
UUUUAAAAAAAA!!!!!!!


Ho parlato troppo presto ...

FUNZIONAAAAAAAAA!!!!!!!

Ti giuro che è quasi superstizione, a quanto pare ricreando il db daccapo
seguendo il tuo esempio, come ho risistemato il main.cf ( perchè l'avevo
sputtanato per le varie prove ) ho fatto un postmap -v -q mi ha subito
stampato l'indirizzo emal dell'utente di prova che avevo inserito nel ramo
people.

VITTORIA!!!!!!!!

Dimmi dove abiti che ti mando un regalo per Natale :-)

Ciao
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
THe_ZiPMaN
2005-12-10 21:04:30 UTC
Permalink
Post by SiriusDog
Ho parlato troppo presto ...
FUNZIONAAAAAAAAA!!!!!!!
Ottimo.
Post by SiriusDog
Dimmi dove abiti che ti mando un regalo per Natale :-)
Se vuoi realmente farmi un regalo ... fallo a chi se lo merita :-)

http://www.debian.org/donations

:-)
--
Flavio Visentin

Membro del CICAP
Comitato Italiano per il Controllo delle Affermazioni di P4
SiriusDog
2005-12-11 00:19:15 UTC
Permalink
Ciao THe_ZiPMaN non prendermi a calci se sono petulante, ma facendo varie
prove mi sono accorto che le mail indirizzate a, per esempio,
***@casa.it, arrivano, viene trovata la casella pippo nell'LDAP, ma il
"local" di postfix, mi tratta pippo come se fosse un utente di sistema (
che ovviamente non esiste ) quindi mi rimanda indietro la mail con
status=bounced (unknown user:pippo ).

Se l'utente esiste nell'LDAP, come mai postfix lo cerca nel sistema?
Non dovrò mica andare a modificare i pam, passwd, shadow per fargli
cercare gli utenti nell'LDAP come se fossero locali ( che sarebbe comunque
una gran figata, ma non è quello che devo fare ora )!!!

Ciao e perdona la mia insistenza.
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
THe_ZiPMaN
2005-12-11 01:04:43 UTC
Permalink
Post by SiriusDog
"local" di postfix, mi tratta pippo come se fosse un utente di sistema (
Ovvio
Post by SiriusDog
Se l'utente esiste nell'LDAP, come mai postfix lo cerca nel sistema?
Perché se usi local l'utente deve essere locale.
Post by SiriusDog
Non dovrò mica andare a modificare i pam, passwd, shadow per fargli
cercare gli utenti nell'LDAP come se fossero locali ( che sarebbe comunque
una gran figata, ma non è quello che devo fare ora )!!!
Hai due scelte:
a) configuri che gli utenti ldap siano anche utenti di sistema (dovrebbe
bastare aggiungere ldap a nsswitch.conf
b) usi virtual al posto di local

Io inizialmente avevo optato per la seconda, poi ho convertito tutto
alla prima perché è molto più semplice da gestire (e tra le altre cose
ti permette di utilizzare maildrop o procmail per il delivery della posta).
La cosa importante è che non consenti i login agli utenti di LDAP o che
ti accerti che non abbiano password banali (è comunque sconsigliabile
dato che pop3 e imap in genere vengono usati in chiaro e quindi le
password sono facilmente sniffabili).
--
Flavio Visentin

Membro del CICAP
Comitato Italiano per il Controllo delle Affermazioni di P4
SiriusDog
2005-12-11 20:36:29 UTC
Permalink
Riciao THe_ZiPMaN ho optato per la modifica dell'nsswitch e del pam. Ora
mi riconosce gli utenti su ldap come fossero di sistema. Direi che va bene
così, ovviamente dovrò stare molto + attento a mettere in sicurezza tutto
il sistema.

Grazie ancora per il prezioso aiuto.
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
THe_ZiPMaN
2005-12-11 20:40:15 UTC
Permalink
Post by SiriusDog
Riciao THe_ZiPMaN ho optato per la modifica dell'nsswitch e del pam. Ora
mi riconosce gli utenti su ldap come fossero di sistema. Direi che va bene
così, ovviamente dovrò stare molto + attento a mettere in sicurezza tutto
il sistema.
Ti consiglio di abilitare solo le versioni sicure dei servizi di posta
(imaps su 993 e pop3s su 995) disabilitando o bloccando con iptables le
corrispondenti non sicure, e di autorizzare l'autenticazione smtp solo
su smtps o mediante TLS.

Giusto per non far transitare pwd in chiaro.
--
Flavio Visentin

Membro del CICAP
Comitato Italiano per il Controllo delle Affermazioni di P4
Ottavio Campana
2005-12-12 15:08:57 UTC
Permalink
Post by THe_ZiPMaN
Post by SiriusDog
ldapsearch -h localhost -x -w secret -D "cn=admin,dc=casa,dc=it" -b
"ou=people,dc=casa,dc=it" mail
ldapaccounts_timeout = 10
ldapaccounts_server_host = localhost
ldapaccounts_search_base = ou=people,dc=example,dc=com
ldapaccounts_server_port = 389
ldapaccounts_domain = example.com
ldapaccounts_query_filter = (|(uid=%s)(mail=%s)(mailAlternateAddress=%s)
ldapaccounts_result_attribute = mailbox
ldapaccounts_bind = yes
ldapaccounts_bind_dn = cn=postfix,ou=daemons,dc=example,dc=com
ldapaccounts_bind_pw = password
puoi farlo anche senza bindarti se il campo mail non e' protetto in
lettura da acl, cosa che e' vera nelle configurazioni di default.
Continua a leggere su narkive:
Loading...