L'annuaire LDAP du serveur est désormais complet et accessible, et le client obtient déjà de façon transparente les informations sur les comptes utilisateurs qu'il héberge : résolution NSS/PAM authentifiée via le compte de service nslcd-proxy et bind SASL/GSSAPI du principal machine validés dans la Section 4.4, « Configurer l'accès transparent à l'annuaire depuis le client ». Le schéma autofs.schema et les cartes de montage auto.master/auto.home ont, de leur côté, été publiés dans l'unité ou=automount de ce même annuaire (Section 6, « Intégrer la configuration de l'automontage dans l'annuaire LDAP »).
Il reste donc à obtenir, de façon tout aussi transparente, la localisation et le montage des répertoires personnels exportés par le service NFSv4 : c'est le rôle du service autofs, configuré pour interroger directement l'annuaire plutôt que des fichiers locaux. Cette partie termine la synthèse en configurant ce dernier maillon sur le client, puis en validant l'ensemble de la chaîne, de la résolution du compte jusqu'au montage NFSv4 sécurisé.
Le paquet autofs-ldap a déjà été installé sur le client, avec sa dépendance autofs, pour fournir le schéma de la partie automontage au serveur LDAP (Section 6.1, « Installer le support LDAP pour l'automontage »). Le démon automount lui-même n'a en revanche reçu aucune configuration : il faut lui indiquer qu'il doit interroger l'annuaire, avec quel serveur, sous quelle base de recherche, et avec quelle identité, puisque l'unité ou=automount est couverte par les mêmes règles olcAccess que ou=users : sa lecture exige un bind authentifié (Section 6.3, « Publier la configuration de l'automontage dans l'annuaire »).
|
Q222. |
Quelle est la modification à apporter au fichier Recherchez la directive qui spécifie la source des cartes d'automontage. |
|||
|
On ajoute une ligne grep ^automount /etc/nsswitch.conf ||\ echo -e "\nautomount: ldap" | sudo tee -a /etc/nsswitch.conf |
||||
|
Q223. |
Quels sont les paramètres à porter dans Rassemblez ces réglages dans un script unique, à l'image des scripts |
|||
|
Trois fichiers sont à écrire ou compléter :
cat << 'SCRIPT_EOF' >configure-autofs.sh
#!/usr/bin/env bash
# ==============================================================================
# configure-autofs.sh
# Configures autofs on Debian GNU/Linux to query LDAP maps over LDAPS
# using SASL/GSSAPI with the machine's host Kerberos principal.
# ==============================================================================
set -euo pipefail
readonly DOMAIN="lab.local"
readonly REALM="${DOMAIN^^}"
readonly CLIENT_FQDN="clnt.${DOMAIN}"
readonly HOST_PRINCIPAL="host/${CLIENT_FQDN}@${REALM}"
readonly KEYTAB_FILE="/etc/krb5.keytab"
# Validate host keytab presence
if [[ ! -s "${KEYTAB_FILE}" ]]; then
echo "[-] Error: System keytab '${KEYTAB_FILE}' not found or empty." >&2
echo " Ensure 'install-lab-host-keytab.sh' was executed successfully." >&2
exit 1
fi
echo "=== 1. Configuring /etc/nsswitch.conf for automount ==="
if grep -q '^automount:' /etc/nsswitch.conf; then
if ! grep -E '^automount:.*\<ldap\>' /etc/nsswitch.conf >/dev/null; then
sed -i -E 's/^(automount:[[:space:]]*)(.*)$/\1\2 ldap/' /etc/nsswitch.conf
fi
else
echo "automount: files ldap" >> /etc/nsswitch.conf
fi
echo "=== 2. Writing /etc/default/autofs ==="
cat << 'EOF' > /etc/default/autofs
# Master map entry point in LDAP DIT
MASTER_MAP_NAME="ou=auto.master,ou=automount,dc=lab,dc=local"
TIMEOUT=300
BROWSE_MODE="no"
LOGGING="verbose"
# LDAP Target URI (native LDAPS on port 636)
LDAP_URI="ldaps://ldap-srvr.lab.local"
SEARCH_BASE="ou=automount,dc=lab,dc=local"
# Schema mapping corresponding to autofs.schema (RFC 2307bis extended)
MAP_OBJECT_CLASS="automountMap"
ENTRY_OBJECT_CLASS="automount"
MAP_ATTRIBUTE="ou"
ENTRY_ATTRIBUTE="cn"
VALUE_ATTRIBUTE="automountInformation"
# Explicit path to the credentials configuration file
AUTH_CONF_FILE="/etc/autofs_ldap_auth.conf"
EOF
echo "=== 3. Writing /etc/autofs_ldap_auth.conf (SASL/GSSAPI) ==="
# Notes:
# - usetls/tlsrequired are set to "no" as transport is natively wrapped in ldaps://.
# - authtype="GSSAPI" with clientprinc instructs autofs to authenticate
# directly using the machine credentials stored in /etc/krb5.keytab.
# - Omitting 'user' prevents Cyrus SASL from injecting an incompatible authzid.
cat << EOF > /etc/autofs_ldap_auth.conf
<?xml version="1.0" ?>
<autofs_ldap_sasl_conf
usetls="no"
tlsrequired="no"
authrequired="yes"
authtype="GSSAPI"
clientprinc="${HOST_PRINCIPAL}"
/>
EOF
chmod 600 /etc/autofs_ldap_auth.conf
chown root:root /etc/autofs_ldap_auth.conf
echo "=== 4. Restarting autofs service ==="
systemctl restart autofs
echo ""
echo "[+] Success: autofs configured against LDAP using GSSAPI machine authentication."
SCRIPT_EOF
sudo bash configure-autofs.sh
|
||||
|
Q224. |
Comment vérifier que le service |
|||
systemctl status autofs sudo systemctl status autofs
● autofs.service - Automounts filesystems on demand
Loaded: loaded (/usr/lib/systemd/system/autofs.service; enabled; preset: enabled)
Active: active (running) since Mon 2026-09-07 18:13:10 CEST; 5s ago
Invocation: 17385f2a553d43438154449af7ef1fb3
Docs: man:autofs(8)
Process: 5743 ExecStart=/usr/sbin/automount $OPTIONS --pid-file /var/run/autofs.pid (code=exited, status=0/SUCCESS)
Main PID: 5744 (automount)
Tasks: 5 (limit: 971)
Memory: 3.7M (peak: 4.8M)
CPU: 69ms
CGroup: /system.slice/autofs.service
└─5744 /usr/sbin/automount --pid-file /var/run/autofs.pid
sept. 07 18:13:10 clnt systemd[1]: Starting autofs.service - Automounts filesystems on demand...
sept. 07 18:13:10 clnt (automount)[5743]: autofs.service: Referenced but unset environment variable evaluates to an empty string: OPTIONS
sept. 07 18:13:10 clnt automount[5744]: Starting automounter version 5.1.9, master map ou=auto.master,ou=automount,dc=lab,dc=local
sept. 07 18:13:10 clnt automount[5744]: using kernel protocol version 5.06
sept. 07 18:13:10 clnt automount[5744]: reading ldap master ou=auto.master,ou=automount,dc=lab,dc=local
sept. 07 18:13:10 clnt automount[5744]: connected to uri ldaps://ldap-srvr.lab.local
sept. 07 18:13:10 clnt automount[5744]: reading ldap map ldap:ou=auto.home,ou=automount,dc=lab,dc=local
sept. 07 18:13:10 clnt automount[5744]: mounted indirect on /ahome with timeout 300, freq 75 seconds
sept. 07 18:13:10 clnt systemd[1]: Started autofs.service - Automounts filesystems on demand.
La ligne |
Le service autofs configuré, un premier changement d'identité vers un compte de l'annuaire semble aboutir, mais révèle un blocage inattendu.
su - anakin
Password: su: warning: cannot change directory to /ahome/anakin: Permission non accordée -bash: /ahome/anakin/.bash_profile: Permission non accordéeanakin@clnt:/home/etu$ls -l /ahome/anakin/ ls: impossible d'ouvrir le répertoire '/ahome/anakin/': Panne d'accès au fichieranakin@clnt:/home/etu$mount | grep anakin nfs-srvr.lab.local:/home/anakin on /ahome/anakin type nfs4 \ (rw,nosuid,nodev,relatime,vers=4.2,rsize=131072,wsize=131072,namlen=255,hard, proto=tcp6,timeo=600,retrans=2,sec=krb5p, clientaddr=2001:db8:VVVV::baad:caff:fefe:6,local_lock=none, xprtsec=mtls,addr=2001:db8:VVVV::baad:caff:fefe:5,_netdev)
Le mot de passe a bien été accepté, le service autofs a bien déclenché le montage NFSv4 avec les options de sécurité attendues, et pourtant tout accès au contenu du répertoire est refusé.
|
Q225. |
Pourquoi l'accès au contenu du répertoire est-il refusé alors que l'authentification et le montage ont, en apparence, réussi ? |
|||
|
L'option Or aucune des identités déployées jusqu'ici n'est un ticket personnel : le principal klist klist: No credentials cache found while getting default ccache C'est cette absence de ticket, et non l'échec d'une authentification, qui provoque le refus |
||||
|
Q226. |
Le paquet libpam-krb5 a pourtant déjà été installé sur le client dès la partie Section 3.4, « Installer et initialiser le service Kerberos » : pourquoi n'a-t-il jamais délivré de ticket jusqu'ici ? |
|||
|
Le paquet libpam-krb5 déclenche cette commande automatiquement lors de son installation : le module est donc déjà intégré à la pile d'authentification commune depuis la partie Section 3.4, « Installer et initialiser le service Kerberos ». Vérifiez sa présence, aux côtés du module fourni par libpam-ldapd. grep -nE 'pam_krb5|pam_ldap' /etc/pam.d/common-auth 17:auth [success=3 default=ignore] pam_krb5.so minimum_uid=1000 19:auth [success=1 default=ignore] pam_ldap.so minimum_uid=1000 use_first_pass La pile PAM examine ces lignes dans leur ordre d'apparition : le premier module qui réussit interrompt les suivants grâce à son contrôle
|
||||
|
Q227. |
Comment provisionner, dans le royaume Kerberos, un principal par compte Skywalker, sans redemander de nouveaux mots de passe ? Les mots de passe individuels ont déjà été enregistrés sur le serveur lors de la création des comptes dans l'annuaire (Section 4.3, « Construire l'arbre et peupler l'annuaire »), précisément pour permettre cette synchronisation ultérieure avec le KDC. |
|||
|
Sur le serveur, réutilisez les fichiers cat << 'SCRIPT_EOF' >provision-skywalker-principals.sh
#!/usr/bin/env bash
set -euo pipefail
readonly DOMAIN="lab.local"
readonly REALM="${DOMAIN^^}"
readonly USERS=(padme anakin leia luke)
echo "=== 1. Provisioning Kerberos principals from the LDAP secrets ==="
for user in "${USERS[@]}"; do
PASS_FILE="${HOME}/.ldap_${user}_pass"
if [[ ! -s "${PASS_FILE}" ]]; then
echo "Error: Secret not found in ${PASS_FILE}." >&2
exit 1
fi
USER_PASS=$(head -n 1 "${PASS_FILE}")
sudo kadmin.local -q "addprinc -pw ${USER_PASS} ${user}@${REALM}" >/dev/null 2>&1 || \
sudo kadmin.local -q "cpw -pw ${USER_PASS} ${user}@${REALM}" >/dev/null 2>&1
echo " - ${user}@${REALM} : principal is synchronised with the LDAP directory"
done
echo -e "\nSuccess: Skywalkers' family Kerberos principals are provisioned in the realm ${REALM}"
SCRIPT_EOF
bash provision-skywalker-principals.sh
=== 1. Provisioning Kerberos principals from the LDAP secrets === - padme@LAB.LOCAL : principal is synchronised with the LDAP directory - anakin@LAB.LOCAL : principal is synchronised with the LDAP directory - leia@LAB.LOCAL : principal is synchronised with the LDAP directory - luke@LAB.LOCAL : principal is synchronised with the LDAP directory Success: Skywalkers' family Kerberos principals are provisioned in the realm LAB.LOCAL. Contrôlez la liste des principaux du royaume, en complément de la Section 3.4, « Installer et initialiser le service Kerberos ». sudo kadmin.local -q "listprincs" | grep -E '^(padme|anakin|leia|luke)@LAB.LOCAL' anakin@LAB.LOCAL leia@LAB.LOCAL luke@LAB.LOCAL padme@LAB.LOCAL
|
||||
|
Q228. |
Le test initial peut-il maintenant être repris avec succès ? |
|||
|
Depuis le client, reprenez exactement la même commande : aucune reconfiguration n'est nécessaire côté client, puisque su - anakin Password: Ticket cache: FILE:/tmp/krb5cc_10001_WeX3hF
Default principal: anakin@LAB.LOCAL
Valid starting Expires Service principal
07/09/2026 18:34:14 08/09/2026 04:34:14 krbtgt/LAB.LOCAL@LAB.LOCAL
renew until 08/09/2026 18:34:14
07/09/2026 18:34:14 08/09/2026 04:34:14 nfs/nfs-srvr.lab.local@LAB.LOCAL
renew until 08/09/2026 18:34:14
total 16K -rw------- 1 anakin anakin 64 6 sept. 17:24 .bash_history -rw-r--r-- 1 anakin anakin 220 6 sept. 17:22 .bash_logout -rw-r--r-- 1 anakin anakin 3,5K 6 sept. 17:22 .bashrc -rw-r--r-- 1 anakin anakin 807 6 sept. 17:22 .profile Le ticket obtenu automatiquement par |
Cette dernière sous-partie ne configure plus rien : elle isole les vérifications qui qualifient l'ensemble de la chaîne construite depuis la Section 4, « Déployer l'annuaire LDAP », en synthétisant les résultats déjà obtenus au fil des sous-parties précédentes.
|
Q229. |
Comment synthétiser l'ensemble des vérifications réalisées au fil de ce support de travaux pratiques ? |
|||||||||||||||||||||||||||
|
Le tableau ci-dessous reprend, dans l'ordre de la progression, chaque brique validée et la commande qui en apporte la preuve. Tableau 4. Synthèse des tests de validation
Les deux dernières lignes bouclent la démarche : elles apportent, côté client, la preuve que les options de sécurité choisies dès l'écriture du fichier |

![[Note]](/images/note.png)
![[Attention]](/images/caution.png)