Ceci est une ancienne révision du document !


Samba - Active Directory Domain Controller (AD DC)

Le projet Samba est surtout connu pour le partage de fichiers selon le protocol SMB dévellopé par Microsoft. La version 4 de ce logiciel apporte la fonctionnalité supplémentaire d'un contrôleur de domaine Active Directory (Active Directory Domain Controller - AD DC). Cette fonctionnalité inclue en natif les services DNS, LDAP, Kerberos, RPC et SMB 3.0 + distribution des GPO.

Une connaissance préalable de AD DC de Microsoft et des fonctionnalités et protocols tels que DNS, LDAP, Kerberos, RPC, GPO, SMB, … est un atout pour la bonne compréhension et mise en oeuvre de Samba AD DC. Cette documentation s'adresse donc principalement aux administrateurs réseau.

Samba AD DC permet de créer un DC compatible avec les produits de Microsoft Windows Server allant de 2000 à 2012. Cependant, toutes les fonctionnalitées avancées ne sont pas encore implémentées. Selon les cas, probablement au sein des PME, Samba AD DC pourrait parfaitement remplacer ces produits.

Samba en version 4 fut premièrement disponible via le paquet samba4. Ce paquet est disponible pour toutes les versions d'Ubuntu allant de Lucid (10.04) à Trusty (14.04 LTS). Cependant, il s'agit là d'un paquet de transition.qui ne sera pas conservé sur le long terme. Samba en version 4 devient la version de base du paquet samba à partir de Trusty (14.04 LTS). Il est donc conseillé aux utilisateurs de Trusty et des versions qui suiveront de ne plus utiliser le paquet samba4 mais bien le paquet samba. Sous Trusty, samba est fourni en version 4.1.3.

Remarque : Sous Trusty, les paquets samba4 et samba co-existent. Le premier sert de transistion. Son seul rôle est d'installer par le mécanisme de dépendance le paquet samba.

Samba en version 3 et 4 ne devraient pas co-exister sur une même machine. Si Samba est déjà installé, vous pouvez en vérifier sa version en tapant :

samba -V

La documentation qui suit est basée sur Ubuntu Trusty avec samba en version 4.1.3. L'ensemble des manipulations qui suivent requiert des droits administrateurs (local sur la machine ou domaine).

Paramètres généraux

Avant toute installation, il est nécessaire de definir son environnement. Ainsi, il sera possible de configurer correctement son serveur. Le reste de cette documentation se basera sur les paramètres suivants :

Nom du serveur ubndc01
Nom de domaine example.com
Royaume (realm) EXAMPLE.COM
Nom de NetBIOS example
Adresse IP du serveur 192.168.1.11
Rôle du serveur DC (contrôleur de domaine)

Pré-requis

Quelques paquets hors des dépendances du paquet samba sont nécessaires afin de bénéficier de l'ensemble des fonctionalités et des outils de test.

sudo apt-get install acl attr dnsutils krb5-user

? Indispensable ou uniquement pour compilation à partir des sources ?

sudo apt-get install build-essential libacl1-dev libattr1-dev libblkid-dev libgnutls-dev \
libreadline-dev python-dev python-dnspython gdb pkg-config libpopt-dev libldap2-dev \
dnsutils libbsd-dev attr krb5-user docbook-xsl libcups2-dev

Le paquet acl va, entre autre, installer les commandes setfacl et getfacl afin de définir et lire les ACL sur un fichier.

Le paquet attr va, entre autre, installer les commandes setfattr et getfattr afin de définir et lire les attributs étendu d'un fichier.

Le paquet dnsutils va, entre autre, installer les commandes dig, nslookup et nsupdate afin d'interroger et mettre à jour le serveur DNS. Ce paquet n'installe pas un serveur DNS.

L'installation de krb5-user va installer via le mécanisme de dépendance krb5-config. Ce paquet va demander d'introduire premièrement le nom du royaume : EXAMPLE.COM, et deuxièmement, si nécessaire, d'introduire les informations relatives aux serveurs kerberos (ubndc01.example.com) du royaume ainsi qu'au serveur d'administration de kerberos (ubndc01.example.com).

Le paquet krb5-user va, entre autre, installer les commandes kinit et klist qui permettent d'interroger et tester un serveur kerberos. Ce paquet n'installe pas un serveur kerberos.

