Traduction(s) : English

(!) ?Discussion


Configuration de l'authentification LDAP

Il y a principalement deux manières de configurer PAM pour utiliser l'identification LDAP. La première utilise le module pam_ldap du paquet libpam-ldap qui essaiera de se connecter au serveur LDAP pour vérifier les mots de passe. Avec la seconde méthode, les mots de passe hachés sont fournis par le serveur LDAP aux clients qui utilisent NSS et le module traditionnel pam_unix pour l'authentification. pam_ldap peut être utilisé dans ce cas pour changer les mots de passe. Les deux solutions ont leurs avantages et inconvénients.

Dans les deux cas, les utilisateurs sont mis à disposition via NSS. Seulement pour la deuxième méthode, il faut que getent shadow revoie les mots de passe hachés lorsque lancé en root.

La solution pam_ldap pure permet de limiter les connexions selon la façon dont les utilisateurs sont renseignés dans le annuaire (par exemple, autoriser uniquement aux utilisateurs d'une partie de l'annuaire, etc). Elle requière aussi moins de droits d'accès aux répertoire LDAP et ne transmet pas les mots de passe hachés.

La solution pam_unix sera probablement plus familière aux administrateurs systèmes.

Configuration de PAM avec pam_ldap

Afin d'activer globalement l'authentification LDAP par PAM, il faut configurer le fichier /etc/pam_ldap.conf à cet effet et éditer les fichiers /etc/pam.d/common-* en y mettant par exemple :

/etc/pam.d/common-account:

account     required      pam_unix.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     [default=bad success=ok user_unknown=ignore] pam_ldap.so
account     required      pam_permit.so

/etc/pam.d/common-auth:

auth    sufficient      pam_unix.so nullok_secure
auth    requisite       pam_succeed_if.so uid >= 1000 quiet
auth    sufficient      pam_ldap.so use_first_pass
auth    required        pam_deny.so

/etc/pam.d/common-password:

password    sufficient    pam_unix.so md5 obscure min=4 max=8 nullok try_first_pass
password    sufficient    pam_ldap.so
password    required      pam_deny.so

/etc/pam.d/common-session:

session     required      pam_limits.so
session     required      pam_unix.so
session     optional      pam_ldap.so

Veuillez noter qu'il existe de nombreuses méthodes pour configurer PAM, selon votre situation particulière et vos préférences. Ce qui précède permet d'utiliser pam_ldap uniquement si le numéro de l'utilisateur est inférieur à 1000 (c'est à dire les comptes d'utilisateurs normaux).

Configuration de PAM avec pam_unix

(il y a eu des cas où les instructions qui suivent n'ont pas fonctionné comme prévu, merci de corriger au besoin)

Il est aussi possible d'utiliser simplement l'ancien pam_unix en s'assurant que le fichier /etc/nsswitch.conf contient par exemple shadow: files ldap et que getent shadow revoie les mots de passe hachés.

Si vous avez seulement besoin de l'authentification, aucun changement à la configuration de PAM n'est nécessaire. Pour changer les mots de passe, le shell de connexion et le gecos installez libpam-ldap, configurez le fichier /etc/pam_ldap.conf et éditez le fichier /etc/pam.d/common-passwd pour qu'il contienne par exemple :

password   required   pam_ldap.so ignore_unknown_user md5
password   optional   pam_unix.so nullok obscure min=4 max=8 md5 try_first_pass

Notez l'option 'md5', qui fera en sorte que les mots de passe soit cryptés en MD5 quand ils seront changés.

Création du répertoire home à la connexion

Mettez ce qui suit dans le fichier /etc/pam.d/common-session si vous voulez créer les répertoires home automatiquement lorsque les utilisateurs se connectent pour la première fois :

session     required      pam_mkhomedir.so skel=/etc/skel umask=0022

Autoriser la connexion en fonction de l'hôte

Le module pam_ldap offre la possibilité de spécifier une liste d'hôtes sur lesquels un utilisateur sera autorisé à se connecter : cela correspond à l'attribut "host" dans LDAP. Cet attribut peut être renseigné plusieurs fois pour chaque utilisateur. Si l'une des entrées correspond au nom de l'hôte (sur lequel on tente de se connecter), la connexion est autorisée. Sinon, l'accès est refusé.

Cette fonctionnalité est activée en spécifiant pam_check_host_attr yes dans le fichier /etc/pam_ldap.conf. Lorsqu'elle est activé, la fonction account de pam_ldap va opérer des vérifications et retourner une erreur si aucun attribut host n'est présent.

Il est possible de mettre un préfixe "!" à l'attribut "host" d'un utilisateur pour lui refuser l'accès à cet hôte. C'est principalement utile en conjonction avec l'entrée spéciale "*" qui permet l'accès à tous les hôtes.

Pour ajouter l'attribut "host" à un utilisateur, celui-ci doit avoir un objectClass qui le supporte. L'objectClass "account" a cet attribut, mais n'est pas compatible avec l'objectClass "inetOrgPerson". Pour contourner ceci, vous pouvez utiliser le schéma "ldapns" fournit avec le paquet libpam-ldap. Ce schéma fournit un objectClass "hostObject", qui a le bon attribut "host".

Pour activer ce schéma, ajouter la ligne suivante à votre fichier slapd.conf :

include         /usr/share/doc/libpam-ldap/ldapns.schema

Enfin, veillez à ce que la résolution du nom d'hôte soit possible. pam_ldap va tenter de résoudre le nom de l'hôte, ou de trouver des alias (tels que ceux listés dans /etc/hosts). Si la résolution du nom d'hôte n'est pas possible, l'accès sera refusé.

Autoriser la connexion en fonction du groupe

Une tâche commune est de restreindre la connexion à un certain groupe LDAP. Avec NIS, vous auriez fait cela en ajustant précautionneusement le fichier /etc/passwd. Avec LDAP, la façon la plus simple de faire est d'utiliser le module pam_access qui est fourni avec libpam-modules.

Ajoutez la ligne suivante au fichier /etc/pam.d/common-auth :

account required    pam_access.so

Ceci va activer /etc/security/access.conf, que vous pouvez ajuster comme suit :

# disallow all except people in the login group and root
-:ALL EXCEPT root login:ALL EXCEPT LOCAL

Ceci suppose que vous avez un posixGroup nommé login dans votre arbre et NSS correctement configuré. Attention, assurez-vous que les utilisateurs locaux puissent toujours se connecter dans le cas où LDAP ne fonctionnerait plus.

Les permissions du serveur LDAP

Afin d'utiliser 'chsh' et 'chfn' pour mettre à jour LDAP, vous devez renseigner les bons paramètres dans leurs entrées /etc/pam.d/, et vous devez configurer slapd.conf afin d'autoriser les utilisateurs à mettre à jour leurs entrées. Si besoin, éditez le fichier slapd.conf et ajoutez par exemple :

  access to attrs=loginShell
         by dn="cn=admin,dc=FOO,dc=BAR" write
         by self write
         by * read

  access to attrs=gecos
         by dn="cn=admin,dc=FOO,dc=BAR" write
         by self write
         by * read