Migration Active Directory : retour d’expérience

Voici un billet concernant mon retour d’expérience à propos de migration Active Directory et surtout l’utilisation de l’outil de Microsoft ADMT. Je vais me concentrer sur les principaux points d’attention, les pièges, etc…

Vous y trouverez également des recommandations pour migrer vos serveurs de fichiers, d’impressions, etc… Certains scripts seront utiles car ils concernant les migrations inter forêt et non intra domaine ou intra forêt, scénario plus simple.

Voici la liste des principales recommandations d’une migration Active Directory:

  • Assurez-vous que le DC cible sur le site qui va être utilisée pour les migrations a un service de serveur DNS installé
  • Créer un DNS Fowarder conditionnel intégré à L’AD « Cible.com » pour rediriger les requêtes DNS du domaine source vers le serveur DNS du domaine source
  • Créer un DNS Fowarder conditionnel intégré à L’AD « Source.com » pour rediriger les requêtes DNS de « Cible.com » domaine vers le serveur DNS du domaine cible
  • Vérifiez la résolution DNS entre les domaines à laide de NSLOOKUP
  • Créer une approbation externe bidirectionnelle entre les deux domaines en utilisant un utilisateur membre du groupe Administrateurs du Domaine cible et l’utilisateur Administrateur du domaine que vous avez créé sur le domaine source
  • Assurez-vous que si vous utilisez le même utilisateur « nom » sur les deux domaines, le mot de passe de l’utilisateur doit être identique sur les deux domaines, sinon vous recevrez une erreur sans RPC en essayant de créer la relation d’approbation (Trust Relationship)
  • Désactiver le filtrage des SID (SID Filetring) sur la relation d’approbation sortante sur les deux domaines
  • Modifier / Création de la clé de registre suivante « AllowPasswordExport » avec une valeur DWORD=1 sur HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Control \ LSA sur l’émulateur PDC de domaine source et/ou sur le contrôleur de domaine source qui serait utilisé pour la migration des mots de passe (PES Password Export Service – démarrage manuel – attention donc !)
  • Si le contrôleur de domaine source utilisé pour la migration fonctionne sous Windows 2000, vous devez ajouter sur le contrôleur de domaine la clé de Registre suivante: « HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ LSA »  => Modifier / Créer l’entrée de Registre TcpipClientSupport, du type de données REG_DWORD, en définissant la valeur à 1
  • Installez ADMT sur un serveur membre – l’installation sur un DC n’est pas recommandé, à cause de l’instance SQL, mais j’y reviendrais plus tard
  • Déléguer des autorisations sur le domaine « Cible.com » le droit « migrer l’historique SID » pour le groupe/utilisateur qui va être en charge de la migration
  • L’audit Succès et Echec doit être activé sur les domaine , pour cela il convient de modifier la GPO =>  « Stratégie de contrôleur de domaine par défaut » – Configuration de l’ordinateur> -> Paramètres Windows -> Paramètres de sécurité -> Stratégies locales – Politique sur la vérification> -> «Gestion Compte d’audit »
  • Sur le domaine source, créer un groupe local de domaine « SourceDomaine$$$ » (Nom do domaine NetBios), exemple: mondomaine$$$

Désactiver le SID Filtering

Voici la syntaxe pour désactiver cette fonction


Netdom trust domainecible /domain:domainesource /quarantine:no /userD:domainesource\adminaccount /password:password

Pour tester:


nltest /server:nomduserveur /domain_trusts

l’attribut attr: QUARANTINED apparait si le SID Filtering est actif

Installation du service PES

Sur le domaine cible, il convient  de créer la clé permettant l’export des mot de passe avec la syntaxe suivante:


admt key /option:create /sourcedomain:domainesource /keyfile:c:\macle.pes /keypassword:motdepasse

Cette clé générée vous servira pour le setup de PES.

Changer la liste des domaines par défaut

Après la migration d’un poste de travail, l’ancien domaine apparait au moment de la connexion (CTRL ALT SUPPR), voici comment modifier le Defaut Logon List afin de faire apparaitre en priorité votre domaine cible

Méthode 1 – déploiement VBS


Dim sDomName
Set oWshShell = CreateObject("Wscript.Shell")
sDomName = "nouveaudomaine"
oWshShell.RegWrite "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultDomainName",sDomName

Méthode 2 – déploiement GPO

Il convient donc de créer une GPO et d’activer le paramètre suivant en renseignant le nom du domaine cible (qu’à partir de Vista, d’où mon VBS ci-dessus 😉 )

Computer – Policies- Administrative Template – System – Logon => Assign a defaut domain for logon

Traitement d’une erreur récurrente

ADMT est un outil puissant mais les journaux/messages d’erreurs sont souvent assez peu explicites voir indiquent une mauvaise direction à investiguer. Voici la plus courante:

