how-to-install-and-manage Help

Samba

Samba est une réimplémentation en C++ et Python, du module Active Directory de Windows 2012 R2 capable de fonctionner de sous linux.

Nous avons choisi d'utiliser cette distribution, car elle nous permet de pouvoir exécuter du Active Directory sur Linux, Et d'avoir une solution open source pour le déploiement de l'Active Directory.

Configuration NixOS

Pour la configuration de SAMBA sur nixos la premiere chose à faire est d'appliquer un overlay sur le paquet samba. Cet overlay va inclure dans la compilation les module liés à l'active directory

Dans la configuration Nixos voici comment cela se manifeste  :

nixpkgs.overlays = [ (self: super: { samba = (super.samba.override { enableLDAP = true; enableMDNS = true; enableDomainController = true; enableProfiling = true; # Optional for logging # Override python packages manually }) .overrideAttrs (finalAttrs: previousAttrs: { pythonPath = with super; [python3Packages.dnspython python3Packages.markdown tdb ldb talloc]; }); }) ];

Ensuite nous devons désactiver resolvconf pour ne pas interfacer avec le dns interne de SAMBA. a Au niveau de la configuration Nix nous avons déploiement à désactiver modules resolvconf

systemd.services.resolvconf.enable = false;

Et pour terminer la configuration paquet de SAMBA, nous allons finir par overrider le service par défaut de SAMBA pour le créer avec notre paquet personalisé

Voici la configuration nixos lié au service systemd de SAMBA :

Override du service par défaut de SAMBA

systemd.services.samba-smbd.enable = false; systemd.services.samba = { description = "Samba Service Daemon"; requiredBy = ["samba.target"]; partOf = ["samba.target"]; serviceConfig = { ExecStart = "${samba}/sbin/samba --foreground --no-process-group"; ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID"; LimitNOFILE = 16384; PIDFile = "/run/samba.pid"; Type = "notify"; NotifyAccess = "all"; }; unitConfig.RequiresMountsFor = "/var/lib/samba"; };

Utilisation des options SAMBA provenant de nixpkgs :

services.samba = { enable = true; # non utile sur un AD enableNmbd = false; enableWinbindd = false; settings = { # Parametres globaux de samba global = { "dns forwarder" = "${staticIp}"; "netbios name" = "${adNetbiosName}"; "realm" = "${toUpper adDomain}"; "server role" = "active directory domain controller"; "workgroup" = "${adWorkgroup}"; "idmap_ldb:use rfc2307" = "yes"; }; # Composant utile pour le module AD de samba sysvol = { "path" = "/var/lib/samba/sysvol"; "read only" = "No"; }; netlogon = { "path" = "/var/lib/samba/sysvol/${adDomain}/scripts"; "read only" = "No"; }; }; securityType = "user"; openFirewall = true; settings = { global = { "workgroup" = "INNOVALIA"; # Ici nous devons autoriser nos réseaux "hosts allow" = "10.50. 10.1.1. 10.125.0. 127.0.0.1 localhost"; "hosts deny" = "0.0.0.0/0"; "guest account" = "nobody"; "map to guest" = "bad user"; }; }; }; services.samba-wsdd = { enable = true; openFirewall = true; }; }

Maintenant, nous devons configurer le firewall

networking.firewall.allowPing = true; networking.firewall.allowedTCPPorts = [53 389 145 139 138 631 873 34445 60022 445]; networking.firewall.allowedUDPPorts = [53 389 145 139 138 631 873 34445 60022 445]; networking.firewall.extraCommands = ''iptables -t raw -A OUTPUT -p udp -m udp --dport 137 -j CT --helper netbios-ns'';

Installation du DC Primaire

architecture-samba.nix
sudo samba-tool domain provision --server-role=dc --use-rfc2307 --dns-backend=SAMBA_INTERNAL --realm=INNOVALIA.CC --domain=INNOVALIA --adminpass=Passw0rd

Cette commande permet d'initialiser l'AD et de peupler le serveur dns interne à SAMBA. Cette commande va aussi créer l'Administrateur par défaut avec un mot de passe à changer.

install-samba

Comment joindre un AD secondaire

Avec cette commande, il est possible de joindre un AD

sudo samba-tool domain join innovalia.cc DC -U "INNOVALIA\\Administrator"

secondaire-join-ad.png

Liaison d'un client avec SAMBA

Nous allons faire la liaison d'une machine cliente sur l'ad SAMBA.

link-pc.png
Il faut ensuite se logger avec un compte administrateur
Demmande authentification AD admin.png

Ensuite une fois la liaison faite, il faut installer rstat pour pouvoir contrôler l'AD, cela est aussi possible, avec la ligne de commande SAMBA, mais pour garder une administration classique, nous avons décidé de quand meme administrer notre SAMBA via des MMCs windows.

:::

Un point d'amélioration serait de développer un script python avec les librairies de SAMBA, pour automatiser le déploiment de notre Active directory https://samba.tranquil.it/doc/en/samba_advanced_methods/samba_python_samdb.html

:::

Test de redondance

Configuration de l'active directory

Création des utilisateurs et groupes

Pour créer des utilisateurs et des groupes, dans l'Active Directory de Samba, nous allons utiliser la commande samba-tool.

samba-tool user create <username> --given-name="<First Name>" --surname="<Last Name>" --password="<Password>"
usersamba.png

Création d'un groupe :

samba-tool group add <groupname> --description="<Description>"
groupaddsamba.png

Lister les utilisateurs :

samba-tool user list

Création des OU

Création d'une Unité d'Organisation (OU) :

samba-tool "OU=Commerial,DC=innovalia,DC=cc"
sambaou.png
Last modified: 22 July 2025