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)

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

Initialisation de Samba

Démarrer Samba AD DC

Tests des ACL

Tests des attributs étendus

Tests du DNS

Tests de Kerberos

Tests de SMB

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

Contributeurs principaux : bcag2, Qedinux

  • utilisateurs/quentin/samba_active_directory_domain_controller.1395351027.txt.gz
  • Dernière modification: Le 20/03/2014, 22:30
  • par Qedinux