samedi 9 juillet 2011

Installer pam_mount sur un serveur CentOS 5.6 avec authentification ActiveDirectory

Curieusement, sur CentOS/RHEL 5.x, s'il est facile de configurer pam_ldap, il est beaucoup plus compliqué d'installer et de configurer pam_mount.

Pam_mount permet de faire un montage automatique d'un partage de fichier (CIFS, NFS etc.) à l'authentification de l'utilisateur sur un système Linux et le tout, sans avoir à retaper son mot de passe (SSO).

Il peut s'appuyer entres autres sur pam_ldap pour exploiter, par exemple, une authentification Active Directory avec montage automatique du HomeDirectory de l'utilisateur.

C'est plutôt cool :)
Quand ça marche... Malheureusement il n'y a pas de paquet RPM pour CentOS/RHEL 5.x, quasiment aucun document synthétique sur le web, du coup faut tout faire à la main. Dans cet article, je vais utiliser un paquet RPM existant, mais il est possible de compiler une version plus récente de pam_mount (pam_mount sur sourceforge) ; et je vais me concentrer uniquement sur l'authentification LDAP via ActiveDirectory (il est possible d'utiliser Kerberos, Winbid ou un OpenLDAP).

Étape 1 : s'assurer que l'authentification LDAP est fonctionnelle

Pour cet exemple je vais me concentrer uniquement sur LDAP via ActiveDirectory.

Théoriquement, un simple # setup permet de configurer l'authentification LDAP, toutefois un tour dans /etc/ldap.conf est souvent nécessaire suivant l'infrastructure.

Voici les lignes qui doivent au minimum être renseignées pour interconnecter votre serveur Red Hat / CentOS avec Active Directory :
host ip serveur ad
base dc=domaine,dc=local
uri ldap://ip ou nom serveur ad
ldap_version 3
binddn cn=compte_ldapviewer,cn=users,dc=domaine,dc=local (indiquez le chemin d'un compte limité mais autorisé à consulter l'annuaire)
bindpw
scope sub
timelimit 120
bind_timelimit 120
idle_timelimit 3600
pam_login_attribute sAMAccountName
(important, indique quel est le champs LDAP à utiliser pour le login)

Et votre fichier /etc/pam.d/system-auth doit ressembler à ceci :
auth required pam_env.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth sufficient pam_ldap.so use_first_pass
auth required pam_deny.so 
account required pam_unix.so broken_shadow
account sufficient pam_succeed_if.so uid < 500 quiet
account [default=bad success=ok user_unknown=ignore] pam_ldap.so

account required pam_permit.so
 
(la suite ne change pas)

La commande # authconfig --test permet de vérifier l'état de vos modules pam. Vous devez avoir, pour la partie LDAP, une sortie de ce type :
pam_ldap is enabled

LDAP+TLS is disabled
LDAP server = "ip du serveur ou chemin ldap://"
LDAP base DN = "dc=domaine,dc=local"
 Faites des tests d'authentification, vous pouvez faire un # tail -f /var/log/secure dans un second terminal pour vérifier le bon fonctionnement de votre configuration.

Pour que les utilisateurs puissent s'authentifier sur le serveur, il suffit de leurs créer un compte le plus simplement du monde, mais sans préciser de mot de passe :
# useradd -m  sAMAccountName_de_l'utilisateur
Étape 2 : Installation et configuration de pam_mount :

Tout d'abord, vous devez télécharger la version suivante de pam_mount : pam_mount-1.2-1.PU_IAS.5.i386.rpm et sa dépendance libHX-1.25-1.PU_IAS.5.i386.rpm (version x86_64 dispo sur http://pkgs.org)

Et tapez les commandes suivantes :
# yum install perl-xml-writter
# rpm -Uvh libHX-1.25-1.PU_IAS.5.i386.rpm

# rpm -Uvh pam_mount-1.2-1.PU_IAS.5.i386.rpm

Pour exploiter pam_mount, il est nécessaire de modifier le fichier /etc/pam.d/system-auth (attention, gardez plusieurs sessions root sous le coude pendant la modification de ce fichier !), ajoutez donc les lignes en gras dans votre fichier system-auth :
auth required pam_env.so
auth required pam_mount.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth sufficient pam_ldap.so use_first_pass
auth required pam_deny.so

account required pam_unix.so broken_shadow

account sufficient pam_succeed_if.so uid < 500 quiet
account [default=bad success=ok user_unknown=ignore] pam_ldap.so
account required pam_permit.so
password requisite pam_cracklib.so try_first_pass retry=3 
password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok
password sufficient pam_ldap.so use_authtok
password required pam_deny.so
session optional pam_keyinit.so revoke 
session required pam_limits.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid  
session required pam_unix.so
session optional pam_mount.so
session optional pam_ldap.so

Pam_mount se configure ensuite à l'aide du fichier /etc/security/pam_mount.conf.xml. En ajoutant une ligne de ce type :
<volume fstype="cifs" mountpoint="/home/%(USER)/dossier" path="home/%(USER)" server="serveur_NAS" user="*" workgroup="DOMAINE AD"/>
Cette ligne signifie "Monte le dossier de l'utilisateur x faisant partie du domaine D à partir de serveur_NAS:/home/Utilisateur dans /home/Utilisateur/Dossier"
Ce qui est intéressant avec celle-ci, c'est qu'elle fonctionnera pour tous les utilisateurs du domaine qui auront un compte sur votre serveur CentOS/RHEL.

Pour spécifier un partage particulier pour un utilisateur particulier, il faut remplacer le user="*" par user="sAMAcountName_de_l'utilisateur".

Les utilisateurs peuvent accéder à leurs données de façon sécurisée (SSH) et de façon extrêmement simple (WinSCP par exemple).

Pam_mount est très riche, vous pouvez utiliser d'autres protocoles, vous baser sur le GUID pour les montages etc... Consultez son man ainsi que celui de pam_mount.conf.xml.

N'hésitez pas à commenter et à apporter des corrections, cette méthode a le mérite de fonctionner mais on peut probablement faire mieux (notamment du coté des pam).

Liens :
Man pam_mount 
Man pam_ldap 
pam_mount sur sourceforge (si vous voulez une version plus récente, à compiler)

Aucun commentaire:

Enregistrer un commentaire