Ajouter un AD Windows dans son domaine Samba Active Directory

Cette documentation s’adresse aux adminsys qui ont besoin d’un contrôleur de domaine MS-AD dans leur domaine Samba-AD pour des raisons techniques (Azure-Sync, etc.).

Indication

Depuis la version 4.20, Samba-AD gère un schéma 2022 avec un niveau fonctionnel 2016.

Microsoft Active Directory 2016

Préparer son Samba-AD pour la future jonction

  • Sauvegarder le Samba-AD car des modifications irréversibles vont être faites ;

  • Mettre à jour Samba pour être dans la dernière version;

  • Modifier la section [global] de /etc/samba/smb.conf avec le paramètre suivant sur chaque Contrôleur de Domaine Samba :

ad dc functional level = 2016
  • Redémarrer le service Samba sur chaque Contrôleur de Domaine :

# Redhat and derivative distributions
systemctl restart samba
# Debian
systemctl restart samba-ad-dc
  • Installer les dépendances nécessaires à la jonction du serveur Windows :

    # RedHat9 and derivative distributions
    yum install patch python3-markdown
    # Debian
    apt install patch python3-markdown
    
  • Puis lancer les commandes pour joindre le 2016 dans le domaine :

    samba-tool domain schemaupgrade --schema=2019
    samba-tool domain functionalprep --function-level=2016
    samba-tool domain level raise --domain-level=2016 --forest-level=2016
    
  • Vérifier la base de données de l’annuaire :

    samba-tool dbcheck --cross-ncs --fix --yes
    

Indication

Il est possible que des erreurs remontent lors de la première commande, il suffit de la relancer une seconde fois.

  • Il manque un attribut dans Samba qui va générer des messages d’erreur dans la commande dcdiag. Pour résoudre le problème, recréer deux attributs msDS-SDReferenceDomain dans la partition cn=configuration qui pointent vers le rootDN de l’Active Directory. Pour ce faire, vous pouvez exécuter le script suivant sur le serveur Samba-AD :

    # -*- coding: utf-8 -*-
    from samba.auth import system_session
    from samba.credentials import Credentials
    from samba.samdb import SamDB
    import optparse
    import samba.getopt as options
    
    parser = optparse.OptionParser("/etc/samba/smb.conf")
    sambaopts = options.SambaOptions(parser)
    
    lp = sambaopts.get_loadparm()
    domaine = sambaopts._lp.get('realm').lower()
    
    creds = Credentials()
    creds.guess(lp)
    
    samdbloc = SamDB(session_info=system_session(),credentials=creds, lp=lp)
    listdn = list(samdbloc.search(base='cn=partitions,' + str(samdbloc.get_config_basedn()), expression=('(|(dnsroot=ForestDnsZones.%s)(dnsroot=DomainDnsZones.%s))' % (domaine,domaine) )))
    
    for dn in listdn:
        if not 'msDS-SDReferenceDomain' in dn :
            ldif_data = u"""dn: %s
    changetype: modify
    replace: msDS-SDReferenceDomain
    msDS-SDReferenceDomain: %s""" % (dn['dn'],str(samdbloc.get_root_basedn()))
            print(ldif_data)
            samdbloc.modify_ldif(ldif_data)
    

Préparer et joindre le Microsoft Active Directory 2016

Note

Il est recommandé d’utiliser une version anglaise de Windows Server pour les services d’infrastructure. Cela permet d’avoir des log en anglais et se sentir moins seul quand on cherche sur internet.

  • Si ce n’est pas déjà fait, passer en IP fixe le serveur et configurer le redirecteur DNS pour qu’il point vers l’AD principal ;

  • Installer les composants Active Directory. Dans une console PowerShell lancer les commandes suivantes :

    Install-WindowsFeature AD-Domain-Services
    Add-WindowsFeature RSAT-ADLDS
    Add-WindowsFeature RSAT-ADDS-Tools
    Add-WindowsFeature RSAT-DNS-Server
    Add-WindowsFeature RSAT-DFS-Mgmt-Con
    Add-WindowsFeature GPMC
    
  • Maintenant que le rôle est installé, promouvoir le serveur en AD et le paramétrer ;

    Note

    La commande suivante va ouvrir une popup qui va demander les identifiants Domain Admins pour faire la jonction (en mode graphique), puis les identifiants pour le mode restauration AD (en mode texte).

    Note

    Il faut bien sûr modifier les valeurs Credential, DomainName, SiteName et ReplicationSourceDC.

    Il y a un caractère back quote (`) à la fin de chaque ligne. il ne faut pas l’enlever sinon PowerShell va interpréter cette commande comme plusieurs commandes.

    Install-ADDSDomainController  `
      -Credential (Get-Credential "MYDOMAIN\Administrator") `
      -DomainName 'mydomain.lan' `
      -SiteName 'Default-First-Site-Name' `
      -ReplicationSourceDC srvads.mydomain.lan `
      -CreateDnsDelegation:$false  `
      -DatabasePath 'C:\Windows\NTDS' `
      -InstallDns:$true  `
      -LogPath 'C:\Windows\NTDS' `
      -NoGlobalCatalog:$false `
      -SysvolPath 'C:\Windows\SYSVOL'  `
      -NoRebootOnCompletion:$true  `
      -Force:$true
    

    Note

    À cette étape, l’Active Directory sous Windows est bien joint au domaine. Cependant, il faut ajuster quelques options sur la partie Sysvol, DNS et NTP.

  • Forcer l’activation du répertoire Sysvol sur le MS-AD :

    Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" -Name "SysvolReady" -Value "1"
    
  • Recopier le contenu du sysvol depuis le serveur Samba. Pour ce faire, dans un explorateur de fichier, tapez \\srvads\sysvol\, puis aller dans le dossier correspondant au nom de votre domaine (par exemple ad.mydomain.lan) et copier Policies et Scripts dans C:\windows\SYSVOL\domain (mais pas le nom de domaine). Après la copie on aura donc ces deux répertoires :

    • C:\windows\SYSVOL\domain\Policies ;

    • C:\windows\SYSVOL\domain\Scripts ;

Note

Il y a un lien de C:\windows\SYSVOL\sysvol\ad.mydomain.lan vers C:\windows\SYSVOL\domain.

  • Redémarrer le serveur MS-AD :

    shutdown -r -t 0
    
  • Inverser les serveurs DNS de la carte réseau. Le premier serveur DNS doit être lui même (127.0.0.1), et en deuxième on indique le serveur Samba-AD (Microsoft fait l’inverse lors de la jonction).

  • Dans la console DNS, changer le redirecteur DNS vers le récurseur du réseau (par défaut Windows met le premier contrôleur de domaine comme récurseur lors de la jonction).

  • Modifier ensuite la configuration NTP dans la base de registre du MS-AD :

    Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\W32Time\Parameters" -Name "Type" -Value  "NTP"
    
  • Puis relancer le service NTP depuis une invite de commande sur le MS-AD :

    net stop w32time
    net start w32time
    
  • Enfin, mettre à jour la configuration DNS et Kerberos du serveur Samba-AD en renseignant le nouveau serveur Windows. Pour cela modifier les fichiers /etc/hosts, /etc/resolv.conf et /etc/krb5.conf ;

Avertissement

Samba ne gère pas les protocoles DFS-R ou FRS.

Donc, il sera nécessaire de synchroniser manuellement le répertoire SYSVOL à chaque fois qu’une GPO est créée ou modifiée.