Afin de bénéficier de l'ensemble des fonctionnalités de Samba, il est nécessaire d'activer les ACL et les attributs étendus (user_xattr) sur les partitions concernées par Samba. Pour ce faire, il faut ajouter dans le fichier /etc/fstab les options acl et user_xattr aux partitions en question. L'ajout de l'option barrier=1 protège les transactions tdb contre la corruption des fichiers (notamment sam.ldb) lors les coupure d'électricité (ou autre crash système). Celle-ci est fortement recommandée sur un DC.

Exemple d'une partition dans le ficher /etc/fstab

UUID=8059560e-4a78-445b-a363-b3c197b4c7ea      /      ext4      defaults,acl,user_xattr,barrier=1     0     1

Après avoir modifié le fichier /etc/fstab, il faut redémarrer la machine ou remonter la partition pour que la modification soit effective

sudo reboot

ou

sudo mount -o remount /

Le noyau d'Ubuntu Trusty provenant des dépôts a bien les options XATTR, SECURITY et POSIX_ACL pour les systèmes de fichier ext3 et ext4. Toute autre situation nécessitera de vérifier que ces options aient bien été activées pour le système de fichier choisi lors de la compilation du noyau.

Installation à partir des dépôts

Cette solution a l'avantage d'être très simple à mettre en oeuvre.

sudo apt-get install samba

Installation à partir des sources

En plus des paquets cités dans les pré-requis, le projet Samba recommande d'installer quelques paquets avant d'installer Samba 4 (cfr OS Requirements) :

sudo apt-get install build-essential libacl1-dev libattr1-dev libblkid-dev libgnutls-dev \
libreadline-dev python-dev python-dnspython gdb pkg-config libpopt-dev libldap2-dev \
dnsutils libbsd-dev attr krb5-user docbook-xsl libcups2-dev

Cette solution s'adresse aux personnes qui connaissent déjà bien le sujet et qui savent ce qu'apporte une version plus récente que celle disponible dans les dépôts. N'hésitez pas à vous reporter à la page suivante : https://wiki.samba.org/index.php/Build_Samba

wget http://www.samba.org/samba/stable/samba-4.1.4.tar.gz
tar xvzf samba-4.1.4.tar.gz
cd samba-4.1.4
./configure
make && make install

En résumé, ces quelques lignes permettent de télécharger, décompresser, compiler et installer samba à partir des sources.

Si vous installez Samba à partir des sources, les chemins pour accéder aux différents fichiers seront certainement différents de ceux utilisés par la distribution.

Il sera également nécessaire d'installer samba-tool à partir des dépôts (cfr samba-common-bin ou samba4-common-bin) ou à partir des sources

Ceci constitue l'étape unique qui va créer le premier domaine dans la forêt. Cette étape est indispensable si vous n'avez pas d'autres DC (Samba ou Microsoft).

Initialisation de Samba

Préalablement à l'iniatilisation de Samba, il faut supprimer ou renommer le fichier smb.conf

sudo mv --backup=t /etc/samba/smb.conf /etc/samba/smb.conf.old

L'initialisation va créer plusieurs fichiers type base de données stocké dans /var/lib/samba/private/ ainsi que le fichier /etc/samba/smb.conf

 sudo samba-tool domain provision --use-rfc2307 --interactive

L'option –use-rfc2307 active les attributs Posix et crée les informations NIS dans l'AD. Ceci permet d'administrer les UIDs/GIDs et autres paramètres UNIX (visibles sous l'onglet "Unix attributes" de l'ADUC). Il est plus simple de l'activer durant l'initialisation plutôt que par la suite. De plus, même si vous n'en avez pas (encore) besoin, ceci n'impacte pas votre installation.

L'option –interactive va poser quelques questions pour la création du domaine. Pour connaître, l'ensemble des options relatives à l'initialisation, il est recommandé d'exécuter

samba-tool domain provision --help 

Si les valeurs satisfont, il ne faut alors que les valider par ENTER

Realm [EXAMPLE.COM]:
Domain [EXAMPLE]:
Server Role (dc, member, standalone) [dc]:
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]:
DNS forwarder IP address (write 'none' to disable forwarding) [192.168.10.1]:
Administrator password:
Retype password:

Notes importantes sur cette initialisation :

  • Par défaut, l'initialisation propose le serveur DNS interne de Samba (SAMBA_INTERNAL) comme serveur DNS. Il est possible d'utiliser Bind comme serveur DNS d'arrière-plan (backend). Si vous choisissez BIND9_DLZ lors de l'initialisation, référez-vous au wiki the Bind as DNS backend HowTo. A tout moment, il sera possible de changer de serveur DNS d'arrière-plan 1). Pour plus d'information sur la configuration du serveur DNS et trouver celle qui répond à vos besoins, consultez la page Which DNS backend should I choose
  • Le mot de passe du compte Administrator du domaine doit respecter les règles de complexité, à savoir : au moins une majuscule, un chiffre et 8 caractères de long (par exemple : P@ssw0rd).
  • Dans le cas d'une ré-initialisation, en plus des mesures déjà décrites ci-dessus, il sera nécessaire de préallablement supprimer les fichiers de base de données privés de Samba
rm -rf /var/lib/samba/private/*

Démarrer Samba AD DC

Avant de démarrer Samba AD DC, il est important de vérifier la bonne configuration du DNS. Le fichier /etc/resolv.conf devrait contenir

/etc/resolv.conf
search example.com
nameserver 127.0.0.1

Si ce fichier est géré par resolvconf, il faut soit le configurer correctement ou soit supprimer ce paquet. Redémarer la machine.

sudo reboot
Il est certainement possible de redémarrer uniquement les bons services. Lesquels ?

Le service Samba se gère via Upstart ou via la commande service. Par exemple, pour connaître son status :

sudo initctl status samba-ad-dc
samba-ad-dc start/running, process 1129
service samba-ad-dc status
samba-ad-dc start/running, process 1129

Pour connaître l'ensemble des services démarrés par samba :

sudo samba-tool processes
 Service:                PID 
-----------------------------
dnsupdate                959
nbt_server               933
rpc_server               932
cldap_server             942
winbind_server           949
kdc_server               943
samba                      0
dreplsrv                 948
kccsrv                   956
ldap_server              938

On y voit, dans l'ordre, les services suivants DNS, NetBIOS, RPC, Connection-less LDAP (CLDAP), WinBind, KDC (Kerberos Distribution Center), Replication (d?), KCC (Knowledge Consistency Checker), LDAP. Tous ces services sont configurés soit dans /etc/samba/smb.conf, soit dans les fichiers /var/lib/samba/private/*.

Samba AD DC est composé de beaucoup de services différents qui interagissent. Les test qui suivent se focaliseront sur l'un ou l'autre point.

Test du DNS

Une configuration fonctionnelle du DNS est essentielle pour assurer le bon fonctionnement de Samba et de l'AD. Sans les bons paramètres, Kerberos ne fonctionnera pas, entraînant le non-fonctionnement des services de base ! Afin d'éviter de perdre son temps à cause d'un problème DNS, il faut attraper le réflexe de systématiquement vérifier le bon fonctionnement du DNS. La connaissance des requêtes adéquates pour identifier chaque problème est également nécessaire. Pour plus d'information, consulter DNS Administration et administrer Samba AD depuis windows .

Pour que le serveur DNS interne puisse fonctionner, le port 53 udp/tcp ne doit pas être utilisé par d'autres programmes (tel qu'un autre serveur DNS, Dnsmasq, etc…). Vous aurez des erreurs dans le logfile (quel fichier ?) si Samba ne peut utiliser le port 53, telle que :

 Failed to bind to 0.0.0.0:53 TCP - NT_STATUS_ADDRESS_ALREADY_ASSOCIATED 

Pour vérifier quel programme est sur le port 53

sudo netstat -tunpe | grep ":53" 

Voici quelque requêtes de base :

  • Vérification du fonctionnement du service DNS par une résolution simple.
dig ubndc01.example.com
...
ubndc01.example.com.     900     IN      A       192.168.1.11
...
;; SERVER: 127.0.0.1#53(127.0.0.1)
...

On voit sur la dernière ligne mise en évidence ici, quel serveur a répondu à la requête. Si ce n'est pas le bon serveur, il faut vérifier /etc/resolv.conf.

  • Résolution d'une requête spécifique pour l'utilisation de Kerberos
dig -t SRV _kerberos._tcp.example.com
...
_kerberos._tcp.example.com. 900  IN      SRV     0 100 88 ubndc01.example.com.
...
  • Résolution d'une requête spécifique pour l'utilisation de LDAP
dig -t SRV _ldap._tcp.example.com
...
_ldap._tcp.example.com.  900     IN      SRV     0 100 389 ubndc01.example.com.
...
  • Résolution d'une adresse externe au domaine
dig doc.ubuntu-fr.org
...
doc.ubuntu-fr.org.      1276    IN      A       86.65.39.28
...

En cas d'absence de réponse, il faut vérifier qu'il y ait une ligne dns forwarder pointant vers l'IP d'un serveur DNS externe au domaine dans le fichier /etc/samba/smb.conf

/etc/samba/smb.conf
...
        dns forwarder = 192.168.1.1
...

Si tel est le cas, il faut vérifier qu'il s'agisse de la bonne IP et que la requête aboutisse correctement sur cet autre serveur DNS avec :

dig doc.ubuntu-fr.org @192.168.1.1

Tests de Kerberos

Lors de l'initialisation, le fichier de configuration du serveur Kerberos2) de Samba est automatiquement crée et se trouve sur /var/lib/samba/private/krb5.conf. Son contenu par défaut est :

krb5.conf
[libdefaults]
        default_realm = EXAMPLE.COM
        dns_lookup_realm = false
        dns_lookup_kdc = true

Les commandes fournies par le paquet krb5-user (kinit, klist, …) utilise le fichier de configuration /etc/krb5.conf. Celui-ci a été crée lors de l'installation du paquet krb5-config. Dans ce fichier, seuls 2 parties sont utiles :

/etc/krb5.conf
[libdefaults]
        default_realm = EXAMPLE.COM
...
[realms]
        EXAMPLE.COM = {
                kdc = ubndc01.example.com
                admin_server = ubndc01.example.com
        }
...

La seconde partie n'est même pas nécessaire si les record ont bien été crées dans le serveur DNS.

Le nom du "royaume" (realm) s'écrit toujours lettres majuscules
  • Demande d'un ticket-granting ticket (TGT) pour un utilisateur avec kinit
kinit administrator@EXAMPLE.COM
password for administrator@EXAMPLE.COM:
Warning: Your password will expire in x days on ... 

La même commande en omettant le @ nom du royaume doit donner le même résultat. Dans ce cas, kinit prends la valeur du default_realm inscrite dans le fichier de configuration /etc/krb5.conf

  • Pour voir le TGT reçu, il faut utiliser la commande klist
klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: administrator@EXAMPLE.COM

Valid starting     Expires            Service principal
03/03/14 20:17:43  04/03/14 06:17:43  krbtgt/EXAMPLE.COM@EXAMPLE.COM
        renew until 04/03/14 20:17:35
Il est possible de changer le mot de passe du compte administrator avec les droits superutilisateur (root) avec la commande
sudo samba-tool user setpassword administrator

Tests de SMB

Pour cette partie, il est nécessaire d'installer smbclient

sudo apt-get install smbclient

Si samba a été installé à partir des sources, il faut veiller à avoir une smbclient en version 4 également.

  • Lister les partages définis localement sur le DC :
smbclient -L localhost -U%
Domain=[EXAMPLE] OS=[Unix] Server=[Samba 4.1.3-Ubuntu]

        Sharename       Type      Comment
        ---------       ----      -------
        netlogon        Disk      
        sysvol          Disk      
        IPC$            IPC       IPC Service (Samba 4.1.3-Ubuntu)
Domain=[EXAMPLE] OS=[Unix] Server=[Samba 4.1.3-Ubuntu]

        Server               Comment
        ---------            -------

        Workgroup            Master
        ---------            -------
        WORKGROUP

Un AD DC possède toujours les partages netlogon et sysvol. Ils sont nécessaires au fonctionnement d'AD. Ces partages doivent se retrouver dans le fichier de configuration de samba /etc/samba/smb.conf.

  • Vérifier de l'authentification d'un utilisateur avec la même commande mais en utilisant l'utilisateur administrator.
smbclient -L localhost -UAdministrator
Enter administrator's password:
...

Le résultat doit être identique au précédent si on introduit le bon mot de passe pour le compte administrator.

Configuration NTP

Si vous prévoyez la migration depuis un domain Samba NT4 existant vers un domaine Samba AD, reportez-vous à Classicupgrade HowTo (http://wiki.samba.org/index.php/Samba4/samba-tool/domain/classicupgrade/HOWTO)

Contributeurs principaux : bcag2, Qedinux


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