Installer Samba 4 – Active Directory sous Linux


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 10.5 et Ubuntu Server 20.04 .



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 :

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é.
Important : A partir d’ici, toutes les commandes seront exécutées en tant que root.

1.2.1) Configuration de l’heure :
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.2) Modification du fichier “hosts” :
nano /etc/hosts

Ajouter une ligne semblable à 172.27.1.210 dc1.jjworld.lan dc1

Enregistrer les modifications : Ctrl + S
Quitter nano : Ctrl + X
Si les modifications n’ont pas été enregistrées, la question vous sera posée.



1.3) Installation de Samba 4

1.3.1) Mise à jour du dépôt :
apt-get -y update
1.3.2) Mise à jour des paquets :
apt-get -y upgrade
1.3.3) Installation des paquets nécessaires à la compilation de Samba 4 :
export DEBIAN_FRONTEND=noninteractive
 
apt-get -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 \
    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 wget
Uniquement Ubuntu 20.04 :
apt-get -y install language-pack-en checkinstall
1.3.4) Nettoyage des fichiers résiduels :
apt-get -y autoremove
apt-get -y autoclean
apt-get -y clean
1.3.5) Téléchargement et extraction de Samba 4 :
wget https://download.samba.org/pub/samba/samba-latest.tar.gz
tar zxvf samba-latest.tar.gz
1.3.6) Configuration du compilateur :
# Se déplacer dans le répertoire samba-4.xx.x
cd samba-4.12.5

Attention : Le répertoire samba-4.xx.x sera différent en fonction de la version téléchargée.

# 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 \
--with-lockdir=/var/run/samba \
--enable-selftest

1.3.7) Compilation de Samba :
make -j

1.3.8) Installation de Samba :
make -j install

1.3.9) Verrouillage du paquet Samba :

Cette étape est importante pour éviter d’installer accidentellement Samba en provenance du dépôt officiel (plus ancien).

apt-mark hold samba
apt-mark showhold
1.3.10) Vérifications installation :
apt search ^samba$
samba --version
1.3.11) Affichage des fichiers et répertoires de Samba :
samba -b
samba -b | egrep "CONFIGFILE|LOCKDIR|STATEDIR|CACHEDIR|PRIVATE_DIR"
1.3.12) Redémarrage de Samba 4 (Uniquement en cas de Mise à jour) :
systemctl daemon-reload
systemctl start samba.service
samba-tool processes



2) Création d’un domaine avec Samba 4

2.1) Nettoyage de l’environnement

