Deaktivieren der Vererbung der erweiterten Sicherheitseinstellungen/Security Inheritance in einem lokalen Active Directory

Spätestens mit der Nutzung eines Azure Active Directory Connect Servers, der die lokalen AD-Objekte richtung Azure-AD/EntraID synchronisiert stößt man auf einen Fehler, der mit der Deaktivierung der AD Security Inheritance (Vererbung der erweiterten Sicherheitseinstellungen) einhergeht. Durch die Deaktivierung dieser können die Sicherheitseinstellungen die auf höheren Ebenen getroffen wurden nicht mehr im AD-Baum nach unten vererbt werden. Dadurch könne vielerlei Probleme entsehen. Eines davon erhläre ich HIER: Azure AD-Connect Synchronisationsfehler

Um diesen zu beheben habe ich einige Skripte erstellt, die das anpassen dieser Einstellung für mehrere Benutzer gleichzeitig erheblich vereinfacht.

Identifizieren von Benutzern mit deaktivierter Vererbung

Zum identifizieren von Benutzern, bei denen die Vererbung deaktiviert ist kann folgendes PowerShell Skript verwendet werden. Dieses kann als Ps1-Datei gespeichert und ausgeführt werden.

Bei der Ausführung frägt es nach einer OU im Active Directory, die es überprüfen soll. Bei der Überprüfung werden auch OUs überprüft, die sich in der angegebenen OU befinden. Also eine rekursive Abfrage.

Die gewünschte OU muss im DN-Format angegeben werden. Die passende Bezeichnung findet man in den Eingenschaften der OU.

 

Nach der eingabe der gewünschten OU prüft das PowerShell Skript bei allen Benutzerobjekten in der angegebenen OU ob die Vererbung deaktiviert ist. Wenn dem so ist wird der Benutzer ebenfalls mit dem DistinguishedName und dem UPN im Tabellenformat ausgegebene.

Das Skript

#Dieses Powershell Script erlaubt es Alle Benutzer einer bestimmten OU abzufragen um festzustellen, ob die Vererbung der Erweiterten Sicherheitseinstellungen deaktiviert ist

# Abfrage der gewünschten OU
$OU1 = Read-Host „Gib den Distinguished Name der OU ein“

# Alle Benutzer einer bestimmgen OU (Angegeben mit dem Distinguished name der OU) abgefragen
$USERS = Get-ADUser -Filter * -SearchBase $OU1 -Properties nTSecurityDescriptor

# Bildschirm aufräumen
clear

# Überprüfung der Vererbung der erweiterten Sicherheitseinstellungen aller Benutzer in OU
ForEach ($user in $USERS) {
If ($user.nTSecurityDescriptor.AreAccessRulesProtected -eq $true) {

#Hier werden alle Benutzer ausgegeben, bei denen die Vererbung der erweiterten Sicherheitseinstellungen *DEAKTIVIERT* ist!
#Als Ausgabe wird der Distiguished Name des Benutzerobjekts verwendet!
$user | ft UserPrincipalName,DistinguishedName
}
}

# tech-tip.de / by Bastian Grossmann!

Aktivieren der Security Inheritance

Das aktivieren der Vererbung ist demnach auch recht einfach. Das folgende Skript kann auch als PS1-Datei gespeichert und ausgeführt werden. Auch hier wird im ersten Schritt nach einer Wunsch-OU gefragt. Die Benutzer in der OU, die die Vererbung deaktiviert haben bekommen sie entsprechend durch das Skript nochmal aktiviert.

Nach der Anpassung erfolgt eine Ausgabe von allen Benutzern, bei denen die Einstellung angepasst/aktiviert wurde.

Auch hier wird die Wunsch-OU im DN-Format, also als Distinguished Name angegeben.

Das Skript

#Dieses Powershell Script erlaubt es Alle Benutzer einer bestimmten OU abzufragen um festzustellen, ob die Vererbung der Erweiterten Sicherheitseinstellungen deaktiviert ist und sie zu aktivieren

# Abfrage der gewünschten OU
$OU1 = Read-Host „Gib den Distinguished Name der OU ein“

# Alle Benutzer einer bestimmten OU (Angegeben mit dem Distinguished name der OU) abfragen
$USERS = Get-ADUser -Filter * -SearchBase $OU1 -Properties nTSecurityDescriptor

