heu ben à vrai dire je ne sais pas trop, nous avons suivi une doc et
ça marche …
Plus sérieusement, nous avons un ldap qui a tous les comptes .
Si on fait un ldapsearch sur le ldap
ldapsearch "*" -b dc=mdl29,dc=net -x
Il nous ramène tous ce qui a dans le ldap
mais comme tout nous intéresse pas repérez l'adresse mail d'un utilisateur
par exemple: bjensen@mdl29.net
et si on refait une recherche
ldapsearch "mail=bjensen@mdl29.net" -b dc=mdl29,dc=net -x
il n'en ressort que sa fiche
heu, juste une parenthèse, pour rechercher tous ceux qui aurait une adresse mail en mdl29 il suffit d'executer
ldapsearch "mail=*@mdl29.net" -b dc=mdl29,dc=net -x
bon revenons à la fiche de bjensen
# 42, Users, mdl29.net dn: uid=42,ou=Users,dc=mdl29,dc=net objectClass: top objectClass: person objectClass: organizationalPerson objectClass: inetOrgPerson objectClass: qmailUser mailHost: mail1.mdl29.net cn: bjensen displayName: Babs Jensen sn: Jensen givenName: Barbara initials: BJJ uid: 42 mail: bjensen@mdl29.net telephoneNumber: +1 408 555 1862 facsimileTelephoneNumber: +1 408 555 1992 mobile: +1 408 555 1941 roomNumber: 0209 carLicense: 6ABC246 o: Siroe ou: Product Development departmentNumber: 2604 employeeNumber: 42 employeeType: full time preferredLanguage: fr, en-gb;q=0.8, en;q=0.7 labeledURI: http://www.siroe.com/users/bjensen My Home Page
bon heu, il y a un peu trop de chose,
nous allons prendre que ce qui nous intéresse.
Et hop un autre Ldapsearch…
ldapsearch "mail=bjensen@mdl29.net" -b dc=mdl29,dc=net -x mail uid cn mailhost
ce qui nous donne
# 42, Users, mdl29.net dn: uid=42,ou=Users,dc=mdl29,dc=net mailHost: mail1.mdl29.net cn: bjensen uid: 42 mail: bjensen@mdl29.net
ha ben oui c'est mieux la … on y plus claire
donc quand postfix recoit un mail il regarde si il a le droit de le prendre.
ensuite il décide de ce qu'il va en faire.
Pour cela il va regarder dans le ldap si le mail existe et si le mailhost est égal à mail1.mdl29.net
c'est à cela que sert les paramètres dans le main.cf
virtual_mailbox_maps = hash:/etc/postfix/account.cf,ldap:mailbox
mailbox_server_host = localhost mailbox_version = 3 mailbox_search_base = ou=Users,dc=saffron,dc=net mailbox_domain = mdl29.net mailbox_query_filter = (&(mail=%s)(mailhost=mail1.mdl29.net)) mailbox_result_attribute = uid mailbox_result_filter = %s/
Pourquoi faire le test de mail1.mdl29.net?
ben pour pouvoir augmenter le nombre de serveur mail sans devoir changer de domaine avec cette requete, postfix sait que c'est un mail que nous gérons et que ce mail est hebergé chez lui. Si nous avions deux serveurs nous mettrions en place une autre regle mais cette fois ci dans le main.cf
transport_maps=ldap:transport
transport_server_host = localhost transport_version = 3 transport_search_base = ou=Users,dc=saffron,dc=net transport_domain = mdl29.net transport_query_filter = (mail=%s) transport_result_attribute = mailhost
Ce qui signifie que postfix fait une requête pour savoir qui héberge le mail et ensuite il transmet ce mail aux serveurs
maintenant reprenons la fiche simplifié de bjenson
ldapsearch "mail=bjensen@mdl29.net" -b dc=mdl29,dc=net -x mail uid cn mailhost
ce qui nous donne
# 42, Users, mdl29.net dn: uid=42,ou=Users,dc=mdl29,dc=net mailHost: mail1.mdl29.net cn: bjensen uid: 42 mail: bjensen@mdl29.net
L'uid correspond à son numéro d'adhérent. C'est ce numéro qui va l'identifier du facon unique. L'ensemble de la plateforme se basera sur ce numero. Postfix deposera les mail dans un dossier qui comporte le numero d'adherent bjensen aura donc sa boite mail dans le numero 42.
Maintenant Mme bjensen divorce de Mr Jensen (ben oui souvenez vous elle s'apelle barbara) elle redeviendra Mrs Michu. et nous pouvons changer cela dans le ldap sans que le numéro d'adhérent ne change. bon heu pour l'instant on a pas d'outils pour aller le changer donc vous pouvez le faire qu'en modifiant le fichier ldif et en rechargeant le ldap
cf. Doc du ldap
bien maintenant regardons dovecot le frontal pop/imap Dans le fichier /etc/dovecot/dovecot-ldap.conf
hosts = 127.0.0.1 default_pass_scheme = PLAIN auth_bind = yes ldap_version = 3 base = dc=mdl29,dc=net deref = never scope = subtree pass_attrs = uid=user pass_filter = (&(|(cn=%u)(uid=%u))(mailhost=mail1.mdl29.net))
Il fait lui aussi une requête pour savoir si, il héberge l'utilisateur qui essaie de se connecter avec le champ mailhost donc si mailhost est different de mail1.mdl29.net, l'utilisateur se fait jeter. Nous avons paramétré dovecot pour qu'il sache authentifier aussi bien avec le uid qu'avec le cn. Le cn d'ailleur doit correspondre au nom du mail sans l'arobase et le nom de domaine.
pendant qu'on est la dessus une petite précision
(|(cn=%u)(uid=%u))
le caractere | veut dir ou donc ici la requete veut dir cn=%u ou uid=%u
(&(cn=%u)(uid=%u))
le caractere & veut dir et donc ici la requete veut dir cn=%u et uid=%u et si nous voulons faire du et et ou en même temps il suffit de mettre des parentheses comme en math pour prioriser les actions. remarquez qu'a la différence des math l'operateur se met juste après la parenthese.
et enfin le %u est le nom d'utilisateur que nous mettons pour nous connecter dans notre client de messagerie preferé
donc dans dovecot-ldap quand nous faisons cette requete,
(&(|(cn=%u)(uid=%u))(mailhost=mail1.mdl29.net))
cela veut dire que dovecot cherche dans le ldap si il y a un cn ou un uid qui est egal à l'utilisateur et dont son mailhost est égal à mail1.mdl29.net
Donc ça signifie que l'utilisateur peut aussi bien se connecter avec son cn qu'avec son numero d'adherent.
Le champ
pass_attrs = uid=user
Permet de retourner l'uid pour que dovecot puisse savoir quel est le répertoire de l'utilisateur.
bien en ecrivant la doc, je me suis rendu compte d'une chose c'est que si nous herbergeons plusieur domaine, nous pourrions avoir deux utilisateurs ayant le meme nom exemple :
bjensen@mdl29.net bjensen@braveo.net
Il faut donc que nous décidions que le bjensen doit etre unique ou que nous decidions de changer la conf de dovecot pour que l'authentification se fasse sur le champ mail au lieu de cn.
Faut y réfléchir sérieusement car pour la suite la question se pose aussi. genre l'url des blogs exemple:
http://mdl29.net/bjensen.mdl29.net
ou
http://mdl29.net/bjensen
ce qui pourrait etre cela
http://bjensen.mdl29.net
ou
http://bjensen42.mdl29.net
j'en sais rien …