Ceci est une ancienne révision du document !
Samba - Active Directory Domain Controller (AD DC)
Brouillon avant de compléter ou créer un nouvelle page concernant l'authentification d'un utilisateur avec Samba AD DC
La version actuelle se trouve ici Samba - Active Directory Domain Controller (AD DC) …
Versions
…
Installation de Samba
Paramètres généraux
Avant toute installation, il est nécessaire de définir son environnement. Ainsi, il sera possible de configurer correctement son serveur. Le reste de cette documentation se basera sur les paramètres suivants :
Nom de domaine | example.com |
Royaume (realm) | EXAMPLE.COM |
Nom de NetBIOS | example |
Nom du serveur | ubndc01 |
Adresse IP du serveur | 192.168.1.11 |
Rôle du serveur | DC (contrôleur de domaine) |
Pré-requis
…
Installation à partir des dépôts
…
Installation à partir des sources
…
Création d'un premier DC dans une nouvelle forêt
…
Initialisation de Samba
…
Démarrer Samba AD DC
…
Test de Samba AD DC
…
Tests des ACL
…
Tests des attributs étendus
…
Tests du DNS
…
Tests de Kerberos
…
Tests de SMB
…
Mise à jour depuis un domaine Samba de type NT4 vers un AD
…
Authentification avec Samba AD DC
Authentification des utilisateurs sur le DC
sudo apt-get install libnss-winbind libpam-winbind winbind
Ajout de winbin dans le fichier de configuration de /etc/nsswitch
- /etc/nsswitch.conf
... passwd: compat winbind group: compat winbind ...
Ceci permet d'utiliser les utilisateurs et groupes venant de AD. Par défaut sur un DC, les commandes ci-dessous retourne la liste de tous les utilisateurs et groupes.
getent passwd getent group
Création du home directory pour l'utilisateur du domaine.
- /usr/share/pam-configs/mkhomedir
Default: no Priority: 900 Session-Type: Additional Session-Final: required pam_mkhomedir.so skel=/etc/skel umask=0077 silent
Alternative en mofdifiant le fichier /usr/share/pam-config/winbind
- /usr/share/pam-config/winbind
... Session: optional pam_winbind.so mkhomedir ...
Un autre alternative consiste à monter le home directory de l'utilisateur lors du login. Une option du fichier de configuration /etc/samba/smb.conf est homedir map = auto.home. Ceci fait référence à autofs. Développement Ult.
Possibilité de limiter l'accès à un ou plusieurs groupes ou utilisateurs sur base du SID Ajouter require_membership_of=SID à la fin de la ligne pam_winbind.so de la section Auth: du fichier /usr/share/pam-config/winbind
- /usr/share/pam-config/winbind
... Auth: [success=end default=ignore] pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass required_membership_of=S-1-5-21-5555555555-555555555-5555555555-512 ...
Le RID 512 représente le groupe Domain Admins
Activer cette nouvelle configuration :
sudo pam-auth-update
Générer les uidNumber et gidNumber dans l'AD
Deux scripts "maisons" :
- uid_master.sh
#!/bin/bash # Vérifier si ces valeurs existent dans smb.conf # idmap config REALM:range = min-max rangeMin=100000 rangeMax=999999 sam=/var/lib/samba/private/sam.ldb tmpDir=$(mktemp -d --tmpdir addUid.XXXXXX) || exit 1 umask 0077 ldbsearch -H $sam '(&(objectclass=user)(!(objectclass=computer)))' uidNumber | sed '/^# Referral/ { :loop; N; $! b loop; d; }; s/^\([a-zA-Z0-9]*\): \(.*\)$/\1="\2"/g; /^$/d;' | awk '/^# record/{n++}{print > f n}' f=$tmpDir/r maxUid=$rangeMin for file in `grep -l -E "^uidNumber=" $tmpDir/*` do source $file if [ $uidNumber -gt $rangeMax ] then echo "Warning: uidNumber $uidNumber for $dn is bigger than max id $rangeMax" 1>&2 elif [ $uidNumber -lt $rangeMin ] then echo "Warning: uidNumber $uidNumber for $dn is lower than min id $rangeMin" 1>&2 else [ $uidNumber -gt $maxUid ] && maxUid=$uidNumber fi done echo "Max UID found: $maxUid" uidNumber=$(($maxUid+1)) for file in `grep -L -E "^uidNumber=" $tmpDir/*` do source $file echo "Adding uidNumber: $uidNumber for dn: $dn" echo "dn: $dn changetype: modify add: uidNumber uidNumber: $uidNumber" > $tmpDir/ldif ldbmodify -H $sam $tmpDir/ldif uidNumber=$(($uidNumber+1)) done rm -r $tmpDir
- gid_master.sh
#!/bin/bash # Vérifier si ces valeurs existent dans smb.conf # idmap config REALM:range = min-max rangeMin=100000 rangeMax=999999 sam=/var/lib/samba/private/sam.ldb tmpDir=$(mktemp -d --tmpdir addGid.XXXXXX) || exit 1 umask 0077 ldbsearch -H $sam '(objectclass=group)' gidNumber | sed '/^# Referral/ { :loop; N; $! b loop; d; }; s/^\([a-zA-Z0-9]*\): \(.*\)$/\1="\2"/g; /^$/d;' | awk '/^# record/{n++}{print > f n}' f=$tmpDir/r maxGid=$rangeMin for file in `grep -l -E "^gidNumber=" $tmpDir/*` do source $file if [ $gidNumber -gt $rangeMax ] then echo "Warning: gidNumber $gidNumber for $dn is bigger than max id $rangeMax" 1>&2 elif [ $gidNumber -lt $rangeMin ] then echo "Warning: gidNumber $gidNumber for $dn is lower than min id $rangeMin" 1>&2 else [ $gidNumber -gt $maxGid ] && maxGid=$gidNumber fi done echo "Max GID found: $maxGid" gidNumber=$(($maxGid+1)) for file in `grep -L -E "^gidNumber=" $tmpDir/*` do source $file echo "Adding gidNumber: $gidNumber for dn: $dn" echo "dn: $dn changetype: modify add: gidNumber gidNumber: $gidNumber" > $tmpDir/ldif ldbmodify -H $sam $tmpDir/ldif gidNumber=$(($gidNumber+1)) done rm -r $tmpDir
Informations optionnelles et complémentaires
…