ateliers:serveurmail:ldap
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
ateliers:serveurmail:ldap [2018/06/28 16:14] – Suppression et ajout de schéma LDAP okhin | ateliers:serveurmail:ldap [2019/10/28 19:48] (Version actuelle) – Fixing typos okhin | ||
---|---|---|---|
Ligne 13: | Ligne 13: | ||
Sous GNU/Linux, le projet gnome propose LAT, qui s' | Sous GNU/Linux, le projet gnome propose LAT, qui s' | ||
- | < | + | < |
KDE fournit un client aux fonctionnalité identique, Kldap, installable avec apt par exemple. | KDE fournit un client aux fonctionnalité identique, Kldap, installable avec apt par exemple. | ||
D' | D' | ||
+ | |||
+ | == Services utilisant LDAP == | ||
+ | |||
+ | Une rapide liste des services utilisant LDAP, afin que tout le monde puisses' | ||
+ | |||
+ | * PAM - Lisez donc la suite pour voir comment faire | ||
+ | * [[ldap-ssh|SSH]] - afin de pouvoir stocker la clef publique ssh dans l' | ||
=== Installation === | === Installation === | ||
Ligne 51: | Ligne 58: | ||
[...] | [...] | ||
</ | </ | ||
+ | |||
+ | <WRAP center round info 80%> | ||
+ | Par la suite, les modifications à l' | ||
+ | |||
+ | < | ||
+ | </ | ||
+ | |||
=== TLS === | === TLS === | ||
- | Nous voulons avoir une connexion chiffrée lorsque nous nous connectons depuis l' | + | Nous voulons avoir une connexion chiffrée lorsque nous nous connectons depuis l' |
- | Il est nécessaire, | + | Il est nécessaire, |
$ sudo adduser openldap tls | $ sudo adduser openldap tls | ||
Ligne 90: | Ligne 104: | ||
Pour plus d' | Pour plus d' | ||
- | Il faut ensuite modifier les options du daemon slapd pour lui dire comment se connecter sur nos interfaces réseau en allant modifier le fichier | + | Il faut ensuite modifier les options du daemon slapd pour lui dire comment se connecter sur nos interfaces réseau en allant modifier le fichier |
- | <config|h / | + | <code|h / |
[...] | [...] | ||
SLAPD_SERVICES=" | SLAPD_SERVICES=" | ||
[...] | [...] | ||
+ | </ | ||
Cela force l' | Cela force l' | ||
Ligne 108: | Ligne 123: | ||
== Test du fonctionnement de l' | == Test du fonctionnement de l' | ||
- | Une commande rapide que l'on peut utiliser est ldapsearch afin de lister l' | + | Une commande rapide que l'on peut utiliser est ldapsearch afin de lister l' |
$ ldapsearch -LLL -H ldapi:/// -b dc=anarcha, | $ ldapsearch -LLL -H ldapi:/// -b dc=anarcha, | ||
Ligne 132: | Ligne 147: | ||
== Test de la connexion TLS == | == Test de la connexion TLS == | ||
- | Depuis une machine distante, il est possible de vérifier que la cnnexion est chiffrée et valide. LDAP ćoute sur le port 636 pour le TLS. | + | Depuis une machine distante, il est possible de vérifier que la cnnexion est chiffrée et valide. LDAP éćoute sur le port 636 pour le TLS. |
< | < | ||
Ligne 194: | Ligne 209: | ||
Un Overlay est une surcouche à la base de donnée voulue, permettant d' | Un Overlay est une surcouche à la base de donnée voulue, permettant d' | ||
- | Les surcouches qui ont été configurés par ``ldapmodify`` avec les fichiers ldif supplémentaires qui sont dans ``/usrr/ | + | Les surcouches qui ont été configurés par '' |
- | La syntaxe du DN de chaque surcouche utilise une notation avec ``{0}`` précédant le nom du module, cela nous permet d' | + | La syntaxe du DN de chaque surcouche utilise une notation avec //{0}// précédant le nom du module, cela nous permet d' |
- | Chaque surcouche doit être activé en chargeant un module, et donc en modifiant l' | + | Chaque surcouche doit être activé en chargeant un module, et donc en modifiant l' |
== Surcouches activées == | == Surcouches activées == | ||
Ligne 215: | Ligne 230: | ||
Il faut cependant supprimer le schéma NIS d' | Il faut cependant supprimer le schéma NIS d' | ||
- | <WRAP center round alert 60%> | + | <WRAP center round alert 80%> |
Pensez à sauvegarder vos données AVANT de faire les modifications de schéma ci-dessous. | Pensez à sauvegarder vos données AVANT de faire les modifications de schéma ci-dessous. | ||
</ | </ | ||
Ligne 236: | Ligne 251: | ||
</ | </ | ||
- | Il faut maintenant aller modifier la configuration des schémas. Elle est disponible sous ``/ | + | Il faut maintenant aller modifier la configuration des schémas. Elle est disponible sous '' |
Ce répertoire contient des fichiers ldif ordonnés (commençant par {Z}avec Z le numéro d' | Ce répertoire contient des fichiers ldif ordonnés (commençant par {Z}avec Z le numéro d' | ||
Ligne 254: | Ligne 269: | ||
$ sudo rm / | $ sudo rm / | ||
$ sudo mv / | $ sudo mv / | ||
- | $ sudo ls -l / | + | $ sudo ls -l / |
-rw------- 1 openldap openldap 15596 juin 27 16:24 cn={0}core.ldif | -rw------- 1 openldap openldap 15596 juin 27 16:24 cn={0}core.ldif | ||
-rw------- 1 openldap openldap 11381 juin 27 16:24 cn={1}cosine.ldif | -rw------- 1 openldap openldap 11381 juin 27 16:24 cn={1}cosine.ldif | ||
Ligne 260: | Ligne 275: | ||
</ | </ | ||
- | <WRAP center round info 60%> | + | <WRAP center round info 80%> |
- | Sur notre configuration, les ACL étaient définie sur un attribut shadowLastChange fourni par le schéma | + | Nous supprimons (temporairement) un schéma, de fait certains éléments et attributs n' |
</ | </ | ||
Ligne 300: | Ligne 315: | ||
</ | </ | ||
- | Un rapide coup d'œil à la configuration lisible dans / | + | Un rapide coup d'œil à la configuration lisible dans '' |
< | < | ||
- | $ sudo ls / | + | $ sudo ls / |
-rw------- 1 openldap openldap 15596 juin 27 16:24 cn={0}core.ldif | -rw------- 1 openldap openldap 15596 juin 27 16:24 cn={0}core.ldif | ||
-rw------- 1 openldap openldap 11381 juin 27 16:24 cn={1}cosine.ldif | -rw------- 1 openldap openldap 11381 juin 27 16:24 cn={1}cosine.ldif | ||
Ligne 309: | Ligne 324: | ||
-rw------- 1 openldap openldap | -rw------- 1 openldap openldap | ||
</ | </ | ||
+ | |||
+ | <WRAP info center round 80%> | ||
+ | Si vous avez du commenter des entrées pour pouvoir démarrer le serveur et y ajouter le schéma NIS, arrêter le serveur, décommenter les entrées dans ''/ | ||
+ | </ | ||
+ | |||
=== Modifications des ACL === | === Modifications des ACL === | ||
Ligne 336: | Ligne 356: | ||
Sur la seconde base, on définit l' | Sur la seconde base, on définit l' | ||
- | Le fichier | + | Le fichier |
=== Peuplement des premiers items === | === Peuplement des premiers items === | ||
Vu que LDAP est un annuaire structuré, commençons par créer deux Organizational Unit (ou) qui nous servirons par la suite. Une première ou pour les utilisateurs et une seconde pour les groupes. | Vu que LDAP est un annuaire structuré, commençons par créer deux Organizational Unit (ou) qui nous servirons par la suite. Une première ou pour les utilisateurs et une seconde pour les groupes. | ||
+ | |||
+ | Nous en profitons aussi pour ajouter une OU System qui contiendra des comptes nécessaire au fonctionnement de LDAP ou pour connecter certains services à l' | ||
La structure de donnée de l' | La structure de donnée de l' | ||
Ligne 354: | Ligne 376: | ||
ou: Groups | ou: Groups | ||
objectClass: | objectClass: | ||
+ | |||
+ | dn: ou=System, | ||
+ | ou: System | ||
+ | objectClass: | ||
+ | |||
</ | </ | ||
Ligne 387: | Ligne 414: | ||
dn: ou=Groups, | dn: ou=Groups, | ||
ou: Groups | ou: Groups | ||
+ | objectClass: | ||
+ | |||
+ | # System, anarcha.pink | ||
+ | dn: ou=System, | ||
+ | ou: System | ||
objectClass: | objectClass: | ||
# search result | # search result | ||
- | search: | + | search: |
result: 0 Success | result: 0 Success | ||
Ligne 398: | Ligne 430: | ||
Nos OU ont été créées, tout va bien Nous allons pouvoir passer à la suite des opérations. | Nos OU ont été créées, tout va bien Nous allons pouvoir passer à la suite des opérations. | ||
+ | |||
+ | == Nobody == | ||
+ | Afin de pouvoir créer des groupOfNames vide, nous avons besoin d'un utilisateur nobody. Il existe également comme compte Unix et, généralement, | ||
+ | |||
+ | Sur le même principe, nous allons donc créer un utilisateur nobody, qui héritera des mêmes uid et gid que dans /etc/passwd d' | ||
+ | |||
+ | < | ||
+ | dn: uid=nobody, | ||
+ | uid: nobody | ||
+ | cn: nobody | ||
+ | sn: nobody | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | loginShell: / | ||
+ | homeDirectory: | ||
+ | uidNumber: 65534 | ||
+ | gidNumber: 65534 | ||
+ | |||
+ | </ | ||
+ | |||
+ | Il s' | ||
+ | |||
+ | < | ||
+ | $ ldapadd -xcWD cn=admin, | ||
+ | $ ldapsearch -xb dc=anarcha, | ||
+ | # nobody, System, anarcha.pink | ||
+ | dn: uid=nobody, | ||
+ | uid: nobody | ||
+ | cn: nobody | ||
+ | sn: nobody | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | loginShell: / | ||
+ | homeDirectory: | ||
+ | uidNumber: 65534 | ||
+ | gidNumber: 65534 | ||
+ | </ | ||
+ | |||
+ | Il faudra dans les [[ldap-acl|ACL]] s' | ||
== Groupe sudo == | == Groupe sudo == | ||
Ligne 416: | Ligne 491: | ||
cn: sudo | cn: sudo | ||
gidNumber: 27 | gidNumber: 27 | ||
+ | member: uid=nobody, | ||
</ | </ | ||
Ligne 423: | Ligne 499: | ||
Enter LDAP Password: | Enter LDAP Password: | ||
adding new entry " | adding new entry " | ||
+ | |||
+ | ==== Mapping de comptes LDAP vers des com[tes Unix ==== | ||
+ | |||
+ | Lorsque nous utilisons les outils LDAP depuis la ligne de commande, OpenLDAP utilise le fichier ''/ | ||
+ | |||
+ | C'est à ça que nous sert, entre autres, l' | ||
+ | |||
+ | '' | ||
+ | < | ||
+ | # | ||
+ | # LDAP Defaults | ||
+ | # | ||
+ | |||
+ | # See ldap.conf(5) for details | ||
+ | # This file should be world readable but not world writable. | ||
+ | |||
+ | BASE dc=anarcha, | ||
+ | URI | ||
+ | BINDDN | ||
+ | |||
+ | # | ||
+ | # | ||
+ | # | ||
+ | |||
+ | # TLS certificates (needed for GnuTLS) | ||
+ | TLS_CACERT | ||
+ | |||
+ | </ | ||
+ | |||
+ | Cela revient à préciser les paramètres suivant sur l' | ||
+ | |||
+ | $ ldapsearch -H ldappi:/// -b dc=anarcha, | ||
+ | |||
+ | Ce fichier mous permet de sensiblement réduire la liste des paramètres tapés à chaque commande. Et donc, comme nous utilison SASL, le serveur LDAP va utiliser unmécanisme approprié. Par défaut, et en absence d'un service sasl, le serveur OpenLDAP utilise le mécanise EXTERNAL. | ||
+ | |||
+ | < | ||
+ | $ ldapsearch -b cn=config -s base -b "" | ||
+ | SASL/ | ||
+ | SASL username: gidNumber=1006+uidNumber=1007, | ||
+ | SASL SSF: 0 | ||
+ | # extended LDIF | ||
+ | # | ||
+ | # LDAPv3 | ||
+ | # base <> with scope baseObject | ||
+ | # filter: (objectclass=*) | ||
+ | # requesting: supportedSASLMechanisms | ||
+ | # | ||
+ | |||
+ | # | ||
+ | dn: | ||
+ | supportedSASLMechanisms: | ||
+ | |||
+ | # search result | ||
+ | search: 3 | ||
+ | result: 0 Success | ||
+ | |||
+ | # numResponses: | ||
+ | # numEntries: 1 | ||
+ | |||
+ | </ | ||
+ | |||
+ | Ce que fait ce module // | ||
+ | |||
+ | < | ||
+ | $ ldapwhoami | ||
+ | SASL/ | ||
+ | SASL username: gidNumber=1006+uidNumber=1007, | ||
+ | SASL SSF: 0 | ||
+ | dn: gidNumber=1006+uidNumber=1007, | ||
+ | </ | ||
+ | |||
+ | Ce qui ne correspond pas à un utilisateur dans notre nbase LDAP. A noter aussi que l' | ||
+ | |||
+ | gidNumber=1006+uidNumber=1007, | ||
+ | |||
+ | Ce que nous voulons faire, c'est associé cette authentification à une entrée de notre base LDAP. Notre [[ldap-schema|schéma]] indique que notre utilisateurs, | ||
+ | |||
+ | Et LDAP fournit justement une variable permettant de mapper une authentification à un compte. En utilisant les Expressions Régulières (qui vaudraient le coup d'un atelier à part entière au Reset) et une syntaxe normalisée, | ||
+ | |||
+ | <WRAP center round info 60%> | ||
+ | Les URL LDAP obéissent à la [[https:// | ||
+ | |||
+ | Très rapidement, il s'agit d'une URI ayant cette structure là : | ||
+ | |||
+ | ldap://< | ||
+ | |||
+ | Des informations plus détaillée sont disponibles sur le site [[https:// | ||
+ | </ | ||
+ | |||
+ | Nous voulons, pour faire simple, que cette authentification là : | ||
+ | |||
+ | gidNumber=1006+uidNumber=1007, | ||
+ | |||
+ | Soit associé à cet utilisateur là (certains attributs ont été masqués): | ||
+ | |||
+ | < | ||
+ | # okhin, Users, anarcha.pink | ||
+ | dn: uid=okhin, | ||
+ | uid: okhin | ||
+ | cn: okhin | ||
+ | sn: okhin | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | uidNumber: 1007 | ||
+ | gidNumber: 1006 | ||
+ | memberOf: cn=sudo, | ||
+ | </ | ||
+ | |||
+ | L' | ||
+ | |||
+ | ldap:/// | ||
+ | |||
+ | Nous ne précisons pas de nom d' | ||
+ | |||
+ | * baseDN: **ou=Users, | ||
+ | * attrsList: **< | ||
+ | * scope: **one** On ne veut pas explorer tout l' | ||
+ | * filter: **(uidNumber=\$1)** On veut que le champ uidNumber ait la valeur du premier motif trouvé dans l' | ||
+ | |||
+ | L' | ||
+ | |||
+ | gidNumber=[0-9]+\+uidNumber=**([0-9}+)**, | ||
+ | |||
+ | Ne pas oublier d' | ||
+ | |||
+ | < | ||
+ | dn: cn=config | ||
+ | changetype: modify | ||
+ | add: olcAuthzRegexp | ||
+ | olcAuthzRegexp: | ||
+ | ldap:/// | ||
+ | |||
+ | </ | ||
+ | |||
+ | Et on vérifie avec ldapwhoami que tout va bien : | ||
+ | |||
+ | $ ldapwhoami | ||
+ | SASL/ | ||
+ | SASL username: gidNumber=1006+uidNumber=1007, | ||
+ | SASL SSF: 0 | ||
+ | dn: | ||
+ | |||
+ | Et voilà, nous sommes correctement identifié par LDAP. Nous n' | ||
+ | |||
+ | == Changement du schéma de hash de mots de passe par défaut == | ||
+ | Par défaut, lorsau' | ||
+ | |||
+ | Le ldiff suivant de ldapmodify permet de faire cela | ||
+ | |||
+ | < | ||
+ | dn: cn=config | ||
+ | changetype: modify | ||
+ | replace: olcPasswordHash | ||
+ | olcPasswordHash: | ||
+ | - | ||
+ | add: olcPasswordCryptSaltFormat | ||
+ | olcPasswordCryptSaltFormat: | ||
+ | |||
+ | </ |
ateliers/serveurmail/ldap.txt · Dernière modification : 2019/10/28 19:48 de okhin