Installer un contrôleur de domaine Active Directory avec Samba 4 sur Rocky Linux 8
Depuis sa version 4, Samba permet de créer un contrôleur de domaine Active Directory et donc de se passer d’une infrastructure Microsoft et des licences qui vont avec tout en permettant l’intégration de machines client Windows. Dans cet article nous verrons comment installer Samba 4 et le configurer comme AD DC principal sous Rocky Linux 8.
Prérequis
- Disposer d’une machine sous Rocky Linux 8
- Savoir gérer l’installation de packages avec
dnf. - Avoir des notions de base d’un environnement Active Directory.
Contexte de l’article
Pour la suite de l’article nous assumerons les éléments suivants:
- Nom d’hôte du serveur samba:
sambadc - Interface réseau:
enp0s3 - Adresse IPv4 du serveur samba:
172.16.0.10/24 - Domaine Active Directory:
rocky.lan
Installation de Samba 4
Bien que Samba 4 soit disponible depuis les packages officiels dans les dépôts de Rocky Linux 8, ceux-ci ne sont pas compilés (en tout cas à l’heure ou j’écris cet article) pour prendre en charge la création d’un contrôleur de domaine Active Directory. Il va donc nous falloir prendre les choses en main et le compiler nous même depuis les sources.
Installation des dépendances
Activation des dépôts supplémentaires
Il nous faut commencer par activer des dépôts additionnels: EPEL et Powertools:
sudo dnf install epel-release
sudo dnf config-manager --set-enabled powertoolsInstallation des packages RPM nécessaires à la compilation
Afin de pouvoir procéder à la compilation des sources, nous devons nous assurer de disposer de tous les outils et dépendances nécessaires.
sudo dnf install docbook-style-xsl gcc gdb gnutls-devel gpgme-devel jansson-devel \
keyutils-libs-devel krb5-workstation libacl-devel libaio-devel \
libarchive-devel libattr-devel libblkid-devel libtasn1 libtasn1-tools \
libxml2-devel libxslt lmdb-devel openldap-devel pam-devel perl \
perl-ExtUtils-MakeMaker perl-Parse-Yapp popt-devel python3-cryptography \
python3-dns python3-gpg python36-devel readline-devel rpcgen systemd-devel \
tar zlib-devel flex flex-devel bison bison-devel python3-markdown dbus-develInstallation d’un module PERL via CPAN
A ce stade il nous manque encore un module Perl que nous devons installer avec CPAN: le module JSON.
sudo cpan JSONTéléchargement des sources
Maintenant que nous avons tous les outils et dépendances nécessaires, nous pouvons télécharger les sources depuis le site officiel de Samba: https://download.samba.org/pub/samba/.
Nous utiliserons ici Samba 4.18.6, la dernière version stable au moment décrire cet article.
mkdir ~/sources
cd sources
wget https://download.samba.org/pub/samba/samba-4.18.6.tar.gzExtraction des fichiers de l’archive
Nous pouvons maintenant utiliser tar pour extraire l’archive.
tar xvf ./samba-4.18.6.tar.gzNous avons maintenant un dossier ~/sources/samba-4.18.6/ qui contient les sources de Samba 4.
Compilation de Samba 4
La compilation d’un logiciel se décompose en trois étape:
- La configuration et la vérification des dépendances
- La compilation du code source
- L’installation des fichiers dans notre système
Configuration et vérification des dépendances
Nous devons ici utiliser le script configure et lui passer un ensemble d’options qui définirons les options de compilation tels que les chemins où seront installé les fichiers mais aussi les options de compilation de Samba (comme le support ou non de la fonction de contrôleur de domaine). Cette étape est cruciale et indispensable.
cd samba-4.18.6
./configure --prefix=/usr \
--enable-fhs \
--sysconfdir=/etc \
--localstatedir=/var \
--with-privatedir=/var/lib/samba/private \
--with-smbpasswd-file=/etc/samba/smbpasswd \
--with-piddir=/var/run/samba \
--with-pammodulesdir=/lib/x86_64-linux-gnu/security \
--libdir=/usr/lib/x86_64-linux-gnu \
--with-modulesdir=/usr/lib/x86_64-linux-gnu/samba \
--datadir=/usr/share \
--with-lockdir=/var/run/samba \
--with-statedir=/var/lib/samba \
--with-cachedir=/var/cache/samba \
--with-socketpath=/var/run/ctdb/ctdbd.socket \
--with-logdir=/var/log/ctdbNous pourrions aussi écrire le tout sur une seule ligne, c’est au choix.
./configure --prefix=/usr --enable-fhs --sysconfdir=/etc --localstatedir=/var --with-privatedir=/var/lib/samba/private --with-smbpasswd-file=/etc/samba/smbpasswd --with-piddir=/var/run/samba --with-pammodulesdir=/lib/x86_64-linux-gnu/security --libdir=/usr/lib/x86_64-linux-gnu --with-modulesdir=/usr/lib/x86_64-linux-gnu/samba --datadir=/usr/share --with-lockdir=/var/run/samba --with-statedir=/var/lib/samba --with-cachedir=/var/cache/samba --with-socketpath=/var/run/ctdb/ctdbd.socket --with-logdir=/var/log/ctdbNotez que nous n’utilisons ici pas l’option qui permet d’installer le service samba pour systemd. Nous devrons le créer manuellement plus tard. L’unité systemd crée lors de la compilation n’est pas adaptée à l’utilisation de Samba 4 comme contrôleur de domaine.
Après quelques dizaines de secondes, si tout s’est bien déroulé nous devrions obtenir le résultat suivant:

Compilation des sources de Samba 4
Maintenant que la configuration est terminée nous pouvons passer à la compilation des sources à l’aide de make. Petite astuce intéressante, nous pouvons gagner un peu de temps on indiquant combien de processus de compilation doivent tourner en parallèle. Ici nous le lancerons avec 4 processus en parallèle.
make -j 4Suivant les performances de votre système la compilation peut dure quelques minutes voire une bonne dizaine de minutes. Si tout se passe bien nous devrions obtenir le résultat suivant:

Installation de Samba 4
La dernière étape consiste à installer les exécutables, fichiers de configuration et tout ce qui est nécessaire dans les bons répertoires et de créer les liaisons nécessaires.
sudo make installCette dernière étape prendre également quelques dizaines de secondes et devrait donner le résultat suivant:

Vérification
Une fois installé Samba 4 devrait nous donner accès à une multitude d’exécutables, dont le principal samba. Pour vérifier si i lest bien installé, nous pouvons demander d’afficher la version.
samba --version
Configuration de Samba 4 en contrôleur de domaine Active Directory
Nous allons maintenant passer à la configuration de Samba 4 à proprement parler. Notez que cette partie n’est pas spécifique à Rocky Linux 8 et est applicable peu importe le système sur lequel vous auriez installé Samba 4.
Préparatifs
Nous devons nous assurer que notre système puisse résoudre son nom de domaine, dans notre cas sambadc.rocky.lan doit être résolu en 172.16.0.10. Pour ce faire nous devons éditer le fichier /etc/hosts.
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.0.10 sambadc.rocky.lan sambadcEnsuite nous devons supprimer le fichier de configuration par défaut de Samba 4. Un nouveau fichier sera généré lors de la création du domaine Active Directory.
sudo rm /etc/samba/smb.confEnfin si vous vous aviez déjà tenté une configuration de Samba, vous devez supprimer (ou déplacer) les fichiers de base de données précédemment créés. Vous pouvez les retrouver via la commande suivante:
sudo find /var/lib/samba -name *.ldpProvisionner le domaine
Nous pouvons maintenant provisionner le domaine, c’est à dire créer la structure du domaine Active Directory. La commande suivante lance le provisionnement en mode interactif et vous demandera de répondre à quelques questions.
sudo samba-tool domain provision --use-rfc2307 --interactiveRealm [ROCKY.LAN]: ROCKY.LAN
Domain [ROCKY]: ROCKY
Server Role (dc, member, standalone) [dc]: dc
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: SAMBA_INTERNAL
DNS forwarder IP address (write 'none' to disable forwarding) [8.8.8.8]: 8.8.8.8
Administrator password:
Retype password:Les informations à donner sont les suivantes:
- Realm: le nom de domaine complet, ici:
ROCKY.LAN - Domain: le nom de domaine Netbios, ici
ROCKY - Server Role: le rôle du serveur, ici
dcpour « Domain controller » - DNS backend: Le système DNS qui prendra en charge le domaine, ici
SAMBA_INTERNAL(Samba dispose de base de son propre serveur DNS). - DNS forwarder IP Address: un serveur DNS pour rediriger les requêtes DNS en dehors du domaine, ici
8.8.8.8. - Administrator password: le mot de passe du compte Administrator@rocky.lan
- Retype password: la confirmation du mot de passe.
Mise en place des fichiers de configuration
Le fichier de configuration deSamba, /etc/samba/smb.conf a été régénéré:
# Global parameters
[global]
dns forwarder = 8.8.8.8
netbios name = SAMBADC
realm = ROCKY.LAN
server role = active directory domain controller
workgroup = ROCKY
idmap_ldb:use rfc2307 = yes
[sysvol]
path = /var/lib/samba/sysvol
read only = No
[netlogon]
path = /var/lib/samba/sysvol/rocky.lan/scripts
read only = NoPar contre nous devons remplacer le fichier de configuration de Kerberos /etc/krb5.conf par celui créé par le provisionnement.
sudo cp /var/lib/samba/pribate/krb5.conf /etc/krb5.confA titre d’information, voici le contenu du fichier généré lors du provisionnement:
[libdefaults]
default_realm = ROCKY.LAN
dns_lookup_realm = false
dns_lookup_kdc = true
[realms]
ROCKY.LAN = {
default_domain = rocky.lan
}
[domain_realm]
sambadc = ROCKY.LANParamétrage DNS
Nous devons maintenant faire en sorte que notre serveur, sambadc, utilise les services DNS de Samba pour la résolution des noms de domaines. Donc attribuer le serveur dns 172.16.0.10 à notre interface enp0s3. En principe c’est NetworkManager qui gère les connexions réseau.
sudo nmcli connection modify enp0s3 ipv4.dns 172.16.0.10
sudo systemctl restart NetworkManagerPremier démarrage de Samba en contrôleur de domaine.
Avant d’aller plus loin dans la configuration, nous allons tester le bon fonctionnement de notre domaine. Nous allons donc commencer par lancer Samba manuellement.
sudo sambaPar défaut samba est lancé en arrière plan. Nous pouvons vérifier qu’il est bien actif avec la commande ps.
sudo ps -aux | grep sambaSi vous voyez une série de ligne référençant samba, c’est qu’il tourne bel et bien en arrière plan.
Tests de fonctionnement
Vérifier l’authentification
Nous pouvons maintenant tester l’identification avec le compte Administrator.
kinit -V AdministratorEn cas de succès vous devriez obtenir un résultat comme ci-dessous:

Vérifier le fonctionnement du DNS
Nous pouvons aussi vérifier que la résolution DNS est fonctionnelle
host -t SRV _ldap._tcp.rocky.lanCe qui devrait nous donner le nom de domaine du serveur samba:

Arrêter le processus samba
Avant de passer à la suite nous devons arrêter samba, puisque nous allons créer le service juste après. Nous devons dans un premier temps connaître le PID de samba:
sudo ps -A | grep samba
Nous pouvons maintenant utiliser le PID de samba, ici 44752, pour terminer le processus.
sudo kill 44752Création du service pour systemd
Comme dit au début de l’article, nous n’avons pas utilisé l’option permettant d’installer un service dans systemd parce qu’il n’est pas adapté à un rôle de contrôleur de domaine. Nous devons donc créer une unité de service, et l’installer.
Voici le fichier de description de service que nous devons enregistré dans /etc/systemd/system/samba-ad-dc.service.
[Unit]
Description=Samba ADDC Daemon
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/var/run/samba/samba.pid
ExecStart=/usr/sbin/samba -D
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
Une fois ce fichier créé, il faut recharger le gestionnaire de service pour prendre les modifications en compte.
sudo systemclt daemon-reloadNous pouvons vérifier que le service existe bel et bien.
sudo systemctl status samba-ad-dc.servicePour l’instant le service n’est pas lancé ni activé automatiquement au démarrage. Nous corrigerons ça plus tard.
Samba et SELinux
Si vous essayez de démarrer le service dans l’état actuel du système, vous devriez obtenir une erreur.