# Überprüfung der Vererbung der erweiterten Sicherheitseinstellungen aller Benutzer in der OU
ForEach ($user in $USERS) {
If ($user.nTSecurityDescriptor.AreAccessRulesProtected -eq $true) {

# Vererbung der erweiterten Sicherheitseinstellungen aktivieren
$user.ntSecurityDescriptor.SetAccessRuleProtection($false, $true)
$user | Set-ADUser -Replace @{ntSecurityDescriptor = $user.ntSecurityDescriptor }

Write-Host „Die Vererbung der erweiterten Sicherheitseinstellungen wurde für $($user.UserPrincipalName) aktiviert.“
}
}

# Tech-Tip.de / by Bastian Grossmann

Dektivieren der Security Inheritance

Das deaktieren der Vererbung ist genauso einfach. Das folgende Skript kann ebenfalls als PS1-Datei gespeichert und ausgeführt werden. Der Vorgang bleibt gleich, wie beim dem Skript zuvor, nur, dass die Einstellung deaktiviert wird.

Nach der Anpassung erfolgt eine Ausgabe von allen Benutzern, bei denen die Einstellung angepasst/deaktiviert wurde.

Auch hier wird die Wunsch-OU im DN-Format, also als Distinguished Name angegeben.

Das Skript

#Dieses Powershell Script erlaubt es Alle Benutzer einer bestimmten OU abzufragen um festzustellen, ob die Vererbung der Erweiterten Sicherheitseinstellungen aktiviert ist und sie zu deaktivieren

# Abfrage der gewünschten OU
$OU1 = Read-Host „Gib den Distinguished Name der OU ein“

# Alle Benutzer einer bestimmten OU (Angegeben mit dem Distinguished name der OU) abfragen
$USERS = Get-ADUser -Filter * -SearchBase $OU1 -Properties nTSecurityDescriptor

# Überprüfung der Vererbung der erweiterten Sicherheitseinstellungen aller Benutzer in der OU
ForEach ($user in $USERS) {
If ($user.nTSecurityDescriptor.AreAccessRulesProtected -eq $false) {

# Vererbung der erweiterten Sicherheitseinstellungen deaktivieren
$user.ntSecurityDescriptor.SetAccessRuleProtection($true, $false)
$user | Set-ADUser -Replace @{ntSecurityDescriptor = $user.ntSecurityDescriptor }

Write-Host „Die Vererbung der erweiterten Sicherheitseinstellungen wurde für $($user.UserPrincipalName) deaktiviert.“
}
}

#Tech-Tip.de / by Bastian Grossmann

Magische GUI

Und für den PowerShell oder Lesescheuen Administrator habe ich das Ganze mal noch kombiniert und in einer GUI verpackt. So kann mittels PowerShell Forms auch ein Administrator die Eisntellungen anpassen, der sich nicht in die Konsole Traut 😉

 

(eigentlich hatte ich einfach nur gerade Spaß daran)

Prüfung auf Benutzer bei denen die Vererbun aktiviert ist
Vererbung bei den Benutzern deaktivieren, bei denen sie aktiviert ist.
Prüfung auf Benutzer bei denen die Vererbun deaktiviert ist
Vererbung bei den Benutzern aktivieren, bei denen sie deaktiviert ist.

 

Auch hier wird die Wunsch-OU im DN-Format, also als Distinguished Name angegeben.

Das Skript

Add-Type -AssemblyName System.Windows.Forms

# Erstellen des Formulars
$form = New-Object System.Windows.Forms.Form
$form.Text = „OU Sicherheitseinstellungen“
$form.Size = New-Object System.Drawing.Size(800,800)
$form.StartPosition = „CenterScreen“

# Erstellen der Auswahlbox
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,20)
$label.Size = New-Object System.Drawing.Size(400,20)
$label.Text = „Wähle eine Aktion:“
$form.Controls.Add($label)

$comboBox = New-Object System.Windows.Forms.ComboBox
$comboBox.Location = New-Object System.Drawing.Point(10,40)
$comboBox.Size = New-Object System.Drawing.Size(400,20)
$comboBox.Items.AddRange(@(„Prüfen Vererbung deaktiviert“, „Prüfen Vererbung aktiviert“, „Vererbung aktivieren“, „Vererbung deaktivieren“))
$form.Controls.Add($comboBox)

