Serverlokale Gruppen in migRaven importieren

migRaven liest eigentlich nur Konten und Gruppen aus dem AD aus. Wenn man Server migrieren will, auf dem die Berechtigungen auf der Basis von lokalen Accounts erfolgt ist, dann müssen diese im Vorfeld erst in die DB von migRaven importiert werden. Dies ist in der Vergangenheit häufig auf NetApp Filer praktiziert worden.

Voraussetzung: migRaven Version 6.4.1848 vom 30.11.2018 

Ziel: Migration aller Serverlokalen Berechtigungsgruppen und Accounts in Domänenrechte übersetzen 

Wie: migRaven Redesignprojekt mit aktivierter Flatten Funktion.

Voraussetzung: es müssen die Server lokalen Gruppen mit ihren Mitgliedern vorher in die migRaven DB importiert werden. 

Für Windows Server gibt es das untere Script. Für Netapps müssen die NetApp Powershell Tools genutzt werden. 

Ergebnis: neue Domänen Berechtigungsgruppen, die die User flach enthalten. Wenn vorher auch D-Gruppen berechtigt waren, werden diese auch geflattet. Wenn man dies nicht möchte, kann man die Gruppen anhand ihrer Eigenschaft im Folgenden Key ausschließen: 

Anpassung der c:\program files\migraven\migraven.exe.config

Ohne Ausschluss

<add key=“Flatten“ value=“y.type=’person‘ and y.isactive=’True‘ “ />
Mit Ausschluss von bestimmten Gruppen: 

<add key=“Flatten“ value=“y.type=’person‘ and y.isactive=’True‘ and not (y. userprincipalname =~‘.*@ads0003.*‘ or y. userprincipalname =~‘.*@ADS0003.*‘)“ /> 

Exportieren der CSV-Dateien für die Serverlokalen Gruppen:

Mit diesem Script werden alle Serverlokalen Gruppen auf Windows ausgelesen und dann die Member ermittelt 

 $Computer = "SERVER"
 $gruppen = get-wmiobject win32_group -filter "LocalAccount='True'" -ComputerName $Computer
 foreach($groupName in $gruppen){
 $Gname = $groupName.Name
 #$Gname
 $Group= [ADSI]"WinNT://$Computer/$Gname,group"
 #$Group
 $members = $Group.psbase.Invoke("Members")
 $name = $members | ForEach-Object { $_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null) }
 if($groupName.Description -eq "" )
 {$groupName.Description = "leer" }
  
 [System.Guid]::NewGuid().ToString() + "t" + $groupName.SID + "t" + $groupName.Name +  "t" + $Computer + "t" + $groupName.Description  | out-file  -filePath "c:\temp\lokaleGruppen.csv" -Append 
 #$name
 #$members
 foreach ($n in $name){
 if (  $n.ToString() -notcontains "System." ) {
       write-host $n
         $memb = (New-Object System.Security.Principal.NTAccount($n)).Translate([System.Security.Principal.SecurityIdentifier]).value
         $groupName.SID + "," + $memb | out-file  -filePath "c:\temp\MemberGruppen.csv" -Append 
       }
  
 }
 }  

Es werden 2 CSV erzeugt, die dann wiederum über den CSV Import nach migRaven importiert werden

Entfernen der verwaisten ACEs vor dem ausführen der abschliessenden Scripts mit Ausführen von :
MATCH (n:ADAccount) where n.objectSID ends with ‚-1009‘  detach delete n         (für alle betroffenen ObjectIDs) 

MATCH (n:ACE) where not (n)-[:rel_ace]->() detach delete n ) für alle in der Datenbank

Aus der CSV müssen alle „build-in“ Einträge entfernt werden!

LOAD CSV FROM ‚file:///C:/temp/lokaleGruppen.csv‚ AS line FIELDTERMINATOR ‚\t‘ with line,  

‚merge (l:ADAccount {objectGUID:“‚ +  line[0] + ‚“ }) on create set l.objectSID=“‚ + line[1] +'“ set l.name=“‚+ line[2] + ‚“ set l.domain=“‚ + line[3] + ‚“ set l.commonsid=“0″ set l.type=“group“ set l.sAMAccountName=“‚ + line[2] + ‚“ set l.cn=“‚+ line[2] +'“ set l.distinguishedname=““ set l.isactive=“True“ set l.department=““ set l.description=“‚+ line[4] + ‚“ set l.displayname=““ set l.givenName=““ set l.grouptype=““ set l.sn=““ set l.sAMAccountType=“SAM_NON_SECURITY_GROUP_OBJECT“ set l.ad=“1″ set l.grouptype=“Universal_Security_Group“ set l.adspath=“LDAP://‘ + line[3] + ‚/CN=‘ + line[2]  + ‚,CN=Users,DC=‘ + line[3] + ‚“‚  as cypher  CALL apoc.cypher.doIt(cypher,{}) yield value return value 

Optional, wenn die Rechte nach dem Scan nicht angezeigt werden. Dann muss die ACE mit dem AD Account verbunden werden:

USING PERIODIC COMMIT 1000 LOAD CSV FROM ‚file:///c:/temp/lokaleGruppen.csv‚ AS line FIELDTERMINATOR ‚\t‘ match (a:ACE)-[:rel_right0]->(o:ResourceSearch) where a.sid=line[1] with distinct a, line match (b:ADAccount) where b.objectSID=line[1] merge (a)-[:rel_ace]->(b)

USING PERIODIC COMMIT 1000 LOAD CSV FROM ‚file:///c:/temp/MemberGruppen.csv‚ AS line FIELDTERMINATOR ‚,‘ match (l:ADAccount {objectSID: line[0]}) match (d:ADAccount {objectSID:line[1]}) merge (l)-[:rel_member]->(d)

Wichtig: Damit lokale Konten in der Tabelle angezeigt werden

Es ist zu überprüfen ob die Parameter bei den übernommenen Konten vollständig gesetzt sind.

Dazu insbesondere der Wert adspath

An dieser Stelle sollte die Domäne stehen oder der Wert der unter domain hinterlegt ist.

Am Beispiel einer IP sollte die Cypher-Abfrage/ Änderung des adspath in der Datenbank so ausgeführt werden:

match (n:ADAccount) where n.domain=“10.116.9.38″ set n.adspath=“10.116.9.38″ return n



Permanentlink zu diesem Beitrag: https://help.migraven.com/neo4j-serverlokale-gruppen-importieren/