5. accès à l'annuaire LDAP depuis un service web

Du point de vue métier, les manipulations à base de fichiers LDIF sont réservées aux traitements en volume réalisés par les administrateurs système. Les développeurs disposent de bibliothèques fournies avec les langages de programmation. Dans la plupart des cas, les développements ont pour but de fournir une interface web.

Le projet LDAP Tool Box project propose un outil baptisé white pages qui permet de constituer un trombinoscope des utilisateurs enregistrés dans un annuaire LDAP.

l'objectif de cette section est d'installer le service web White Pages et de compléter les attributs des utilisateurs de l'annuaire avec une photo.

Q30.

Quel est le paquet à installer pour mettre en place le service web White Pages ?

Rechercher sur le site LDAP Tool Box project, le lien de téléchargement direct du paquet Debian pour le service White Pages.

À partir du lien Download en bas de la page principale, on trouve un lien direct vers le paquet.

Après le téléchargement, l'installation nécessite quelques ajustements compte tenu des dépendances des paquets entre les différentes versions du langage PHP et du framework Smarty.

wget https://ltb-project.org/archives/white-pages_0.4-2_all.deb
sudo dpkg -i white-pages_0.4-2_all.deb
sudo apt -y -f install
sudo apt install smarty3

Q31.

Comment activer l'accès au service web ?

Consulter les fichiers de documentation et de configuration fournis avec le paquet apache2. Repérer les instructions d'activation et de désactivation d'un site. Retrouver les éléments spécifiques à la configuration du service White Pages.

Cette question comprend plusieurs étapes.

  1. Le paquet apache2 comprend une liste d'outils dédiés aux manipulations sur les sites et leur configuration.

    dpkg -L apache2 | grep "bin.*a2"
    /usr/sbin/a2enmod
    /usr/sbin/a2query
    /usr/sbin/a2disconf
    /usr/sbin/a2dismod
    /usr/sbin/a2dissite
    /usr/sbin/a2enconf
    /usr/sbin/a2ensite
  2. On utilise a2dissite pour désactiver le site par défaut et a2ensite pour activer les pages blanches.

    sudo a2dissite 000-default
    sudo a2ensite white-pages
    sudo apachectl configtest
    sudo systemctl reload apache2

    La consultation de la page web donne le résultat suivant.

  3. Les paramètres du nouveau site sont donnés dans le fichier /etc/apache2/sites-available/white-pages.conf.

Q32.

Comment paramétrer l'accès à l'annuaire LDAP à partir du service web ?

Identifier les fichiers de configuration fournis avec le paquet white-pages.

C'est le fichier /usr/share/white-pages/conf/config.inc.php qui contient les éléments d'accès à l'annuaire LDAP. Voici un extrait de ce fichier avec les lignes utiles complétées avec le contexte de ce support de travaux pratiques.

# grep ^\$ldap /usr/share/white-pages/conf/config.inc.php
$LDAP_url = "ldap://localhost";
$LDAP_starttls = false;
$LDAP_binddn = "cn=admin,dc=lab,dc=stri";
$LDAP_bindpw = "xxxxxx";
$LDAP_base = "dc=lab,dc=stri";
$LDAP_user_base = "ou=people,".$ldap;
$LDAP_user_filter = "(objectclass=inetorgperson)";
$LDAP_size_limit = 100;

Une fois le fichier modifié, il faut recharger la configuration du service web.

sudo systemctl reload apache2

La consultation de la rubrique pages blanches donne le résultat ci-dessous. L'intérêt de cette manipulation est de montrer que l'on peut compléter les attributs d'un utilisateur de l'annuaire avec une photo. Cette opération est l'objet des questions suivantes.

Q33.

Quel est l'attribut de la classe inetorgperson qui correspond à une photo d'identité ?

Rechercher les options de la commande ldapsearch qui permettent d'extraire la liste des attributs de la classe inetorgperson.