De base sur Rocky Linux, comme sur la plupart des distribution basée sur Red Hat, SELinux est en mode « Enforcing », ce qui signifie que si un service n’est correctement étiqueté, SELinux le bloquera.
Un moyen simple de vérifier est d’intéroger les logs d’audit:
sudo ausearch -c samba | grep deniedSi SELinux a bloqué l’exécution du service vous devriez avoir un résultat qui s’affiche.
Pour résoudre le problème, il y a deux approches possibles:
- Passer SELinux en mode « Permissive » (ne surtout jamais le désactiver)
- Corriger l’étiquetage du service
Passer SELinux en mode « Permissive »
En mode « Permissive » SELinux génère des alertes mais ne bloque rien. Surtout ne désactivez pas SELinux, c’est une extension du kernel qui permet d’ajouter une couche de sécurité extrêmement efficace à condition de bin vouloir comprendre son fonctionnement.
Pour changer son mode de fonctionnement de manière permanente il faut modifier le fichier /etc/selinux/config et définir SELINUX=permissive et ensuite redémarrer la machine.
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=permissive
# SELINUXTYPE= can take one of these three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targetedsudo rebootCorriger l’étiquetage des fichiers et services
Le problème rencontré provient du fait que l’étiquetage SELinux des fichiers et services installés ne correspond pas aux polices de sécurité. Nous pouvons corriger ça de manière simple mais un peu lourde en demandant à SELinux de refaire l’étiquetage du système complet.
Pour ce faire, nous devons simplement créer un fichier vide .aurorelabel à la racine du système et redémarrer la machine.
sudo touch /.autorelabel
sudo rebootLe redémarrage prendra un peu de temps, mais cette solution a le mérite de laisser SELinux en mode « enforcing » et donc de maintenait la sécurité du système.
Activer le service samba-ad-dc
Nous pouvons maintenant activer le service samba-ad-dc et le faire charger automatiquement au démarrage de la machine.
sudo systemctl enable --now samba-ad-dc.serviceNotez que l’option --now provoque le démarrage immédiat du service en plus de son installation au démarrage de lamachine.
Nous pouvons vérifier que le service est bien fonctionnel:
sudo systemctl is-active samba-ad-dc.service
Samba et le firewall
Dans l’état actuel des choses, Samba est fonctionnel mais normalement, si vous êtes sous Rocky Linux, vous avez de base un firewall actif qui n’autorise aucun trafic entrant: firewalld .
Nous devons donc paramétrer firewalld pour autoriser le trafic entrant relatif aux différents services proposés par samba.
Identifier la zone à laquelle appartient l’interface du serveur
Comme nous devons autoriser des services au niveau d’une zone du firewall, nous devons connaître la zone à laquelle appartient l’interface de notre serveur, dans notre cas il s’agit de enp0s3.
sudo firewall-cmd --get-active-zone
L’interface enp0s3 est donc par défaut dans la zone « public ». Etant donné que nous n’avons ici d’une interface, nous allons simplement autoriser les services adéquats dans la zone « public ».
Autoriser les services samba-ad-dc
Par chance firewalld vient avec une description de service complète pour un serveur Samba contrôleur de domaine Active Directory: samba-dc. Nous pouvons donc ajouter cet ensemble de service de manière permanente à la zone « public ».
sudo firewall-cmd --permanent --zone=public --add-service=samba-dcIl ne nous reste plus qu’à recharger le service.
sudo firewall-cmd --reloadLe mot de la fin
Nous avons maintenant un serveur Samba contrôleur de domaine Active Directory opérationnel qui utilise son système de DNS interne. Pour qu’une machine client puisse joindre le domaine, il suffit de lui renseigner ce serveur Samba comme serveur DNS et lancer la procédure pour joindre le domaine.

Laisser un commentaire
Vous devez vous connecter pour publier un commentaire.