christiandi
Goto Top

NTFS-Berechtigungen neu setzen

Hallo,

ich habe hier einen Win-Server 2016 welcher als FileServer fungiert. Warum auch immer sind zum großen Teil die Berechtigungen auf den Dateien durcheinander geraten - nicht aber auf den Ordnern.

Nun zur Frage:
Gibt es ein Tool, welche die Ordnerberechtigungen ausliest und diese einfach neu setzt? Manuell würde bei der Vielzahl an Ordnern (~10.000) einfach zu lange dauern.

Vielen Dank.

Content-Key: 605042

Url: https://administrator.de/contentid/605042

Printed on: April 19, 2024 at 05:04 o'clock

Member: Spirit-of-Eli
Spirit-of-Eli Sep 16, 2020 updated at 16:19:17 (UTC)
Goto Top
Zitat von @ChristianDi:

Hallo,

ich habe hier einen Win-Server 2016 welcher als FileServer fungiert. Warum auch immer sind zum großen Teil die Berechtigungen auf den Dateien durcheinander geraten - nicht aber auf den Ordnern.

Nun zur Frage:
Gibt es ein Tool, welche die Ordnerberechtigungen ausliest und diese einfach neu setzt? Manuell würde bei der Vielzahl an Ordnern (~10.000) einfach zu lange dauern.

Vielen Dank.

Moin,

du könntest auch einfach die Vererbung auf den Ordner wieder aktivieren.
Ich weiß ja nicht genau wie das Resultat im Detail aussehen soll.

Gruß
Spirit
Member: erikro
erikro Sep 16, 2020 updated at 20:01:18 (UTC)
Goto Top
Moin,

wenn ich Dich recht verstehe, dann sollen aus einer Reihe übergeordneter Ordner die Rechte auf die darunter liegenden Ordner und Dateien übertragen werden, weil die nicht mehr stimmen. Richtig? Dann macht das folgendes kleines Powershellskript:

$dirs = Get-ChildItem -Directory
foreach($dir in $dirs) {

    $acl = get-acl $dir
    $subs = Get-ChildItem $dir.fullname\* -Recurse # <edit>Da war was falsch</edit>
    foreach($sub in $subs) {

        set-acl -Path $sub.fullname -AclObject $acl

    }

}

Je nach Anzahl der Verzeichnisse und Dateien kann das eine Weile dauern. Die vorhandenen Rechte werden vollständig überschrieben. <edit>Das Skript wird im Ordner, in dem die betroffenen Ordner liegen ausgeführt.</edit>

hth

Erik
Member: ChristianDi
ChristianDi Sep 17, 2020 at 05:10:47 (UTC)
Goto Top
Hallo und guten Morgen,

das könnte schon der richtige Ansatz sein. Allerdings gibt es auf Unterordnern wieder unterschiedliche Berechtigungen. Das ganze müsste also recursiv laufen.
Member: Spirit-of-Eli
Spirit-of-Eli Sep 17, 2020 at 06:23:41 (UTC)
Goto Top
Wenn du dein Ziel genauer beschreiben würdest, könnte dir geholfen werden.
Wenn du in erster Ebene die Berechtigung vererbst, wird dies erstmal auf alle darunter liegenden Dateien und Ordner angewendet solange die Vererbung nicht wieder aufgebrochen wurde.
Member: ChristianDi
ChristianDi Sep 17, 2020 at 10:27:12 (UTC)
Goto Top
Hallo,

ich habe z.B. die Ordner:

  • Ordner A (Zugriff Gruppe A)
  • * Unterordner A1 (Zugriff Gruppe A1 - Mitglied Gruppe A)
  • * Unterordner A2 (Zugriff Gruppe A2 - Mitglied Gruppe A)

  • Ordner B (Zugriff Gruppe B)
  • * Unterordner B1 (Zugriff Gruppe B1 - Mitglied Gruppe B)
  • * Unterordner B2 (Zugriff Gruppe B2 - Mitglied Gruppe B)

Dies kann sich jedoch durch weitere Unterordner ziehen...

Daher kann ich nicht mit Vererbung arbeiten.
Member: erikro
Solution erikro Sep 17, 2020 at 14:33:53 (UTC)
Goto Top
Moin,

na dann als rekursive Funktion

function correct-acls {
PARAM(

    $start

)
$dirs = Get-ChildItem -path $start -Directory
foreach($dir in $dirs) {

    $acl = get-acl $dir
    $subs = Get-ChildItem $dir.fullname\* -file 
    foreach($sub in $subs) {

        set-acl -Path $sub.fullname -AclObject $acl

    }
    correct-acls .\
}
}
correct-acls (read-host "Bitte das Startverzeichnis angeben")  

Das kann aber wirklich richtig dauern.

hth

Erik
Member: ChristianDi
ChristianDi Sep 18, 2020 at 15:13:57 (UTC)
Goto Top
Hallo,

ja, manchmal sieht man den Wald....

Ich habe das script noch etwas angepasst, da ich es tatsächlich nur für die Ordner brauche:
function correct-acls {
PARAM(

    $start

)
$dirs = Get-ChildItem -Path $start -Directory -Recurse
foreach($dir in $dirs) {

    $acl = get-acl $dir.fullname
    
    set-acl -Path $dir.fullname -AclObject $acl

    }
}
correct-acls (read-host "Bitte das Startverzeichnis angeben")  

und was soll ich sagen. Obwohl die Berechtigungen quasi die gleichen sind, funktionieren die Zugriffe wieder wie gewohnt.

Erik, vielen lieben Dank.