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 protocole SMB développé 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 ainsi que la distribution et la gestion des GPO.
Samba AD DC permet de créer un DC compatible avec les produits Microsoft Windows Server allant de 2000 à 2012. Cependant, toutes les fonctionnalités 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.
Versions
La version stable actuelle de samba est depuis fin 2013 la 4.1. La liste des versions ainsi que leur support est disponible sur Release Planning and Lifetime. De plus, l'historique des versions stables est également disponible.
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.
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).
Installation de Samba
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 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
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
- /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. Par exemple :
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 lors de la compilation du noyau pour le système de fichier choisi.
Afin de vérifier le bon fonctionnement des ACL et des attributs étendus, il faut se repporter aux sections Tests des ACL et Tests des attributs étendus.
Active Directory nécessite une synchronisation de temps précise entre les postes clients et le(s) DC(s). Il est vivement recommandé de mettre en œuvre le protocole NTP ou tout autre solution de synchronisation. La page Configure NTP donne les indications de configuration du NTP avec la stratégie (policy) SELinux.
A titre d'exemple, voici un fichier de configuration simplifiée de ntp qui conviendra sur le DC
- /etc/ntp.conf
driftfile /var/lib/ntp/ntp.drift logfile /var/log/ntp # Specify one or more NTP servers. server 0.ubuntu.pool.ntp.org server 1.ubuntu.pool.ntp.org server 2.ubuntu.pool.ntp.org server 3.ubuntu.pool.ntp.org # By default, exchange time with everybody, but don't allow configuration. restrict default kod notrap nomodify nopeer mssntp # Local users may interrogate the ntp server more closely. restrict 127.0.0.1
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
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 à consulter la page Build Samba
Le projet Samba recommande d'installer les paquets suivants avant d'installer Samba 4 (cfr OS Requirements) :
sudo apt-get install acl 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 dnsutils krb5-user docbook-xsl libcups2-dev
Ensuite, il faut télécharger, décompresser, compiler et installer samba à partir des sources.
wget http://www.samba.org/samba/ftp/stable/samba-4.1.8.tar.gz tar xvzf samba-4.1.8.tar.gz cd samba-4.1.8 ./configure make && make install
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
Création d'un premier DC dans une nouvelle forêt
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és 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:
- 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 Bind as DNS backend. A tout moment, il est 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/*
sudo samba-tool user setpassword administrator
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 le configurer correctement, par exemple, en ajoutant ou modifiant l'option dns-nameservers 127.0.0.1 dans le fichier /etc/network/interfaces.
- /etc/network/interfaces
... iface eth0 inet static ... dns-nameservers 127.0.0.1 ...
Après avoir modifié ce fichier, il faut exécuter la commande suivante pour prendre en compte cette modification.
sudo service networking restart
Une alternative serait de supprimer le paquet resolvconf et de configurer manuellement le fichier /etc/resolv.conf.
Le service Samba se gère via Upstart et la commande service. Avant de démarrer Samba AD DC, il faut d'abord arrêter les services smbd et nmbd.
sudo service smbd stop sudo service nmbd stop sudo service samba-ad-dc start
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), DSDB Replication (Directory Service DataBase Replication), 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/*.
Test de Samba AD DC
Samba AD DC est composé de beaucoup de services différents qui interagissent. Les tests qui suivent se focaliseront sur l'un ou l'autre point.
Tests des ACL
Pour tester les ACL, il faut installer le paquet acl
sudo apt-get install acl
Le paquet acl va, entre autre, installer les commandes setfacl et getfacl afin de définir et lire les ACL sur un fichier.
Pour vérifier le fonctionnement des ACL, on peut exécuter les commandes ci-dessous sur un fichier d'une partition qui a les ACL activé.
touch test.txt setfacl -m g:adm:rwx test.txt getfacl test.txt
Le résultat de cette dernière commande doit retourner quelque chose semblable à :
# file: test.txt # owner: user1 # group: user1 user::rw- group::rw- group:adm:rw- mask::rw- other::r--
Si aucune erreur n'est retournée, les ACL sont bien activées et utilisables.
Tests des attributs étendus
Pour tester les attributs étendus, il faut installer le paquet attr. Ce paquet devrait déjà être installé car il s'agit d'une dépendance de samba.
sudo apt-get install attr
Le paquet attr va, entre autre, installer les commandes setfattr et getfattr afin de définir et lire les attributs étendu d'un fichier.
Pour vérifier le fonctionnement des attributs étendus, on peut exécuter les commandes ci-dessous sur un fichier d'une partition qui a les attributs étentus activé
Pour ajouter des attributs étendus :
touch test.txt setfattr -n user.userName -v userValue test.txt sudo setfattr -n security.secName -v secValue test.txt
Pour voir les attributs étendus d'un fichier :
getfattr -d test.txt
# file: test.txt user.userName="userValue"
getfattr -n security.secName -d test.txt
# file: test.txt security.secName="secValue"
Si aucune erreur n'est retournée, les attributs étendus sont bien activés et utilisables.
Tests du DNS
Pour tester le DNS, il faut installer le paquet dnsutils. Ce paquet devrait déjà être installé car il s'agit d'une dépendance de ubuntu-standard.
sudo apt-get install dnsutils
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.
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…). Dans le cas contraire, des erreurs seront visible dans le fichier …
- ...
... Failed to bind to 0.0.0.0:53 TCP - NT_STATUS_ADDRESS_ALREADY_ASSOCIATED ...
Pour vérifier quel programme écoute sur le port 53
sudo netstat -tunpe | grep ":53"
Voici quelques requêtes de base permettant de tester les records du DNS
- 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 le fichier /etc/resolv.conf.
- Résolution d'une requête spécifique pour le service 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 le service 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. Par exemple avec :
dig doc.ubuntu-fr.org @192.168.1.1
Tests de Kerberos
Pour tester le Kerberos, il faut installer le paquet krb5-user
sudo apt-get install krb5-user
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.
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 :
- /var/lib/samba/private/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 qui a été crée lors de l'installation du paquet krb5-config. Dans ce fichier, seule 1 partie est utile :
- /etc/krb5.conf
[libdefaults] default_realm = EXAMPLE.COM ...
Voici quelques commandes permettant de tester le serveur Kerberos :
- 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 prend 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
Tests de SMB
Pour tester les SMB, il faut installer le paquet 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 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.
Mise à jour depuis un domaine Samba de type NT4 vers un AD
Si vous prévoyez la migration depuis un domain Samba NT4 existant vers un domaine Samba AD, reportez-vous à la page Classic Upgrade HowTo
Informations optionnelles et complémentaires
Le wiki Samba (en anglais) met à disposition de nombreuses documentations complémentaires
- Pour l'administration de votre DC :
- Pour les tâches "quotidiennes" :
- Authentifier d'autres services avec l'AD notamment Apache, SSH,…
Des réflexions sur SELinux et les permissions de contrôle d'accès pouvant prévenir des connexions utilisant l'AD, sont disponibles sur la page Paramétrages contrôle d'accès Samba AD DC.
Reportez-vous la documentations utilisateur du wiki samba pour plus d'informations et tutoriels.
Références
- Articles dans Linux Pratique n°79 de sept/oct 2013 (pages 68 à 73) et n°80 de nov/déc (pages 70 à 76)