mv --backup=t /etc/samba/smb.conf /etc/samba/smb.conf.backup
mv --backup=t /etc/krb5.conf /etc/krb5.conf.backup
rm -rf /var/lib/samba/private/*

2.2) Promouvoir le serveur en Contrôleur de Domaine

samba-tool domain provision --server-role=dc --use-rfc2307 --dns-backend=SAMBA_INTERNAL \
	--realm=JJWORLD.LAN --domain=JJWORLD --option="dns forwarder=172.27.1.210"

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

samba-tool user setpassword administrator

Un mot de passe complexe est exigé.

2.4) Désactivation expiration mot de passe pour Administrator

samba-tool user setexpiry administrator --noexpiry

2.5) Création d’un nouvel Administrateur

Création :
samba-tool user create jean
Désactivation expiration mot de passe :
samba-tool user setexpiry jean --noexpiry
Ajout dans le groupe Administrators :
samba-tool group addmembers "Domain Admins" jean

2.6) Récupération configuration Kerberos

cp /var/lib/samba/private/krb5.conf /etc/krb5.conf

2.7) Configuration DNS

2.7.1) Serveur de résolution des domaines externes
nano /etc/samba/smb.conf
Modifier ou ajouter une ligne “dns forwarder = “ avec l’Adresse IP de votre serveur DNS capable de résoudre des nom de domaine externes. (Ex : votre Box opérateur).
2.7.2) Serveur de résolution DNS et domaine par défaut
nano /etc/resolv.conf
Ajouter des lignes semblables à :
nameserver 172.27.1.210
search jjworld.lan
domain jjworld.lan

Il s’agit de l’IP du serveur AD lui même.

Important : 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.7.3) Vérification port DNS non-utilisé
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.7.4) Désactivation systemd-resolve
Désactivation du Listener :
nano /etc/systemd/resolved.conf
Décommenter la ligne DNSStubListener et position la valeur no.
Arrêt et désactivation du service :
systemctl stop systemd-resolved
systemctl disable systemd-resolved.service
ss -tunpel | grep ":53 "

2.8) Démarrage Samba

2.8.1) Arrêt et Désactivation des anciens services
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.8.2) Activation et Démarrage du Service Samba
systemctl unmask samba
systemctl enable samba
systemctl start samba
sleep 5
samba-tool processes

Note : La résolution DNS devrait être rétablie.

2.8.3) Création d’une zone de recherche inversée
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

touch test.txt
setfacl -m g:adm:rwx test.txt
getfacl test.txt

3.2) Test des attributs étendus

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 :
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 :
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 :
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 :
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 :
kinit administrator@JJWORLD.LAN
Affichage des tickets Kerberos :
klist

3.5) Test de SMB

smbclient -L localhost -U Administrator

Un mot de passe sera demandé.

3.6) Vérification de la réplication

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
timedatectl set-ntp off
Mise à jour du dépôt
apt-get -y update
Mise à jour des paquets
apt-get -y upgrade
Installation du paquet NTP
apt-get -y install ntp

4.2) Configuration

4.2.1) Modification fichier ntp.conf
Sauvegarde de l’ancien fichier :
cp /etc/ntp.conf /etc/ntp.conf.backup
Modification du fichier :
nano /etc/ntp.conf
Il faudra ajouter les lignes :
tinker panic 0 : Uniquement si votre serveur est une Machine Virtuelle
logfile /var/log/ntp
ntpsigndsocket /var/lib/samba/ntp_signd

Il faudra ajouter mssntp à la fin des lignes “restrict …”
4.2.2) Redémarrage du service NTP
systemctl restart ntp.service



5) Intégration d’une machine Windows au Domaine

5.1) Configuration DNS

Renseigner l’adresse IP du nouveau contrôleur de domaine ou d’un autre serveur capable de résoudre le nom de domaine.

5.2) Intégration au Domaine

Un utilisateur et un mot de passe seront demandés.
Un redémarrage sera nécessaire.

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 :

Get-WindowsCapability -Online | where {
	($_.Name -like "Rsat.ActiveDirectory.DS-LDS.Tools*") -OR ($_.Name -like "Rsat.Dns.Tools*")
} | 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 :

$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

Domain : Renseigner le domaine par défaut
Nameserver : Renseigner l’adresse IP du Contrôleur de Domaine

6.2) Intégration au Domaine

Domain Name : jjworld.lan
Domain Account Name : Utilisateur ayant le droit d’intégrer une machine au domaine
Domain Account Password : Mot de passe de l’utilisateur

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 :
wbinfo -u
Lister les groupes du domaine :
wbinfo -g



7) Ajout d’un second contrôleur de domaine

Pour assurer une haute disponibilité du service, il est recommandé d’avoir un second contrôleur de domaine.

Pour ajouter un autre Contrôleur de Domaine, il faudra reprendre le tutoriel depuis le début et remplacer la commande de l’étape 2.2) Promouvoir le serveur en Contrôleur de Domaine par :

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.



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 :

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 :

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 :
crontab -e
Ajout de la ligne suivante :
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 :
crontab -l



9) Mise à jour de Samba 4

1) Recommandations

Avant de faire la Mise à jour, il est vivement recommandé d’effectuer une sauvegarde 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

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.

systemctl stop samba.service

4) Désinstaller Samba

apt-mark unhold samba
apt-get 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

systemctl daemon-reload
systemctl start samba.service
sleep 5
samba-tool processes

2 Trackbacks & Pingbacks

  1. Installer NextCloud 19 - Cloud Personel - Français - Jj World
  2. FreeNAS 11.3 - Installation Complète - Tutoriel Français

Laisser un commentaire

%d blogueurs aiment cette page :