Serverlokale Gruppen importieren



Mindestanforderung von migRaven ist die Version 1849

Voraussetzung: migRaven Version 6.4.1848 vom 30.11.2018 

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.*‘)“ /> 

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

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

 


$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
      }
 
}
}

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/