Sommaire
Présentation
Nous allons, dans ce tutoriel, créer un Contrôleur de Domaine Active Directory sous Linux.
Pour cela, nous allons installer et configurer Samba 4.
Nous verrons également comment intégrer des machines à ce domaine.
Ce tutoriel a été prévu pour Debian 11, Debian 12 et Ubuntu Server 22.04.
Dans ce tutoriel, Samba 4 est installé sur un serveur virtuel Proxmox VE (PVE).
1) Installation de Samba 4
1.1) Les Versions de Samba 4
A la date à laquelle j’écris ce tutoriel, le dépôt officiel d’Ubuntu 20.04 propose Samba 4.11 (4.7 pour Ubuntu 18.04).
Il y a une nouvelle version de Samba tous les 6 mois.
Mais ce n’est pas pour autant qu’elle sera disponible sur le Dépôt d’Ubuntu.
A ce rythme, la version Samba 4.11 sera abandonnée vers Mars 2021 par la Samba Team.
Cela signifie qu’elle ne recevra plus de mise à jour pour corriger les bugs, la sécurité et apporter des évolutions.
J’ai donc choisi de récupérer les versions de Samba directement à la source.
Nous aurons ainsi une meilleure maîtrise des mises à jour et bénéficierons des nouvelles fonctionnalités.
1.2) Préparation de l’environnement :
Important : A partir d’ici, toutes les commandes seront exécutées en tant que root.
Avant d’installer Samba 4 et de créer un Contrôleur de Domaine, il faut s’assurer que le système est correctement configuré.
1.2.1) Configurer une IP statique :
Il est important de désactiver le DHCP sur le serveur et de configurer l’interface principale avec une IP statique.
1.2.2) Configuration de l’heure :
1 2 3 |
timedatectl set-timezone Europe/Paris hwclock -w timedatectl status |
Vous pouvez obtenir la liste des fuseaux horaires acceptés en utilisant la commande : timedatectl list-timezones
1.2.3) Modification du fichier « hosts » :
1 |
nano /etc/hosts |
Ajouter une ligne semblable à 172.27.1.210 dc1.jjworld.lan dc1
1.3) Installation de Samba 4
1.3.1) Mise à jour du dépôt et des paquets :
1 |
apt -y update && apt -y upgrade |
1.3.2) Installation des paquets nécessaires à la compilation de Samba 4 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
export DEBIAN_FRONTEND=noninteractive apt -y install acl apt-utils attr autoconf bind9utils binutils \ bison build-essential chrpath curl debhelper dnsutils \ docbook-xml docbook-xsl flex gcc gdb git glusterfs-common gzip \ heimdal-multidev hostname htop krb5-config krb5-user krb5-kdc \ lcov libacl1-dev libarchive-dev libattr1-dev \ libavahi-common-dev libblkid-dev libbsd-dev libcap-dev libcephfs-dev \ libcups2-dev libdbus-1-dev libglib2.0-dev libgnutls28-dev libgpgme11-dev \ libicu-dev libjansson-dev libjs-jquery libjson-perl libkrb5-dev libldap2-dev \ liblmdb-dev libncurses5-dev libpam0g-dev libparse-yapp-perl libpcap-dev \ libpopt-dev libreadline-dev libsystemd-dev libtasn1-bin libtasn1-dev \ libunwind-dev lmdb-utils locales lsb-release make mawk mingw-w64 patch \ perl perl-modules pkg-config procps psmisc \ python3 python3-dbg python3-dev python3-dnspython python3-gpg \ python3-iso8601 python3-markdown python3-matplotlib python3-pexpect \ rng-tools rsync sed sudo tar tree uuid-dev xfslibs-dev xsltproc zlib1g-dev \ ccache python3-cryptography python3-pyasn1 python3-setproctitle wget \ libaio-dev libgpgme-dev nettle-dev python3-all-dev python3-dbg \ python3-dev python3-dnspython |
Uniquement Ubuntu 20.04 :
1 |
apt -y install language-pack-en checkinstall |
1.3.3) Nettoyage des fichiers résiduels :
1 2 3 |
apt -y autoremove apt -y autoclean apt -y clean |
1.3.4) Téléchargement et extraction de Samba 4 :
1 2 |
wget -O samba-latest.tar.gz https://download.samba.org/pub/samba/samba-latest.tar.gz tar zxvf samba-latest.tar.gz |
1.3.5) Configuration du compilateur :
1 2 |
# Se déplacer dans le répertoire samba-4.xx.x cd samba-4.20.0 |
Attention : Le répertoire samba-4.xx.x sera différent en fonction de la version téléchargée.
1 2 3 4 5 6 7 8 9 10 |
# Configuration ./configure \ --prefix=/usr --exec-prefix=/usr --enable-fhs \ --libdir=/usr/lib/x86_64-linux-gnu \ --sysconfdir=/etc --localstatedir=/var \ --with-systemd --systemd-install-services --with-systemddir=/etc/systemd/system \ --systemd-smb-extra=NotifyAccess=all --systemd-nmb-extra=NotifyAccess=all \ --systemd-winbind-extra=NotifyAccess=all --systemd-samba-extra=NotifyAccess=all \ --with-lockdir=/var/run/samba \ --enable-selftest |
1.3.6) Compilation et Installation de Samba :
1 |
make -j && make -j install |
1.3.7) Verrouillage du paquet Samba :
Cette étape est importante pour éviter d’installer accidentellement Samba en provenance du dépôt officiel (plus ancien).
1 2 |
apt-mark hold samba apt-mark showhold |
1.3.8) Vérifications installation :
1 2 |
apt search ^samba$ samba --version |
1.3.9) Affichage des fichiers et répertoires de Samba :
1 2 |
samba -b samba -b | egrep "CONFIGFILE|LOCKDIR|STATEDIR|CACHEDIR|PRIVATE_DIR" |
1.3.10) Redémarrage de Samba 4 (Uniquement en cas de Mise à jour) :
Se rendre à l’étape Redémarrage de Samba après Mise à jour
2) Création d’un domaine avec Samba 4
2.1) Nettoyage de l’environnement
1 2 3 4 |
mv --backup=t /etc/samba/smb.conf /etc/samba/smb.conf.backup mv --backup=t /etc/krb5.conf /etc/krb5.conf.backup #mv --backup=t /etc/krb5kdc/kdc.conf /etc/krb5kdc/kdc.conf.backup rm -rf /var/lib/samba/private/* |
2.2) Promouvoir le serveur en Contrôleur de Domaine
Remarque : Pour ajouter un contrôleur de domaine à un domaine existant passer directement à l’étape 2.7.
1 2 |
samba-tool domain provision --server-role=dc --use-rfc2307 --dns-backend=SAMBA_INTERNAL \ --realm=JJWORLD.LAN --domain=JJWORLD --option="dns forwarder=172.27.1.1" |
Les 2 derniers paramètres sont à modifier en fonction du contexte :--realm
: Nom du royaume Kerberos en MAJUSCULE. Ex : JJWORLD.LAN--domain
: Nom du domaine. Exemple : JJWORLD--option="dns forwarder=xx.xx.xx.xx"
: IP du serveur DNS pour les résolutions de domaines externes
Autres paramètres :--password
: Mot de passe du compte administrator. (Volontairement omis)
2.3) Modification mot de passe Administrator
1 |
samba-tool user setpassword administrator |
Un mot de passe complexe est exigé.
2.4) Désactivation expiration mot de passe pour Administrator
1 |
samba-tool user setexpiry administrator --noexpiry |
2.5) Création d’un nouvel Administrateur
Création :
1 |
samba-tool user create jean |
Désactivation expiration mot de passe :
1 |
samba-tool user setexpiry jean --noexpiry |
Ajout dans le groupe Administrators :
1 |
samba-tool group addmembers "Domain Admins" jean |
2.7) Intégrer un contrôleur de domaine supplémentaire
1 2 3 4 |
samba-tool domain join jjworld.lan DC --server=DC1 \ --option='idmap_ldb:use rfc2307 = yes' \ --option="dns forwarder=172.27.1.1" \ -U"JJWORLD\administrator" |
jjworld.lan
: Nom du domaine à rejoindre.--option="dns forwarder=172.27.1.1"
: IP du serveur DNS de résolution externe.--server=DC1
: Contrôleur de domaine existant sur lequel s’authentifier.-U"JJWORLD\administrator"
: Nom de l’utilisateur ayant le droit d’intégrer un nouveau contrôleur de domaine.
2.8) Récupération configuration Kerberos
1 |
cp /var/lib/samba/private/krb5.conf /etc/krb5.conf |
2.9) Configuration DNS
2.9.1) Serveur de résolution des domaines externes
1 |
nano /etc/samba/smb.conf |
2.9.2) Serveur de résolution DNS et domaine par défaut
1 |
nano /etc/resolv.conf |
Important : Seul le serveur lui même doit figurer dans la liste des serveurs DNS nameserver
.
Après cette modification, nous ne pouvons plus résoudre les noms des domaines externes.
Il sera donc impossible d’installer des paquets par exemple.
La résolution DNS sera rétablie dans les étapes suivantes.
2.9.3) Vérification port DNS non-utilisé
Remarque : Inutile sur Debian 12.
1 |
ss -tunpel | grep ":53 " |
Dans mon cas, le programme systemd-resolve utilise déjà le port 53.
Cela posera problème car Samba utilise son propre serveur DNS.
Nous allons donc arrêter et désactiver systemd-resolve.
2.9.4) Désactivation systemd-resolve
Remarque : Inutile sur Debian 12.
Désactivation du Listener :
1 |
nano /etc/systemd/resolved.conf |
Arrêt et désactivation du service :
1 2 3 |
systemctl stop systemd-resolved systemctl disable systemd-resolved.service ss -tunpel | grep ":53 " |
2.10) Démarrage Samba
2.10.1) Arrêt et Désactivation des anciens services
1 2 |
systemctl stop smbd nmbd winbindd smb nmb winbind systemctl disable smbd nmbd winbindd smb nmb winbind |
Des erreurs peuvent survenir car certains services ne sont pas présents.
Le but ici est d’arrêter tous les services connus qui pourraient interférer avec Samba 4.
2.10.2) Activation et Démarrage du Service Samba
1 2 3 4 5 |
systemctl unmask samba systemctl enable samba systemctl start samba sleep 5 samba-tool processes |
Note : La résolution DNS devrait être rétablie.
2.11) Création d’une zone de recherche inversée
1 |
samba-tool dns zonecreate DC1 1.27.172.in-addr.arpa --username=administrator |
DC1 : Nom de votre serveur
1.27.172.in-addr.arpa : Adresse du sous réseau inversée. (Le sous réseau était 172.27.1.0).
–username : Compte ayant l’autorisation de créer la zone
Un mot de passe sera demandé.
3) Test de l’installation Samba 4
3.1) Test ACLs
1 2 3 |
touch test.txt setfacl -m g:adm:rwx test.txt getfacl test.txt |
3.2) Test des attributs étendus
1 2 3 4 5 |
touch test.txt setfattr -n user.userName -v userValue test.txt setfattr -n security.secName -v secValue test.txt getfattr -d test.txt getfattr -n security.secName -d test.txt |
3.3) Test DNS
3.3.1) Résolutions internes :
Contrôleur de Domaine :
1 2 3 4 5 |
dig dc1.jjworld.lan \ | grep "ANSWER *: *" \ | sed -e "s/^.*ANSWER *: *\([0-9]\),.*$/\1/g" \ | sed -e "s/[1-9]\+/OK/g" \ | sed -e "s/[0]\+/NOK/g" |
Serveur Kerberos :
1 2 3 4 5 |
dig -t SRV _kerberos._tcp.jjworld.lan \ | grep "ANSWER *: *" \ | sed -e "s/^.*ANSWER *: *\([0-9]\),.*$/\1/g" \ | sed -e "s/[1-9]\+/OK/g" \ | sed -e "s/[0]\+/NOK/g" |
Serveur LDAP :
1 2 3 4 5 |
dig -t SRV _ldap._tcp.jjworld.lan \ | grep "ANSWER *: *" \ | sed -e "s/^.*ANSWER *: *\([0-9]\),.*$/\1/g" \ | sed -e "s/[1-9]\+/OK/g" \ | sed -e "s/[0]\+/NOK/g" |
3.3.2) Résolution externe :
1 2 3 4 5 |
dig doc.ubuntu-fr.org \ | grep "ANSWER *: *" \ | sed -e "s/^.*ANSWER *: *\([0-9]\),.*$/\1/g" \ | sed -e "s/[1-9]\+/OK/g" \ | sed -e "s/[0]\+/NOK/g" |
3.4) Test Kerberos
Récupération d’un ticket Kerberos :
1 |
kinit administrator@JJWORLD.LAN |
Affichage des tickets Kerberos :
1 |
klist |
3.5) Test de SMB
1 |
smbclient -L localhost -U Administrator |
Un mot de passe sera demandé.
3.6) Vérification de la réplication
1 |
samba-tool drs showrepl -U administrator |
4) Installation d’un serveur NTP
Cette étape est importante si vous souhaitez intégrer un serveur FreeNAS au Domaine.
4.1) Installation
Désactivation du service NTP par défaut
1 |
timedatectl set-ntp off |
Mise à jour du dépôt et des paquets
1 |
apt -y update && apt -y upgrade |
Installation du paquet NTP
1 |
apt -y install ntp |
4.2) Configuration
4.2.1) Modification fichier ntp.conf
Sauvegarde de l’ancien fichier :
1 2 3 4 5 |
# Debian 11 cp /etc/ntp.conf /etc/ntp.conf.backup # Debian 12 cp /etc/ntpsec/ntp.conf /etc/ntpsec/ntp.conf.backup |
Modification du fichier :
1 |
nano /etc/ntpsec/ntp.conf |
Remarque : Pour Debian 11 et Ubuntu 22.04, /etc/ntp.conf
4.2.2) Redémarrage du service NTP
1 |
systemctl restart ntp.service |
4.2.3) Corriger les permissions du répertoire ntp_signd
1 2 |
sudo chown :ntp /var/lib/samba/ntp_signd sudo chmod 750 /var/lib/samba/ntp_signd |
Cette correction m’a permis de résoudre un problème de décalage horaire entre mon contrôleur de domaine et mon ordinateur
5) Intégration d’une machine Windows au Domaine
5.1) Configuration DNS
5.2) Intégration au Domaine
5.3) Ouverture de session avec un compte AD
5.4) Installation des Outils RSAT
Ouvrir Powershell en tant qu’Administrateur et exécuter le code suivant :
1 2 3 |
Get-WindowsCapability -Online | where { ($_.Name -like "Rsat.ActiveDirectory.DS-LDS.Tools*") -OR ($_.Name -like "Rsat.Dns.Tools*") -OR ($_.Name -like "Rsat.GroupPolicy*") } | foreach { Add-WindowsCapability -Online -Name $_.Name } |
Remarque : La sécurité Windows bloque certaines actions avec le compte administrator (Ou Administrateur) que ce soit en ligne de commande ou via l’interface graphique.
C’est la raison pour laquelle j’ai crée un utilisateur jean membre du groupe Administrateurs du Domaine.
Cependant, si vous souhaitez désactiver cette sécurité, il faudra au préalable exécuter le code suivant dans Powershell :
1 2 3 4 5 6 7 8 9 10 11 |
$regPath="Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System"; $propertyName="FilterAdministratorToken"; [int]$curValue = 0; try{ $curValue=[int]::Parse((Get-ItemPropertyValue -Path $regPath -Name $propertyName -ErrorAction SilentlyContinue)); } catch{ } if($curValue -lt 1){ Set-ItemProperty -Path $regPath -Name $propertyName -Value 1 } |
Il faudra ensuite fermer puis rouvrir la session administrator et ré-exécuter le premier code Powershell.
6) Intégration d’un serveur FreeNAS au Domaine
6.1) Configuration DNS
6.2) Intégration au Domaine
6.3) Vérification
En ligne de Commande :
Se connecter en SSH au serveur FreeNAS et lancer les commandes suivantes :
Lister les utilisateurs du domaine :
1 |
wbinfo -u |
Lister les groupes du domaine :
1 |
wbinfo -g |
8) Sauvegarde de Samba
Votre domaine sous Samba 4 est maintenant fonctionnel.
Il va falloir mettre en place une tâche afin que son état soit régulièrement sauvegardé.
En cas de panne, cela permet de restaurer l’Active Directory dans un état antérieur à la panne.
Vérification de l’intégrité de la base de données :
1 2 3 |
samba-tool dbcheck --cross-ncs # Afficher uniquement le nombre d'erreurs samba-tool dbcheck --cross-ncs | egrep "errors" | sed -e "s/^.*\((.*)\).*$/\1/g" | egrep "[0-9]+" |
Si des erreurs sont présentes, il est possible de tenter une réparation en exécutant la commande suivante :samba-tool dbcheck --cross-ncs --fix
Il est recommandé d’effectuer une sauvegarde de samba avant de lancer cette commande.
Sauvegarde de la base de données :
1 |
samba-tool domain backup offline --targetdir=/backup_samba |
–targetdir : Répertoire de destination de la sauvegarde (Si le répertoire n’existe pas, il sera créé).
Note : Bien que la commande spécifie un argument « offline », il n’est pas nécessaire d’arrêter le service samba.service
Planification de la sauvegarde :
Il ne reste plus qu’à créer une tâche Cron pour effectuer une sauvegarde périodiquement.
Lancement de crontab :
1 |
crontab -e |
Ajout de la ligne suivante :
1 |
00 20 * * sun /usr/bin/samba-tool domain backup offline --targetdir=/backup_samba |
L’exemple précédent effectuera une sauvegarde tous les dimanches à 20H00.
Lister les taches :
1 |
crontab -l |
9) Mise à jour de Samba 4
1) Recommandations
Avant d’effectuer une Mise à jour, il est vivement recommandé de faire une sauvegarde de Samba et de lire attentivement la note d’informations relative à la nouvelle version.
Sources : Upgrading a Samba AD DC
2) Téléchargement et extraction de la nouvelle version de Samba
1 2 |
wget https://download.samba.org/pub/samba/samba-latest.tar.gz tar zxvf samba-latest.tar.gz |
Une fois que le service Samba sera arrêté, il ne sera plus possible de résoudre le nom de domaine (si Samba a été configuré pour utiliser le serveur DNS interne).
3) Arrêter le service Samba
Il faudra arrêter le Service Samba sur l’ensemble des Contrôleurs de Domaine.
1 |
systemctl stop samba.service |
4) Désinstaller Samba
1 2 |
apt-mark unhold samba apt remove -y samba |
5) Compiler et Installer Samba
Compiler et Installer la nouvelle version de Samba à partir de l’étape Configuration du compilateur.
6) Démarrer le service Samba
Démarrage du service samba
1 2 3 4 |
systemctl daemon-reload systemctl start samba.service sleep 5 samba-tool processes |
Voilà ! C’est terminé !
Vous avez enfin créé votre contrôleur de domaine grâce à Samba AD.
Il ne reste plus qu’à :
- Créer vos propres utilisateurs et groupes
- Intégrer d’autres machines au domaine
- Utiliser la section commentaires pour me faire part de vos remarques ou problèmes rencontrés.
- Visiter la page de la documentation officielle pour aller encore plus loin.
- Faire un don pour soutenir notre travail
En savoir plus sur Jj World
Subscribe to get the latest posts sent to your email.
Bonjour, belle documentation, pouvez vous me donner de plus amples informations sur ‘Décommenter la ligne DNSStubListener et position la valeur no.’ merci d’avance
Bonjour Stéphane,
Comme indiqué dans l’étape du dessus, le service systemd-resolve est un service qui permet la résolution de noms de domaine et écoute sur le port 53.
Ce service est généralement activé par défaut sur Ubuntu 20.04.
Il faut l’arrêter et le désactiver si il tourne car il empêchera le bon fonctionnement de Samba qui écoute également sur le port 53.
J’avais coupé ce service, mais je me demandais ce que ça ajoutait de modifier l’option avant de le couper
Je met en place actuellement un serveur sur une section de BTS
Je teste tout sur Virtualbox avant, globalement ça marche
j’ai eu des problèmes avec le fichier /etc/resolv.conf qui était tout le temps modifié par le système, pas évident d’avoir une réponse clair sur ce point. Y a t’il un lien avec le client dhcp ?
Brillant ce tuto, et clair…. merci !
Merci pour ce tuto, clair
Toutefois je rencontre un soucis sur la partie LDAP et KERBEROS
Les deux « dig -t SRV _ldap._tcp.domain.lan » et « dig -t SRV _ldap._tcp.domain.lan » répondre NOK alors que les autres OK
Il a également fallut installer le paquet apt install krb5-kdc pour initialiser la base de données et lancer la commande kinit -V administrator@DOMAIN.LAN
voici ma config debian 10.8 en VM, samba version 4.13.4
si quelqu’un à une idée
je vous remercie d’avance
Salut bbworld,
Je te confirme que le tuto fonctionne avec Debian 10.8.
Les tests dig sont OK pour moi sans devoir installer le paquet krb5-kdc.
Tu as peut être loupé une étape.
Attention, à l’Etape 2.1, on renomme les fichiers de configuration existant.
Merci Kevin, l’erreur était bien située entre la chaise et le clavier, dans /etc/resolv.conf il est important de faire attention à mettre l’adresse IP du serveur AD.
Sinon je confirme cela fonctionne bien sous debian 10.8 et ubuntu 20.10
Merci
Bonjour, merci pour ce tuto sur samba4, ils sont plutôt rare sur le web ou alors incomplet.
Avec mon samba j’essaye d’authentifier des linux avec kerberos sans entrer dans le domaine, sssd permet ça. Mais j’ai du mal.
Peut être un prochain tuto 🙂
Très beau tuto, mais AD trop compliqué, pas d’intérêt pour moi.
This is absolute Gold this awesome tutorial! I’ve been using it since 2020 and used again to update my samba domain to 4.16. Merci Beacoupe Kevin, c’est genial!
Bonjour et merci pour ce super tuto.
Je ne connaissais pas ton site, c’est le besoin qui m’a permis de le trouver.
J’ai suivi le tuto avec un Debian 12.2.0 en VMware et Samba 4.19.2. Tout fonctionne parfaitement, j’ai bien l’intention de le monter au boulot pour un réseau de 120 postes.
Pour info:
Une ligne section 2.1 a renvoyé une erreur car le fichier smb.conf n’existe pas à ce stade, donc inutile de le backup
(mv –backup=t /etc/samba/smb.conf /etc/samba/smb.conf.backup)
Par contre, bien que tout fonctionne, le service kerberos (krb5-kdc) ne démarre pas (failed) car il cherche /var/lib/krb5kdc/principal…
La BDD n’existe nulle part.
Je ne comprends pas comment je peux authentifier mes clients sans Kerberos ?
PS: J’ai parcouru tes autres tutos qui semblent au moins aussi bien 🙂
Merci à toi!
Bonjour Pandore,
Merci beaucoup pour ton retour.
Dans la partie « 2.8.2) Activation et Démarrage du Service Samba », la commande « samba-tool processes » affiche bien un service nommé « kdc_server ».
Bonjour,
je me suis débrouillé, j’ai créé la base avec :
kdb5_util -r MONDOMAINE.LAN create -s
Puis le fichier acl:
touch /etc/krb5kdc/kadm5.acl
Mais la surprise vient plutôt du fait que j’arrivais à connecter mes clients sans aucun problème ni message d’erreur.
Merci encore et continue à nous faire des super tutos (FOG Project ?) 😉