# Eingabefeld für OU
$ouLabel = New-Object System.Windows.Forms.Label
$ouLabel.Location = New-Object System.Drawing.Point(10,80)
$ouLabel.Size = New-Object System.Drawing.Size(400,20)
$ouLabel.Text = „Gib den Distinguished Name der OU ein:“
$form.Controls.Add($ouLabel)

$ouTextBox = New-Object System.Windows.Forms.TextBox
$ouTextBox.Location = New-Object System.Drawing.Point(10,100)
$ouTextBox.Size = New-Object System.Drawing.Size(400,20)
$form.Controls.Add($ouTextBox)

# Textfeld für die Ausgabe
$outputTextBox = New-Object System.Windows.Forms.TextBox
$outputTextBox.Location = New-Object System.Drawing.Point(10,140)
$outputTextBox.Size = New-Object System.Drawing.Size(780,400)
$outputTextBox.Multiline = $true
$outputTextBox.ReadOnly = $true
$form.Controls.Add($outputTextBox)

# Button zum Ausführen der Aktion
$button = New-Object System.Windows.Forms.Button
$button.Location = New-Object System.Drawing.Point(150,570)
$button.Size = New-Object System.Drawing.Size(500,50)
$button.Text = „Aktion ausführen“
$button.Add_Click({
$selection = $comboBox.SelectedItem.ToString()
$ou = $ouTextBox.Text
$outputTextBox.Text = „“

switch -regex ($selection) {
„Prüfen Vererbung deaktiviert“ {
# Skript 1: Überprüfen, ob die Vererbung deaktiviert ist
$USERS = Get-ADUser -Filter * -SearchBase $ou -Properties nTSecurityDescriptor

foreach ($user in $USERS) {
if ($user.nTSecurityDescriptor.AreAccessRulesProtected -eq $true) {
$outputTextBox.AppendText(„Vererbung aktiviert für $($user.UserPrincipalName)`r`n“)
}
}
}
„Prüfen Vererbung aktiviert“ {
# Skript 2: Überprüfen, ob die Vererbung aktiviert ist
$USERS = Get-ADUser -Filter * -SearchBase $ou -Properties nTSecurityDescriptor

foreach ($user in $USERS) {
if ($user.nTSecurityDescriptor.AreAccessRulesProtected -eq $false) {
$outputTextBox.AppendText(„Vererbung deaktiviert für $($user.UserPrincipalName)`r`n“)
}
}
}
„Vererbung aktivieren“ {
# Skript 3: Vererbung der erweiterten Sicherheitseinstellungen aktivieren
$USERS = Get-ADUser -Filter * -SearchBase $ou -Properties nTSecurityDescriptor

foreach ($user in $USERS) {
if ($user.nTSecurityDescriptor.AreAccessRulesProtected -eq $true) {
$user.ntSecurityDescriptor.SetAccessRuleProtection($false, $true)
$user | Set-ADUser -Replace @{ntSecurityDescriptor = $user.ntSecurityDescriptor }

$outputTextBox.AppendText(„Vererbung aktiviert für $($user.UserPrincipalName)`r`n“)
}
}
}
„Vererbung deaktivieren“ {
# Skript 4: Vererbung der erweiterten Sicherheitseinstellungen deaktivieren
$USERS = Get-ADUser -Filter * -SearchBase $ou -Properties nTSecurityDescriptor

foreach ($user in $USERS) {
if ($user.nTSecurityDescriptor.AreAccessRulesProtected -eq $false) {
$user.ntSecurityDescriptor.SetAccessRuleProtection($true, $false)
$user | Set-ADUser -Replace @{ntSecurityDescriptor = $user.ntSecurityDescriptor }

$outputTextBox.AppendText(„Vererbung deaktiviert für $($user.UserPrincipalName)`r`n“)
}
}
}
}
})
$form.Controls.Add($button)

# Anzeigen des Formulars
$form.ShowDialog()

 

# Tech-Tip.de / by Bastian Grossmann

0 Kommentare
Inline Feedbacks
View all comments