Voici comment s'authentifier sur un serveur Linux Debian/Ubuntu, avec des comptes utilisateurs stockés sur un serveur Active Directory.
En premier lieu, il convient de bien saisir la différence entre l'identification et l'authentification.
- L'identification permet simplement l'accès aux informations de l'utilisateur, et l'association entre son UID et son nom. Elle est utilisée par exemple pour afficher le nom de l'utilisateur à partir de l'UID dans la commande
ls -l. L'identification est gérée par la libnss. - L'authentification permet d'autoriser ou non l'accès au service à l'utilisateur. Elle est gérée par PAM (Pluggable Authentication Modules).
Il est donc nécessaire d'installer 2 paquets : libnss-ldap pour l'identification, et libpam-krb5 pour l'authentification :
aptitude install libnss-ldap libpam-krb5
La configuration de l'identification se fait dans les fichier /etc/libnss-ldap.conf et etc/nsswitch.conf :
Voici un exemple de fichier /etc/libnss-ldap.conf :
base dc=company,dc=com uri ldap://ad1.intranet ldap://ad2.intranet referrals no ldap_version 3 pam_password md5 pam_password md5 nss_base_passwd ou=Users,dc=company,dc=com?sub?objectClass=user nss_base_group dc=company,dc=com?sub?&(gidNumber=*) nss_map_attribute uid msSFU30Name nss_map_objectclass posixAccount user nss_map_objectclass shadowAccount user nss_map_attribute homeDirectory unixHomeDirectory nss_map_attribute shadowLastChange pwdLastSet nss_map_objectclass posixGroup group nss_map_attribute uniqueMember member pam_login_attribute sAMAccountName pam_filter objectclass=User nss_initgroups_ignoreusers avahi,avahi-autoipd,backup,bin,couchdb,daemon,games,gdm,gnats,haldaemon,hplip,irc,kernoops,libuuid,list,lp,mail,man,messagebus,mysql,news,proxy,pulse,root,saned,speech-dispatcher,sshd,statd,sync,sys,syslog,uucp,www-data
Attention : sous Ubuntu le fichier /etc/libnss-ldap.conf est en fait /etc/ldap.conf (voir /usr/share/doc/libnss-ldap/README.Debian).
Et il faut ajouter les mots "ldap" dans /etc/nsswitch.conf :
passwd: compat ldap group: compat ldap
On peut maintenant tester l'identification par :
getent passwd USER
Pour l'authentification, tout se passe dans /etc/krb5.conf et les fichiers /etc/pam.d/common-* :
[libdefaults]
default_realm = COMPANY.COM
[realms]
COMPANY.COM = {
kdc = ad1.intranet
kdc = ad2.intranet
}
[domain_realm]
.intranet = COMPANY.COM
[login]
krb4_convert = true
krb4_get_tickets = false
Et pour la configuration PAM, il suffit de rajouter les ligne suivante en haut des fichiers common-auth, common-session, common-account et common-passwd :
auth sufficient pam_krb5.so minimum_uid=1000
session optional pam_krb5.so minimum_uid=1000
account required pam_krb5.so minimum_uid=1000
password sufficient pam_krb5.so minimum_uid=1000
(Comme expliqué dans /usr/share/doc/libpam-krb5/README.Debian.)
Voila, on peut maintenant tester l'authentification à l'aide de la commande login, ou en SSH. En cas de problème, aller voir dans le fichier /var/log/auth.log.
Pour aller plus loin, on pourra ajouter la création automatique du dossier de l'utilisateur en ajoutant la ligne suivante dans /etc/pam.d/common-session :
session required pam_mkhomedir.so
On peut aussi restreindre l'accès à une liste blanche d'utilisateurs uniquement dans /etc/pam.d/common-auth :
auth required pam_listfile.so onerr=fail item=user sense=allow file=/etc/loginusers
Voir aussi man pam_krb5, man pam_mkhomedir et man pam_listfile.