PAM auth ActiveDirectory

Linux peut être vu comme un formidable outil que ce soit en serveur ou en bureautique. Néanmoins l’intégration dans un parc existant, bien souvent avec des contrôleurs de domaine Windows ou samba, n’est pas forcément évidente nativement.

Nous allons étudier ici la mise en place de l’authentification samba sous Linux (Ubuntu/Debian)

Prérequis

Installez tout d’abord les paquets suivants:

  • krb5-user
  • samba
  • winbind
  • libpam-winbind
  • libnss-winbind
apt-get install krb5-user samba winbind libpam-winbind libnss-winbind

Configuration

Kerberos

On va tout d’abord configurer le domaine kerberos. Ouvrez le fichier /etc/krb5.conf et référencez votre domaine et vos contrôleurs de domaine.

[libdefaults]
    default_realm = UNIX-EXPERIENCE.FR
    dns_lookup_realm = true
    dns_lookup_kdc = true

[realms]
    UNIX-EXPERIENCE.FR = {
        kdc = ad1.unix-experience.fr:88
        kdc = ad2.unix-experience.fr:88
        admin_server = ad1.unix-experience.fr
        default_domain = unix-experience.fr
    }
    unix-experience.fr = {
        kdc = ad1.unix-experience.fr:88
        kdc = ad2.unix-experience.fr:88
        admin_server = ad1.unix-experience.fr
        default_domain = unix-experience.fr
    }

[domain_realm]
    .unix-experience.fr = UNIX-EXPERIENCE.FR
    unix-experience.fr = UNIX-EXPERIENCE.FR

[login]
    krb4_convert = true
    krb4_get_tickets = false

Samba

On va maintenant configurer notre service samba local afin de se relier à notre domaine kerberos. Editez le fichier /etc/samba/smb.conf:

[global]
        workgroup = UNIX-EXPERIENCE
        security = ads
        realm = unix-experience.fr
        password server = unix-experience.fr
        idmap uid = 10000-20000
        idmap gid = 10000-20000
        winbind enum users = yes
        winbind enum groups = yes
        winbind use default domain = yes
        domain master = no
        local master = no
        preferred master = no
        template shell = /bin/bash
        template homedir = /home/%U

Lancez maintenant votre service samba et puis activez le au démarrage

service samba start

PAM

Pam permet l’authentification. L’installeur Debian/Ubuntu a déjà préconfiguré les modules PAM pour utiliser winbind. Il reste néanmoins quelques fichiers à modifier. Modifiez tout d’abord le fichier /etc/nsswitch.conf pour ajouter l’authentification winbind:

passwd: files winbind
group: files winbind
shadow: files winbind

hosts:          files myhostname mdns4_minimal [NOTFOUND=return] dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup: nis

Il faut activer le module pam_mkhomedir qui va créer le répertoire home automatiquement à partir d’un squelette, auquel cas il sera impossible de se loguer avec ces comptes dynamiques. Modifiez le fichier pam common-session (/etc/pam.d/common-session) en ajoutant la ligne suivante après le pam_winbind.so

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

Vous devriez avoir un fichier de configuration avec le contenu suivant:

session    [default=1]            pam_permit.so
 session    requisite            pam_deny.so
 session    required            pam_permit.so
 session optional            pam_umask.so
 session    required    pam_unix.so
 session    optional            pam_winbind.so
 session optional    pam_mkhomedir.so umask=0022 skel=/etc/skel
 session    optional    pam_systemd.so

S’enregistrer sur le domaine Pour finir, il faut s’enregistrer sur le domaine. Utilisez de préférence un compte de service dédié à cette tâche.

/usr/bin/net ads join -U ADJoinAccount%"myPassw0rd"

Et enfin lancez winbind:

service winbind start

Si tout est correctement configuré la commande wbinfo -u devrait retourner l’ensemble des utilisateurs de l’annuaire.

Bonus: Script pour joindre automatiquement le domain au démarrage

Lorsque vous redémarrerez votre machine ne sera pas connectée au domaine. Il faut préparer un script de démarrage qui va joindre le domaine et redémarrer winbind. Voici un script à executer en dernier (ou avant votre interface graphique) qui va s’occuper de joindre votre domaine au démarrage (et éventuellement en tâche planifiée).

/usr/bin/net ads join -U ADJoinAccount%"myPassw0rd"
while [ $? != 0 ];
do
    sleep 2
    /usr/bin/net ads join -U ADJoinAccount%"myPassw0rd"
done
service winbind restart
sleep 1;
wbinfo -u > /dev/null