Voici ce qu’il faut vérifier pour résoudre l’erreur:

  • Les suffixes DNS du domain source doivent être présent/déployés sur le domaine cible – cela corrige les problème de résolution de noms
  • S’assurer que l’on a les droits sur le domaine AD source depuis le domaine cible
  • S’assurer que l’on fait partie du groupes BUILTIN\Administrators du domaine source
  • Attendre la réplication si vous disposez de plusieurs DC
  • Autre point: l’heure (w32time) doit être correcte entre les domaines ! Sinon l’ADMT renverra un message d’incompatibilité avec les domaines NT4.0…

Autre erreur

ERR3:7075 Failed to change domain affiliation, hr=800704f1. The system detected a possible attempt to compromise security. Please ensure that you can contact the server that authenticated you.

Cette erreur provient soit du fait d’algorithmes d’encryption avec des serveurs Windows NT 4.0 ou de la présence de contrôleur RODC (Read Only Domain Controller) mais cela abaisse la sécurité du domaine… (sans pour autant être dramatique) Il convient de se reporter à la KB Microsoft 942564 ou 944043.

Migration des spools

Je pense que vous connaissez PRINTBRM (Management des impressions) ou printmigrator (Windows 2003) permettent de générer des fichiers d’export incluant les ports IP (par contre oubliez les ports HP ou spécifiques à un constructeur), les drivers, les files d’impressions etc… Magique !

Oubliez la migration d’un serveur 32 bits sur 64 bits, vérifiez que les drivers existent bien en 64 bits, et dans le cadre d’une migration pré-déployer les pilotes sur le nouveau serveur.

Mais quand on change de domaine ou de serveur, les postes clients pointent sur les anciens noms de serveurs. Le script ci-dessous permet d’analyser les imprimantes installées et de remplacer le nom du vieux serveur par le nouveau automatiquement. Enjoy 😉 (j’ai également trouvé une page sympathique à ce sujet)


Option Explicit

Dim from_sv, to_sv, PrinterPath, PrinterName, DefaultPrinterName, DefaultPrinter

Dim DefaultPrinterServer, SetDefault, key

Dim spoint, Loop_Counter, scomma

Dim WshNet, WshShell

Dim WS_Printers

DefaultPrinterName = ""

spoint = 0

scomma = 0

SetDefault = 0

set WshShell = CreateObject("WScript.shell")

from_sv = "\\vieuxmoche" 'Mettre ici le nom de l'ancien serveur

to_sv = "\\nouveau" 'Mettre ici le nom du nouveau serveur

On Error Resume Next

key = "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device"

DefaultPrinter = LCase(WshShell.RegRead (key))

If Err.Number <> 0 Then

DefaultPrinterName = ""

else

