Outils pour utilisateurs

Outils du site


commun:authentification_lldap_sssd_client_arch

Ceci est une ancienne révision du document !


Client sssd (Arch / CachyOS) — login système via LLDAP

Dernière mise à jour : juin 2026

État : validé sur CachyOS (portable-tuxedo) — login en ligne fonctionnel via sssd.

Voir la doc serveur pour LLDAP/réseau/UID-GID, et la doc client Debian pour les détails communs sssd. Cette page ne couvre que les spécificités Arch/CachyOS (NSS et PAM ne se configurent PAS automatiquement, contrairement à Debian).

Installation

sudo pacman -S sssd

(tire les modules NSS/PAM nécessaires ; pam_sss.so dans /usr/lib/security/)

Pour les tests LDAP en ligne de commande : sudo pacman -S openldap (fournit ldapsearch).

Certificat CA

sudo mkdir -p /etc/ssl/lldap
sudo scp maitre@192.168.1.9:/mnt/stockage/docker/data/lldap/ca-cert.pem /etc/ssl/lldap/ca-cert.pem
sudo chmod 644 /etc/ssl/lldap/ca-cert.pem
sudo chown root:root /etc/ssl/lldap/ca-cert.pem

sssd.conf

Identique à la config Debian (voir doc client Debian pour le fichier complet et le détail des options). Emplacement /etc/sssd/sssd.conf, permissions 600 root:root obligatoires.

Points clés du mapping (rappel) :

  • ldap_uri = ldaps://auth.beafrancois.fr:6360
  • ldap_schema = rfc2307bis
  • ldap_user_object_class = posixAccount / ldap_group_object_class = groupOfNames / ldap_group_member = member
  • access_provider = simple + simple_allow_groups = famille
  • cache_credentials = True + offline_credentials_expiration = 0 (dans [pam])
  • ldap_user_shell = unixShell + default_shell = /bin/bash (fallback)
  • PAS de auto_private_groups, PAS de groupes privés (groupe primaire = famille 302)
sudo chmod 600 /etc/sssd/sssd.conf
sudo chown root:root /etc/sssd/sssd.conf
sudo sssctl config-check        # doit retourner 0 issue
sudo systemctl enable --now sssd
sudo sssctl domain-status beafrancois.fr   # doit afficher Online

NSS (à faire à la main sur Arch)

Arch ne modifie PAS /etc/nsswitch.conf automatiquement. Éditer :

passwd: files sss systemd
group:  files [SUCCESS=merge] sss [SUCCESS=merge] systemd

Le [SUCCESS=merge] sur group permet de fusionner les appartenances locales ET LLDAP (un user peut cumuler ses groupes système locaux et ses groupes LLDAP).

Vérifier :

sudo systemctl restart sssd
getent passwd francois     # doit afficher uid=10000 gid=302 ... /usr/bin/zsh

PAM (à faire à la main sur Arch)

Arch n'a PAS pam-auth-update. Éditer /etc/pam.d/system-auth à la main.

Sauvegarder d'abord :

sudo cp /etc/pam.d/system-auth /etc/pam.d/system-auth.bak

⚠️ POINT CRITIQUE — try_first_pass (pas use_first_pass) : Avec use_first_pass, pam_sss attend un mot de passe déjà mis en cache par un module précédent ; dans la stack Arch (faillock + systemd_home), ce cache n'est pas peuplé au bon moment → pam_sss reçoit un mot de passe vide → Invalid credentials(49) / échec d'auth. Utiliser try_first_pass (redemande le mot de passe si absent du cache).

/etc/pam.d/system-auth (version validée) :

#%PAM-1.0

auth       required                    pam_faillock.so      preauth
-auth      [success=3 default=ignore]  pam_systemd_home.so
auth       [success=2 default=ignore]  pam_sss.so           try_first_pass forward_pass
auth       [success=1 default=bad]     pam_unix.so          try_first_pass nullok
auth       [default=die]               pam_faillock.so      authfail
auth       optional                    pam_permit.so
auth       required                    pam_env.so
auth       required                    pam_faillock.so      authsucc

-account   [success=2 default=ignore]  pam_systemd_home.so
account    [success=1 default=ignore]  pam_sss.so
account    required                    pam_unix.so
account    optional                    pam_permit.so
account    required                    pam_time.so

-password  [success=2 default=ignore]  pam_systemd_home.so
password   sufficient                  pam_sss.so
password   required                    pam_unix.so          try_first_pass nullok shadow
password   optional                    pam_permit.so

