Polityka haseł granularnych

Ostatnio mile się zaskoczyłem importując PowerShellowy moduł Active Directory. Zdarza mi się korzystać z dobrodziejstw Active Directory (Windows Server 2008 R2) takich jak np. polityka haseł granularnych, lecz zwykle do tego celu wykorzystywałem GUI. Aż do momentu gdy zauważyłem, iż standardowy moduł AD posiada wbudowane cmdlety do tego celu.

Ok, ale od czego zacząć. Zacznijmy od odrobiny teorii, czyli w strukturze Active Directory na poziomie funkcjonalnym domeny ustawionym minimum na Windows Server 2008 pojawił się dodatkowy kontener w gałęzi System zwany Password Settings Container. To właśnie w nim będą zapisywane nowe obiekty odpowiadające za wszelkie odstępstwa od domyślnej polityki haseł zapisanej w Default Domain Policy.

By przejrzeć zawartość kontenera można posłużyć się najpierw klasycznym poleceniem Get-ADObject.

Import-Module ActiveDirectory
Get-ADObject -Filter "Name -like '*'" -SearchBase "CN=Password Settings Container,CN=System,DC=Contoso,DC=com"

Z tym, iż zostanie zwrócony nam również sam kontener. Możemy również posłużyć się właśnie odpowiednim cmdletem do zarządzania politykami haseł granularnych.

Get-ADFineGrainedPasswordPolicy -Filter 'Name -like "*"'

Dodatkowo możemy również sprawdzić wpisy w obecnej domyślnej polityce haseł domeny.

Get-ADDefaultDomainPasswordPolicy

I jak widzimy na chwilę obecną nie posiadamy żadnej innej polisy haseł granularnych więc wykorzystujemy tylko I wyłącznie domyślne polityki haseł domeny.

Stwórzmy zatem nowego użytkownika, który nie będzie spełniał polityki haseł.

New-ADUser mgajda
Get-ADUser mgajda
Enable-ADAccount mgajda
Set-ADAccountPassword mgajda -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "P@ssw0rd" -Force)
Enable-ADAccount mgajda

Jak widzimy gdy konto tworzonego użytkownika nie spełnia wymogów polityki haseł to owszem jest ono tworzone, ale jako konto nieaktywne. Natomiast przy próbie włączenia takiego konta dostajemy komunikat o nie spełnionych wymaganiach polityki haseł. Dopiero po ustawieniu odpowiedniego hasła mamy możliwość aktywowania takiego konta.

Przejdźmy zatem do sedna. Stwórzmy nową politykę haseł, ale tylko dla wybranych użytkowników, czyli po prostu politykę haseł granularnych.

Podczas tworzenia podajemy kilka istotnych parametrów takich jak nazwa polityki czy poszczególne warunki jakie ma spełniać hasło.

New-ADFineGrainedPasswordPolicy -Name "NoPasswordRequirement" -Precedence 200 -ComplexityEnabled $False -LockoutDuration "00:00:00" -LockoutObservationWindow "00:00:00" -LockoutThreshold 0 –MinPasswordLength 0

Następnie przypiszmy do tej polityki naszego nowego użytkownika.

Add-ADFineGrainedPasswordPolicySubject NoPasswordRequirement -Subjects mgajda

Sprawdźmy zatem naszą politykę oraz naszego użytkownika i spróbujmy nadać hasło nie zgodne z warunkami domyślnej polityki haseł, ale spełniające indywidualną politykę.

Get-ADFineGrainedPasswordPolicy NoPasswordRequirement
Get-ADUserResultantPasswordPolicy mgajda
Set-ADAccountPassword mgajda -Reset

Jak widzmy tym razem udało się ustawić puste hasło mimo, iż główna polityka haseł domeny nie pozwalała na to wcześniej.

OK, ale co w takim razie gdy dane konto jest przypisane do kilku polityk naraz? O tym właśnie decyduje parametr, o którym podczas tworzenia polityki nie wspominałem czyli Precedence. Jest on brany pod uwagę właśnie wtedy gdy dany użytkownik jest przypisany do wielu polityk haseł. W takim przypadku wybierana jest polityka o najniższej wartości parametru Precedence.

Przetestujmy zatem. Tworzymy kolejną politykę haseł i przypisujemy do niej tego samego użytkownika.

New-ADFineGrainedPasswordPolicy -Name "StrongPassword" -Precedence 100 -ComplexityEnabled $True –MinPasswordLength 12
Add-ADFineGrainedPasswordPolicySubject StrongPassword -Subjects mgajda

Sprawdźmy więc.

Get-ADFineGrainedPasswordPolicy -Filter 'Name -like "*"' | Select-Object Name, AppliesTo, Precedence

Natomiast dla samego użytkownika będzie działać tylko druga polityka.

Get-ADUserResultantPasswordPolicy mgajda

Po zmianie wartości parametru Precedence na wyższą, zobaczymy iż obecnie stosowaną polityką jest znów polityka braku hasła.

Set-ADFineGrainedPasswordPolicy StrongPassword -Precedence 300
Get-ADFineGrainedPasswordPolicy -Filter 'Name -like "*"' | Select-Object Name, AppliesTo, Precedence
Get-ADUserResultantPasswordPolicy mgajda

W formie ściągi polecam również.

Get-Command *PasswordPolicy*
Advertisements

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s