Neo4j- Serverlokale Gruppen importieren

Ziel: Migration aller Serverlokalen Berechtigungsgruppen 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.*‘)“ />

 

 

 

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

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

 

Getestete migRaven Version: 6.1

Windows Server 2003 Support

 

$Computer = „b-nbtg“

$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

}

 

}

}

 

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

 

profile LOAD CSV FROM 'file:///C:/temp/lokaleGruppen_1.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

 

 

 

Um die Gruppen miteinander zu verbinden.

 

profile 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)

 

 

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

profile 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)

 

Translate »