On obtient l'information en deux temps.

  • On identifie le contexte de la classe recherchée en premier. Voici un exemple de requête côté serveur.

    sudo ldapsearch -LLL -Y EXTERNAL -H ldapi:/// \
            -b "cn=config" | grep -i inetorgperson
    SASL/EXTERNAL authentication started
    SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
    SASL SSF: 0
    dn: cn={3}inetorgperson,cn=schema,cn=config
    cn: {3}inetorgperson
    olcObjectClasses: {0}( 2.16.840.1.113730.3.2.2 NAME 'inetOrgPerson' DESC 'RFC2
  • Une fois le contexte connu avec précision, on peut extraire la liste des attributs relatifs à la classe inetorgperson.

    Dans la liste ci-dessous, on repère l'attribut jpegphoto qui correspond à notre besoin.

    sudo ldapsearch -LLL -Y EXTERNAL -H ldapi:/// \
            -b "cn={3}inetorgperson,cn=schema,cn=config"
    SASL/EXTERNAL authentication started
    SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
    SASL SSF: 0
    dn: cn={3}inetorgperson,cn=schema,cn=config
    objectClass: olcSchemaConfig
    cn: {3}inetorgperson
    olcAttributeTypes: {0}( 2.16.840.1.113730.3.1.1 NAME 'carLicense' DESC 'RFC279
     8: vehicle license or registration plate' EQUALITY caseIgnoreMatch SUBSTR cas
     eIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
    olcAttributeTypes: {1}( 2.16.840.1.113730.3.1.2 NAME 'departmentNumber' DESC '
     RFC2798: identifies a department within an organization' EQUALITY caseIgnoreM
     atch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
    olcAttributeTypes: {2}( 2.16.840.1.113730.3.1.241 NAME 'displayName' DESC 'RFC
     2798: preferred name to be used when displaying entries' EQUALITY caseIgnoreM
     atch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SI
     NGLE-VALUE )
    olcAttributeTypes: {3}( 2.16.840.1.113730.3.1.3 NAME 'employeeNumber' DESC 'RF
     C2798: numerically identifies an employee within an organization' EQUALITY ca
     seIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.12
     1.1.15 SINGLE-VALUE )
    olcAttributeTypes: {4}( 2.16.840.1.113730.3.1.4 NAME 'employeeType' DESC 'RFC2
     798: type of employment for a person' EQUALITY caseIgnoreMatch SUBSTR caseIgn
     oreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
    olcAttributeTypes: {5}( 0.9.2342.19200300.100.1.60 NAME 'jpegPhoto' DESC 'RFC2
     798: a JPEG image' SYNTAX 1.3.6.1.4.1.1466.115.121.1.28 )
    olcAttributeTypes: {6}( 2.16.840.1.113730.3.1.39 NAME 'preferredLanguage' DESC
      'RFC2798: preferred written or spoken language for a person' EQUALITY caseIg
     noreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.
     15 SINGLE-VALUE )
    olcAttributeTypes: {7}( 2.16.840.1.113730.3.1.40 NAME 'userSMIMECertificate' D
     ESC 'RFC2798: PKCS#7 SignedData used to support S/MIME' SYNTAX 1.3.6.1.4.1.14
     66.115.121.1.5 )
    olcAttributeTypes: {8}( 2.16.840.1.113730.3.1.216 NAME 'userPKCS12' DESC 'RFC2
     798: personal identity information, a PKCS #12 PFX' SYNTAX 1.3.6.1.4.1.1466.1
     15.121.1.5 )
    olcObjectClasses: {0}( 2.16.840.1.113730.3.2.2 NAME 'inetOrgPerson' DESC 'RFC2
     798: Internet Organizational Person' SUP organizationalPerson STRUCTURAL MAY
     ( audio $ businessCategory $ carLicense $ departmentNumber $ displayName $ em
     ployeeNumber $ employeeType $ givenName $ homePhone $ homePostalAddress $ ini
     tials $ jpegPhoto $ labeledURI $ mail $ manager $ mobile $ o $ pager $ photo
     $ roomNumber $ secretary $ uid $ userCertificate $ x500uniqueIdentifier $ pre
     ferredLanguage $ userSMIMECertificate $ userPKCS12 ) )

Q34.

Quelle est la syntaxe du fichier LDIF qui permet de modifier l'attribut jpegphoto d'un utilisateur de l'annuaire ?

Rechercher un exemple de modification d'attribut avec la commande ldapmodify.

Rechercher aussi un fichier JPEG qui fasse office de photo d'identité.

Tout d'abord, on dépose le fichier jpeg à utiliser dans le dossier /var/tmp à titre d'exemple.

ls -l /var/tmp/leia.jpg
        -rw-r--r-- 1 etu etu 83837 19 août  03:15 /var/tmp/leia.jpg

La syntaxe du fichier LDIF est relativement simple une fois que l'on a bien identifié le contexte.

cat > leia-photo.ldif << EOF
dn: uid=leia,ou=people,dc=lab,dc=stri
changetype: modify
add: jpegphoto
jpegphoto:<file:///var/tmp/leia.jpg
EOF

Enfin, on applique la modification dans l'annuaire LDAP.

sudo ldapmodify -x -H ldap:/// -D "cn=admin,dc=lab,dc=stri" -W -f leia-photo.ldif

Le résultat est visible sur la copie d'écran de navigateur web ci-dessus.