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.12.
Nous verrons également comment intégrer des machines à ce domaine.

Ubuntu Server 20.04 sera utilisé dans ce tutoriel. La version 18.04 est également compatible.



1) Installation d’Ubuntu Server 20.04

Cette étape est facultative.
Si vous avez déjà installer Ubuntu Server 20.04, passez à l’étape 2) Installation de Samba 4.


Lien de téléchargement : Ubuntu Server 20.04.

Pour les utilisateurs de FreeNAS :
Vous pouvez créer une VM en suivant le tutoriel Créer une Machine Virtuelle.
Une fois la VM créée, vous pourrez poursuivre ce tutoriel.
Il faudra allouer à la VM au minimum 2 vCPUs, 1024 MiB de RAM et 20 GiB de stockage.

1.1) Sélection de la langue :



1.2) Configuration du clavier selon votre langue :



1.3) Configuration réseau :

L’adresse IP du Contrôleur de Domaine ne doit pas changer.
Nous allons donc la fixer.

Sélectionner l’interface réseau puis cliquer sur “Edit IPv4”.
Sélectionner “Manual”.
Renseigner la configuration réseau (En fonction de votre réseau).
Il s’agit ici d’un exemple.



1.4) Configuration du proxy :

Laisser par défaut.
Sauf si vous disposez d’un serveur proxy.



1.5) Configuration du dépôt :

Laisser également par défaut.



1.6) Partitionnement disque :

Sélectionner “Use an entire disk”.
Sélectionner “Terminé”.
L’installation se fera entièrement sur le disque dur sélectionné.



1.7) Configuration disques :

Laisser par défaut.



1.8) Confirmation

Cliquer sur “Continuer”.
Il s’agit dans notre cas d’un disque dur virtuel vierge donc pas de soucis à se faire.



1.9) Configuration du profil

Your name : votre nom
Your server’s name : dc1 (Le nom que vous avez choisi lors de la création de la VM)
Pick a username : Le nom d’utilisateur (Login)
Choose a password : Renseigner votre mot de passe (Attention : Clavier QWERTY)
Sélectionner “Terminé”



1.10) Installation OpenSSH

Sélectionner “Install OpenSSH server”.
Cela nous permettra de prendre la main à distance via SSH.
Sélectionner “Terminé”



1.11) Fonctionnalités

Cocher “Powershell” dans la liste.
Sélectionner “Terminé”.



1.12) Fin d’installation

Une fois l’installation terminée, cliquer sur “Reboot”.



1.13) Démontage de l’ISO (Utilisateur FreeNAS)

Il faut maintenant enlever l’ISO d’Ubuntu Server dans la VM avant de la redémarrer.
Car le programme d’installation risque de se relancer.

Retourner dans le menu “Virtual Machines” de FreeNAS.
Cliquer sur “POWER OFF”.

Cliquer sur “DEVICES”.
Cliquer sur les “…” à droite de “CDROM”.
Cliquer sur “Delete”.
Cliquer sur “DELETE DEVICE” pour confirmer.
Retourner dans le menu “Virtual Machines” de FreeNAS.
Cliquer sur “START”.
Cliquer sur “VNC”.

Vous êtes invité à rentrer un login.
Le clavier est en QWERTY donc je conseille de prendre la main en SSH.
Il existe plusieurs outils pour prendre la main en SSH (Ex : Putty).
Le client OpenSSH est maintenant disponible dans Windows 10 (A condition d’avoir une version récente).



2) Installation de Samba 4

2.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.

2.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.

2.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

2.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.



2.3) Installation (ou Mise à jour) de Samba 4.12

2.3.1) Mise à jour du dépôt :
apt-get -y update
2.3.2) Mise à jour des paquets :
apt-get -y upgrade
2.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 \
	language-pack-en 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 \
	checkinstall
2.3.4) Nettoyage des fichiers résiduels :
apt-get -y autoremove
apt-get -y autoclean
apt-get -y clean
2.3.5) Téléchargement et extraction de Samba 4.12 :
wget https://download.samba.org/pub/samba/samba-latest.tar.gz
tar zxvf samba-latest.tar.gz
2.3.6) Arrêt et Désinstallation de Samba (Uniquement en cas de Mise à jour) :
systemctl stop samba.service
apt-mark unhold samba
apt-get remove -y samba
2.3.7) Configuration du compilateur :
# Se déplacer dans le répertoire samba-4.12.x
cd samba-4.12.5

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

# Configuration
./configure \
--prefix=/usr --exec-prefix=/usr \
--with-systemd --systemd-install-services --with-systemddir=/etc/systemd/system \
--sysconfdir=/etc --localstatedir=/var \
--enable-selftest \
--with-smbpasswd-file=/etc/samba/smbpasswd \
--with-modulesdir=/usr/lib/x86_64-linux-gnu/samba \
--with-lockdir=/var/run/samba \
--enable-fhs

2.3.8) Compilation de Samba :
make -j

2.3.9) Installation de Samba :
checkinstall -y
2.3.10) Verrouillage version Samba :

Cette étape est importante pour éviter que le paquet Samba du dépôt UBuntu (plus ancien) remplace la nouvelle version qui vient d’être installée.

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



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

3.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/*

3.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

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
–password : Mot de passe du compte administrator. (Volontairement omis)

3.3) Modification mot de passe Administrator

samba-tool user setpassword administrator

Un mot de passe complexe est exigé.

3.4) Désactivation expiration mot de passe pour Administrator

samba-tool user setexpiry administrator --noexpiry

3.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

3.6) Récupération configuration Kerberos

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

3.7) Configuration DNS

3.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).
3.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.

3.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.

3.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"

3.8) Démarrage Samba

3.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.

3.8.2) Activation et Démarrage du Service Samba
systemctl unmask samba
systemctl enable samba
systemctl start samba
samba-tool processes

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

3.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é.



4) Test de l’installation Samba 4

4.1) Test ACLs

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

4.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

4.3) Test DNS

4.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"
4.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"

4.4) Test Kerberos

Récupération d’un ticket Kerberos :
kinit administrator@JJWORLD.LAN
Affichage des tickets Kerberos :
klist

4.5) Test de SMB

smbclient -L localhost -U Administrator

Un mot de passe sera demandé.

4.6) Vérification de la réplication

samba-tool drs showrepl -U administrator



5) Installation d’un serveur NTP

Cette étape est importante si vous souhaitez intégrer un serveur FreeNAS au Domaine.
Pour que FreeNAS puisse intégrer le domaine, il faudra installer un serveur NTP sur notre Contrôleur de Domaine.

5.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

5.2) Configuration

5.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
logfile /var/log/ntp
ntpsigndsocket /var/lib/samba/ntp_signd

Il faudra ajouter mssntp à la fin des lignes “restrict …”



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

6.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.

6.2) Intégration au Domaine

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

6.3) Ouverture de session avec un compte AD

6.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.



7) Intégration d’un serveur FreeNAS au Domaine

7.1) Configuration DNS

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

7.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

7.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



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

Pour assurer une redondance et une tolérance de panne, il est recommandé d’avoir un second contrôleur de domaine.

En cours d’édition…



9) Sauvegarde de Samba

Maintenant que votre domaine sous Samba 4 est 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
# Afficher uniquement le nombre d'erreurs
samba-tool dbcheck | egrep "errors" | sed -e "s/^.*\((.*)\).*$/\1/g" | egrep "[0-9]+"
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

Il ne reste plus qu’à créer une tâche Cron pour effectuer une sauvegarde périodiquement.

En cours d’édition…



10) Mise à jour de Samba 4

De manière général, pour mettre à jour Samba 4, il faudra reproduire les différentes étape de l’installation de Samba 4.
Il est vivement recommandé d’effectuer une sauvegarde et de lire attentivement la note d’informations relative à la nouvelle version avant de faire la Mise à Jour.
Sources : Upgrading a Samba AD DC

1 Trackbacks & Pingbacks

  1. Installer NextCloud 19 - Cloud Personel - Français - Jj World

Laisser un commentaire

%d blogueurs aiment cette page :