Par défaut les contrôleurs de domaines se font avec un windows server mais il est aussi possible d’en créer avec linux notamment avec Samba4
1 – Prérequis
- Mettre une ip fixe sur son linux
Dans notre exemple nous avons mis 192.168.0.10

- Vérifier le nom du linux / serveur
hostname

Dans notre exemple le serveur s’appele ADDC
- Éditer le fichier hosts
nano /etc/hosts
Ajouter la ligne
IP nom.nomdudomaine nom

- Si on as fait notre serveur en tant que conteneur proxmox il faut que unprivileged container soit à false. En effet le conteneur doit être un conteneur privilégié pour pouvoir gérer lui même les ip et que ce ne soit pas proxmox qui gere sont ip
- Si on as fait notre serveur en tant que conteneur proxmox il faut que le nesting soit à true. En effet, le conteneur doit pouvoir gérer lui même ses namespaces et que ce ne soit pas proxmox qui gère ça

2 – Installation Samba4
- On mets à jour le serveur
apt -y update && apt -y upgrade
- On installe tous les paquets nécessaires
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
Ne surtout pas oublier export DEBIAN_FRONTEND=noninteractive . ça permet à samba de se faire une première configuration basique sans devoir poser des questions qui sont un peu prématurées dans l’état actuel des choses
- Pour ubuntu uniquement, on installe le pack de langue
apt -y install language-pack-en checkinstall
- On fait le ménage dans toutes les installations
apt -y autoremove
apt -y autoclean
apt -y clean
- On télécharge le code source de la dernière version de samba
wget -O samba-latest.tar.gz https://download.samba.org/pub/samba/samba-latest.tar.gz
tar zxvf samba-latest.tar.gz


- On a un dossier samba-4.24.0, on va dedans
- On configure le compilateur
./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

- On compile Samba (préparez un café ou autre, ça peux prendre plusieurs minutes)
make -j && make -j install


- On va verrouiller l’installation pour etre sûr de ne pas récuperer les paquets des dépots ubuntu qui sont plus anciens
apt-mark hold samba
apt-mark showhold

3 – Création du domaine
- On va nettoyer s’il y a des anciennes installations
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/*

Rien à nettoyer et c’est normal puisque l’on part, dans notre exemple, d’une installation vierge
- Création du domaine
samba-tool domain provision --server-role=dc --use-rfc2307 --dns-backend=SAMBA_INTERNAL \
--realm=HOKUTOTOKISAMA.LAN --domain=HOKUTOTOKISAMA --option="dns forwarder=192.168.0.103"
Realm = nom du domaine complet
Domain = nom du domaine sans extension
dns forwarder = ip du serveur dns (la plupart du temps sa box)

- On modifie le mot de passe de l’utilisateur Administrator qui a été généré par le domaine
samba-tool user setpassword administrator

- On désactive l’expiration du mot de passe de l’utilisateur Administrator
samba-tool user setexpiry administrator --noexpiry
- On crée un utilisateur qui va nous servir pour entrer les machines dans le domaine – Dans notre exemple on va l’appeler hokuto
samba-tool user create hokuto

- On désactive l’expiration du mot de passe de notre utilisateur
samba-tool user setexpiry hokuto --noexpiry
- On rajoute notre utilisateur dans le groupe des administrateurs du domaine
samba-tool group addmembers "Domain Admins" hokuto

- On récupère la configuration par défaut de kerberos
cp /var/lib/samba/private/krb5.conf /etc/krb5.conf
- On configure notre serveur en tant que serveur dns. En effet, les machines du domaine vont demander au contrôleur de domaine comment résoudre les ip
nano /etc/resolv.conf
Mettre les informations suivantes dans le fichier
nameserver ipduserveur
search domaineavecextension
domain domaineavecextension

- Vérification d’utilisation du port 53. Port utilisé par le dns de Samba
ss -tunpel | grep ":53 "
Si on a des choses comme dans l’image suivante alors il faut suivre les étapes suivantes sinon passer à l’étape Démarrage de Samba

- Désactivation du listener de systemd-resolve
nano /etc/systemd/resolved.conf
Décommenter la ligne DNSStubListener et mettre la valeur à no

- Arrêt et désactivation du service listener
systemctl stop systemd-resolved
systemctl disable systemd-resolved.service
- Vérification
ss -tunpel | grep ":53 "

On est tout bon
4 – Démarrage de Samba
- Arrêt et désactivation des anciens services
systemctl stop smbd nmbd winbindd smb nmb winbind
systemctl disable smbd nmbd winbindd smb nmb winbind
Si certains services sont en failed c’est normal, cela veux dire qu’ils ne sont pas présents sur le serveur
- Activation et démarrage de samba
systemctl unmask samba
systemctl enable samba
systemctl start samba
sleep 5
samba-tool processes

Tout les services sont correctement démarrés
- Création d’une zone de recherche inversée de façon à ce que notre contrôleur de domaine puisse faire la résolution dns des appareils du domaine
samba-tool dns zonecreate nomserveur ip.in-addr.arpa --username=nomadministrator
Exemple
samba-tool dns zonecreate ADDC 0.168.192.in-addr.arpa --username=administrator
Notre serveur s’appelle ADDC
On est sur la plage d’ip 192.168.0….

5 – Test
Pour tester, on peux essayer de rentrer un appareil sur le domaine
Le tuto pour rentrer un appareil windows sur le domaine est ici
Le tuto pour rentrer un appareil linux sur le domaine est ici


