-session   optional                    pam_systemd_home.so
session    required                    pam_limits.so
session    required                    pam_unix.so
session    optional                    pam_mkhomedir.so     skel=/etc/skel umask=0077
session    optional                    pam_sss.so
session    optional                    pam_permit.so

⚠️ Ligne pam_mkhomedir.so indispensable : sur Arch, rien ne crée le home d'un utilisateur LLDAP à la première connexion (contrairement à Debian où pam-auth-update coche « create home dir »). Sans cette ligne dans la phase session, le login réussit mais le home n'existe pas. skel=/etc/skel copie les fichiers de base, umask=0077 rend le home privé.

Pièges spécifiques Arch

su ne teste PAS sss

/etc/pam.d/su appelle pam_unix.so en dur (il n'inclut system-auth que pour password). Donc su - <user_ldap> échoue toujours, même avec une config sss correcte — ce n'est PAS un bon test. Tester avec un vrai login : TTY (Ctrl+Alt+F3) ou ssh.

Pour que su fonctionne aussi avec sss (optionnel), remplacer dans /etc/pam.d/su les lignes auth/account/session required pam_unix.so par include system-auth.

ssh : KbdInteractiveAuthentication

Si l'auth ssh par mot de passe échoue alors que pam_sss est bien appelé, vérifier /etc/ssh/sshd_config.d/99-archlinux.conf : KbdInteractiveAuthentication doit être à yes (sinon ssh ne transmet pas le mot de passe à PAM correctement). sudo systemctl restart sshd après modif.

faillock (verrouillage après échecs)

Les tentatives ratées répétées verrouillent le compte (account locked). Débloquer :

sudo faillock --user francois --reset
sudo faillock --user francois            # vérifier (liste vide = OK)

Bascule d'un compte local en collision (cas francois)

Quand un compte local porte le même nom qu'un compte LLDAP mais avec un UID différent (local 1000 vs LLDAP 10000) :

  1. Créer un compte admin local de secours (autre nom) AVANT toute manip, et valider son sudo :
sudo useradd -m -G wheel,network,audio,storage,video,libvirt,users,rfkill,lp,sys -s /bin/bash beafrancois
sudo passwd beafrancois
# se déconnecter, se reconnecter en beafrancois, vérifier : sudo whoami -> root
(sur Arch, sudo = groupe ''wheel'' ; vérifier ''%wheel ALL=(ALL) ALL'' dans ''/etc/sudoers.d/'')
  1. Sauvegarder les infos du compte local avant suppression (filet) :
getent passwd francois >> ~/francois-backup.txt
getent group francois >> ~/francois-backup.txt
  1. Supprimer le compte local SANS -r (préserve le home) — en étant connecté en beafrancois, pas en francois :
sudo pkill -u francois 2>/dev/null
sudo userdel francois          # le home /home/francois reste intact
  1. Installer/configurer sssd (ci-dessus) pour que francois LLDAP (uid 10000) soit résolu.
  1. Réattribuer le home au nouvel UID LLDAP (les fichiers étaient à l'ancien UID 1000) :
sudo chown -R 10000:302 /home/francois
  1. Valider le login francois (TTY ou ssh) puis l'offline.

Tests de validation

getent passwd francois        # uid=10000 gid=302 ... /home/francois /usr/bin/zsh
id francois                   # groupes : 302(famille) + secondaires éventuels
ssh francois@localhost        # login en ligne (vrai vecteur, PAS su)

Bind direct (pour isoler un souci d'auth : si le bind marche mais pas le login, le problème est PAM, pas LDAP) :

LDAPTLS_CACERT=/etc/ssl/lldap/ca-cert.pem ldapsearch -x \
  -H ldaps://auth.beafrancois.fr:6360 \
  -D "uid=francois,ou=people,dc=beafrancois,dc=fr" -w 'MDP' \
  -b "dc=beafrancois,dc=fr" "(uid=francois)" dn

Offline (réseau coupé, vrai login TTY/ssh) — après un login en ligne réussi qui peuple le cache. Voir doc client Debian pour la procédure détaillée et le piège MPG.

Sécurité

  • Garder le compte admin local de secours (beafrancois) hors LLDAP — accès garanti si l'annuaire est indisponible.
  • offline_credentials_expiration = 0 (cache illimité) → LUKS recommandé sur le portable (un portable volé jamais reconnecté garde l'accès indéfiniment).
commun/authentification_lldap_sssd_client_arch.1785057727.txt.gz · Dernière modification : de francois

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki