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.12, Samba-AD gère un niveau de schéma 2012R2 mais toujours avec un niveau fonctionnel en 2008R2. Il est donc possible de joindre un Windows Server 2012R2 configuré en niveau fonctionnel 2008R2 avec un domaine Samba-AD comme AD.

Avertissement

En date du 2024-01-30, Samba-AD ne permet pas de rejoindre un MSAD 2016 ou 2019.

Microsoft Active Directory 2012R2

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 4.12 ;

  • Installer les dépendances nécessaires à la jonction du serveur Windows :

    # RedHat8 and derived distributions
    yum install patch python36-markdown
    # Debian
    apt install patch python3-markdown
    
  • Puis lancer les commandes pour joindre le 2012R2 dans le domaine :

    samba-tool domain schemaupgrade
    samba-tool domain functionalprep --function-level=2012_R2 --forest-prep --domain-prep
    
  • 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 2012R2

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.

Windows 2016 et Windows 2019

Actuellement, les version de samba 4.12 et après ne supporte pas la jonction d’un Active Directory 2016 ou 2019.