spoint = instr(3,DefaultPrinter,"\")+1

DefaultPrinterServer = left(DefaultPrinter,spoint-2)

if lcase(DefaultPrinterServer) = from_sv then

DefaultPrinterName = mid(DefaultPrinter,spoint,len(DefaultPrinter)-spoint+1)

scomma = instr(DefaultPrinterName,",")

DefaultPrinterName = left(DefaultPrinterName,scomma -1)

end if

end if

Set WshNet = CreateObject("WScript.Network")

Set WS_Printers = WshNet.EnumPrinterConnections

For Loop_Counter = 0 To WS_Printers.Count - 1 Step 2

PrinterPath = lcase(WS_Printers(Loop_Counter + 1))

if lcase(LEFT(PrinterPath,len(from_sv))) = from_sv then

spoint = instr(3,PrinterPath,"\")+1

PrinterName = mid(PrinterPath,spoint,len(PrinterPath)-spoint+1)

WshNet.RemovePrinterConnection from_sv+"\"+PrinterName

if lcase(PrinterName) <> "c6100" then

WshNet.AddWindowsPrinterConnection to_sv+"\"+PrinterName

if DefaultPrinterName = PrinterName then

WshNet.SetDefaultPrinter to_sv+"\"+PrinterName

end if

end if

end if

Next

Set WS_Printers = Nothing

Set WshNet = Nothing

Set WshShell = Nothing

Configuration de réseau Wifi

Le déploiement de réseau Wifi par GPO ne prends en charge que les scénarios certificat/Radius. Néanmoins, il est possible de créer des profiles Wifi par scripot à l’aide de netsh. Pour cela, créez manuellement votre profile sur un poste et exportez le à l’aide de la commande suivante


netsh wlan export profile name="nomduprofile" folder=c:\SSID

Pour déployer le profile, utilisez la syntaxe suivante


netsh wlan add profile filename="\\serveur\netlogon\SSID.xml"

Voici à quoi ressemble le fichier XML:


<?xml version="1.0"?>
<WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
<name>NOMDUPROFILE</name>
<SSIDConfig>
<SSID>
<hex>536F666964656C</hex>
<name>NOMDUSSID</name>
</SSID>
<nonBroadcast>false</nonBroadcast>
</SSIDConfig>
<connectionType>ESS</connectionType>
<connectionMode>auto</connectionMode>
<autoSwitch>false</autoSwitch>
<MSM>
<security>
<authEncryption>
<authentication>WPA2PSK</authentication>
<encryption>AES</encryption>
<useOneX>false</useOneX>
</authEncryption>
<sharedKey>
<keyType>passPhrase</keyType>
<protected>true</protected>
<keyMaterial>CLEPSKENCODEEENASCII</keyMaterial>
</sharedKey>
</security>
</MSM>
</WLANProfile>

SECURITE NTFS / FICHIER

Ici, quelques exemples de migration de fichier en complément de la fonctionnalité de translation de SID de l’outil ADMT.

Copie d’une arborescence vide en conservant les droits NTFS (pour les profiles utilisateurs par exemple)


robocopy \\cheminsource \\chemincible /E /XF * /SEC /LEV:2

Ajout de droit NTFS utilisateur à un dossier dont le nom du dossier correspond à un compte utilisateur (toujours pour les profiles)


$AllUsers = Get-ChildItem -Path "C:\CHEMIN" | where {$_.Attributes -eq "Directory"}
foreach ($AllUser in $AllUsers)
{
try{
$acl = Get-Acl $AllUser.FullName
$permission = "DOMAINE\$($AllUser.Name)","FullControl","ContainerInherit,ObjectInherit”,"None","Allow"
$accessRule = new-object System.Security.AccessControl.FileSystemAccessRule $permission
$acl.SetAccessRule($accessRule)
$acl | Set-Acl $AllUser.FullName
}
catch
{
continue
}
}

Ajout de droit NTFS utilisateur + Administrateur local à un dossier et l’ensemble de ses sous-dossiers dont le nom du dossier correspond à un compte utilisateur (toujours et encore pour les profiles par exemple ou dossier utilisateurs contenant leur Mes Documents, …)


$AllUsers = Get-ChildItem -Path "C:\CHEMIN" | where {$_.Attributes -eq "Directory" }
:nextuser foreach ($AllUser in $AllUsers)
{
write-host $AllUser.name
try{
$Items =  Get-ChildItem -Path $AllUser.FullName | where {$_.name -notlike "Profile*"} | get-childitem -recurse | select fullname
:nextitem foreach ($item in $Items)
{
write-host $item
try{
$acl = Get-Acl $item.FullName
$acl.SetOwner([system.security.principal.ntaccount]"Administrators")
$acl | Set-Acl $item.FullName
}
catch
{
continue nextitem
}
}

$acl = Get-Acl $AllUser.FullName
$acl.SetOwner([system.security.principal.ntaccount]"Administrators")
$acl | Set-Acl $AllUser.FullName

$permission = "DOMAINE\$($AllUser.Name)","FullControl","ContainerInherit,ObjectInherit”,"inheritOnly","Allow"
$accessRule = new-object System.Security.AccessControl.FileSystemAccessRule $permission

$acl.SetAccessRule($accessRule)
$acl | Set-Acl $AllUser.FullName
}

catch

{
continue nextuser
}
}

Installer ADMT sur un DC

Malheuresement, nous n’avons pas toujours les licences pour installer ADMT sur un serveur membre. Cependant, ADMT ne peut pas s’installer sur un DC sous peine d’obtenir l’erreur

Unable to check for failed actions. :DBManager.IManageDB.1 : Cannot open database « ADMT » requested by the login. The logon failed.

OU ENCORE

MMC could not create the snap-in. MMC could not create the snap-in. The snap-in might not have been installed correctly. Name: Active Directory Migration Tool CLSID: {E1975D70-3F8E-11D3-99EE-00C04F39BD92}

En fait, il convient d’installer manuellement SQL Express 2008 SP1 avec son CU4 …

Voici les commandes à utiliser à l’issue de l’installation de SQL et ensuite installer ADMT

  • NET LOCALGROUP SQLServerMSSQLUser$DC1$SQLEXPRESS /ADD

(syntaxe: SQLServerMSSQLUser$<DCComputerName>$<InstanceName>)

  • SC SHOWSID MSSQL$SQLEXPRESS => renvoi un SID
  • MD %SystemRoot%\ADMT\Data
  • ICACLS %systemroot%\ADMT\Data /grant *SID:F

Bien sûr, ces quelques conseils ne doivent pas vous empêcher de lire la documentation 😉

Bon courage !!!

PS: Merci à Florent COMBETTES pour son aide précieuse sur les scripts PowerShell

Partagez si ça vous plait !
0 0 votes
Évaluation de l'article
S’abonner
Notification pour
guest

0 Commentaires
Commentaires en ligne
Afficher tous les commentaires
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x