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 avant de paramétrer l'accès à l'annuaire LDAP.
|
Q171. |
Quel sont les paquets à installer pour mettre en place le service web White Pages ? Recherchez sur le site LDAP Tool Box project, le lien de téléchargement direct du paquet Debian pour le service White Pages. Ensuite, identifiez les dépendances du service et installez les paquets supplémentaires |
|
À partir du lien Download du menu de la page principale, on trouve un lien direct vers les paquets proposés par le projet LDAP Tool Box project.
|
|
|
Q172. |
Comment activer l'accès au service Web de présentation ? Consultez les fichiers de documentation et de configuration fournis avec le paquet apache2. Repérez les instructions d'activation et de désactivation d'un site. Localisez les éléments spécifiques à la configuration du service White Pages pour activer le site. |
|
Dans cette section, vous devez ouvrir une connexion à l'annuaire LDAP depuis le service Web de pages blanches tout en respectant le principe de moindre privilège.
|
Q173. |
Comment créer un compte de service dédié aux pages blanches dans l'annuaire LDAP ? Reprenez la démarche suivie lors dans la Section 6.2, « Configurer l'accès transparent à l'annuaire LDAP sur un système client » avec la création du compte Codez un script de création du compte de service |
|
Voici un exemple de code pour le script #!/usr/bin/env bash
set -euo pipefail
readonly DOMAIN="lab.local"
readonly BASE_DN="dc=${DOMAIN%%.*},dc=${DOMAIN#*.}"
readonly USERS_OU="ou=users,${BASE_DN}"
readonly WP_UID="wp-proxy"
readonly WP_DN="uid=${WP_UID},${USERS_OU}"
readonly LDIF_FILE="/tmp/create_${WP_UID}.ldif"
readonly WP_PASS_FILE="${HOME}/.ldap_${WP_UID}_pass"
echo "=== 1. Password generation ==="
WP_PASS=$(openssl rand -base64 28 | cut -c -24)
rm -f "${WP_PASS_FILE}"
printf "%s" "${WP_PASS}" >"${WP_PASS_FILE}"
chmod 400 "${WP_PASS_FILE}"
WP_HASH=$(sudo slappasswd -o module-load=argon2.la -h "{ARGON2}" -s "${WP_PASS}")
echo "=== 2. LDIF file creation ==="
rm -f "${LDIF_FILE}"
cat <<EOF >"${LDIF_FILE}"
dn: ${WP_DN}
objectClass: inetOrgPerson
uid: ${WP_UID}
cn: White Pages Proxy Service
sn: Service
description: Read-only service account for LDAP Tool Box White Pages
userPassword: ${WP_HASH}
EOF
echo "=== 3. Insertion into the LDAP directory ==="
sudo ldapdelete -Y EXTERNAL -H ldapi:/// "${WP_DN}" 2>/dev/null || true
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f "${LDIF_FILE}"
rm -f "${LDIF_FILE}"
echo ""
echo "================================================================="
echo " Success: Service account '${WP_UID}' has been created."
echo " Bind DN: ${WP_DN}"
echo " Plaintext password (keep this for White Pages configuration):"
echo " -> ${WP_PASS}"
echo " (This secret is also saved in: ${WP_PASS_FILE})"
echo "================================================================="
Lancez le script de création du compte de service. bash srv13-create-wp-proxy.sh === 1. Password generation === === 2. LDIF file creation === === 3. Insertion into the LDAP directory === SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "uid=wp-proxy,ou=users,dc=lab,dc=local" ================================================================= Success: Service account 'wp-proxy' has been created. Bind DN: uid=wp-proxy,ou=users,dc=lab,dc=local Plaintext password (keep this for White Pages configuration): -> IcH... (This secret is also saved in: /home/etu/.ldap_wp-proxy_pass) ================================================================= |
|
|
Q174. |
Comment vérifier les droits d'accès du nouvel utilisateur avec les ACL existantes ? Affichez la liste des contrôles d'accès (ACL) configurés dans votre annuaire LDAP et évaluez les droits de l'utilisateur |
|
Affichez les ACLs. sudo ldapsearch -LLL -Y EXTERNAL -H ldapi:/// \
-b "olcDatabase={1}mdb,cn=config" \
olcAccess
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: olcDatabase={1}mdb,cn=config
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external
,cn=auth manage by * break
olcAccess: {1}to attrs=userPassword by self write by anonymous auth by * none
olcAccess: {2}to attrs=shadowLastChange by self write by * read
olcAccess: {3}to * by users read by * none
Évaluez les droits d'accès pour
|
|
|
Q175. |
Comment tester les accès du compte de service à l'annuaire depuis le système client ? Copiez le mot de passe généré plus haut et lancez des requêtes ldapsearch depuis le poste client. |
|
|
|
Q176. |
Comment paramétrer le service Web de pages blanches pour utiliser le compte de service ? Identifiez le fichier de configuration fourni avec le paquet Recherchez dans la documentation du projet LDAP Tool Box project la méthode recommandée pour affecter les valeurs des paramètres LDAP. |
|
Lancez une recherche des fichiers de configuration du paquet dpkg -L white-pages | grep 'etc.*conf' /etc/apache2/sites-available/white-pages.conf /etc/white-pages/config.inc.php C'est le fichier grep ^\$ldap /etc/white-pages/config.inc.php $ldap_url = "ldap://localhost";
$ldap_starttls = false;
$ldap_binddn = "cn=manager,dc=example,dc=com";
$ldap_bindpw = "secret";
$ldap_base = "dc=example,dc=com";
$ldap_user_base = "ou=users,".$ldap_base;
$ldap_user_filter = "(objectClass=inetOrgPerson)";
$ldap_login_attribute = "uid";
$ldap_login_filter = "(&$ldap_user_filter($ldap_login_attribute={login}))";
$ldap_scope = "sub"; # possible values: sub, one, base
$ldap_group_base = "ou=groups,".$ldap_base;
$ldap_group_filter = "(|(objectClass=groupOfNames)(objectClass=groupOfUniqueNames))";
$ldap_size_limit = 100;
La documentation du projet préconise la création d'un fichier de configuration local dédié. Voici un exemple d'application d'un jeu de paramètres LDAP complet avec un script appelé #!/usr/bin/env bash
set -euo pipefail
readonly WP_PASS_FILE=".ldap_wp-proxy_pass"
readonly WP_CONF_DIR="/etc/white-pages"
readonly WP_LOCAL_CONF_FILE="${WP_CONF_DIR}/config.inc.local.php"
readonly WP_PASS_PATH="${WP_CONF_DIR}/${WP_PASS_FILE}"
echo "=== 1. Copy wp-proxy password ==="
if [[ ! -f "${HOME}/${WP_PASS_FILE}" ]]; then
echo "Error: Password file '${WP_PASS_FILE}' not found."
exit 1
fi
sudo install -m 400 "${HOME}/${WP_PASS_FILE}" "${WP_CONF_DIR}/${WP_PASS_FILE}"
sudo chown www-data:www-data "${WP_CONF_DIR}/${WP_PASS_FILE}"
echo "=== 2. Create White Pages local configuration file ==="
# shellcheck disable=SC2250
cat <<'EOF' |
<?php
$ldap_url = "ldaps://ldap-srvr.lab.local:636";
$ldap_starttls = false;
$ldap_binddn = "uid=wp-proxy,ou=users,dc=lab,dc=local";
$ldap_bindpw = trim(file_get_contents('__WP_PASS_PATH__'));
$ldap_base = "dc=lab,dc=local";
$ldap_user_base = "ou=users,".$ldap_base;
$ldap_user_filter = "(objectClass=inetOrgPerson)";
$ldap_login_attribute = "uid";
$ldap_login_filter = "(&$ldap_user_filter($ldap_login_attribute={login}))";
$ldap_scope = "sub";
$ldap_group_base = "ou=groups,".$ldap_base;
$ldap_group_filter = "(|(objectClass=groupOfNames)(objectClass=groupOfUniqueNames)(objectClass=posixGroup))";
$ldap_size_limit = 100;
EOF
sed "s|__WP_PASS_PATH__|${WP_PASS_PATH}|g" | sudo tee "${WP_LOCAL_CONF_FILE}" >/dev/null
echo "=== 3. Set permissions for the local configuration file ==="
sudo chown www-data:www-data "${WP_LOCAL_CONF_FILE}"
sudo chmod 600 "${WP_LOCAL_CONF_FILE}"
echo "=== 4. Test Apache configuration ==="
sudo apache2ctl configtest
echo "=== 5. Reload Apache configuration ==="
sudo systemctl reload apache2
echo "================================================================="
echo " Success: White Pages has been configured to use the 'wp-proxy' service account."
echo " Local configuration file: ${WP_LOCAL_CONF_FILE}"
echo "================================================================="
Lancez le script : bash configure-wp.sh === 1. Copy wp-proxy password === === 2. Create White Pages local configuration file === === 3. Set permissions for the local configuration file === === 4. Test Apache configuration === Syntax OK === 5. Reload Apache configuration === ================================================================= Success: White Pages has been configured to use the 'wp-proxy' service account. Local configuration file: /etc/white-pages/config.inc.local.php ================================================================= Consultez la page du service Web pour afficher les listes des utilisateurs et des groupes. |
l'objectif de cette section est d'enrichir le service Web à partir de manipulations sur les attributs des utilisateurs de l'annuaire LDAP.
Dans cette partie, vous avez montré que l'annuaire LDAP ne se limite pas à un référentiel d'identités pour les systèmes Unix. En déployant le service White Pages du projet LDAP Tool Box, en le configurant pour qu'il interroge l'annuaire exclusivement via ldaps://, et en automatisant la gestion de l'attribut jpegPhoto à l'aide d'un script Bash paramétré, vous avez exposé les comptes publiés dans un trombinoscope accessible depuis n'importe quel navigateur, tout en conservant la chaîne de confiance TLS établie dans la partie précédente.
