Miesięcznik informatyków i menedżerów IT sektora publicznego

Bartosz Bielawski

Audyt użytkowników w PowerShellu

Zbieranie wiarygodnych informacji o hasłach może stanowić wyzwanie. Dobrze dysponować narzędziem, które daje wgląd w informacje o wygasających kontach lub hasłach użytkowników.

Prezentowany skrypt będzie uwzględniał nie tylko środowiska proste, wykorzystujące jedynie politykę haseł w bieżącej domenie, ale również dodane w Windows Ser­ver 2008 polityki haseł przypisywane na poziomie grup i użytkowników. Zanim jednak przejdziemy do zbierania informacji o użytkownikach, należy określić, jakie parametry wejściowe będą potrzebne administratorowi korzystającemu z naszego skryptu. Na pewno przyda się możliwość określenia adresu, z którego przychodzić będą powiadomienia, oraz adresu serwera SMTP, z którego będziemy korzystać przy jej wysyłaniu.

W środowisku wielodomenowym bardzo przydatna będzie możliwość podania domeny, z którą będziemy się łączyć. Oprócz tego limit dni, który określać będzie, jak daleko będziemy zaglądać w przyszłość w celu określenia, czy powiadomienie jest już zasadne. Wreszcie może okazać się potrzebne podanie ścieżki do pliku zawierającego szablon naszego maila. Będziemy tu korzystać z tych samych zmiennych co w naszym skrypcie, dzięki czemu mail będzie mógł zawierać informacje odczytane z AD. Pełny blok parametrów:

param (
$Od = 'admin@domena.lokal',
$Serwer = 'smtp.domena.lokal',
$Domena = 'DC=domena,DC=lokal',
$Limit = 7,
$Wzor
)

Zbieranie informacji o potencjalnych adresatach zaczniemy od zweryfikowania faktu wygaśnięcia konta użytkownika. Aby to uczynić, skorzystamy z atrybutu AccountExpires , który przyjmuje trzy wartości – zero, równą maksymalnej wartości dla typu Int64 lub wartość pośrednią określającą czas mierzony od 1 stycznia 1601 roku. Tylko w tym ostatnim przypadku będziemy tłumaczyć wartość numeryczną na właściwą datę:

switch ($User.Properties['accountexpires'][0]) {
0 {
[datetime]::MaxValue
}
([Int64]::MaxValue) {
[datetime]::MaxValue
}
default {
[datetime]::FromFileTime($_)
}
}

Informację dla użytkownika wyślemy jedynie wtedy, gdy wartość będzie „tłumaczona” i bliska aktualnej daty.
Mając opracowaną metodę określania, czy i kiedy wygaśnie konto użytkownika, można przejść do informacji wykorzystywanej zdecydowanie częściej i dotyczącej na ogół wszystkich użytkowników w organizacji – wygasającego hasła. Zaczniemy od ustalenia, czy w interesującej nas domenie wykorzystywane są wspomniane już szczegółowe polityki haseł. Zaczynamy od sprawdzenia, czy poziom funkcjonalności domeny nie jest zbyt niski (wymagany poziom to Windows Server 2008; wartość atrybutu domainFunctionality równa 3). Jeżeli tak, to z polityk szczegółowych nie będzie można skorzystać:

$RootDSE = ([adsi]'LDAP://RootDSE')
if ($RootDSE.Properties['domainFunctionality'] -ge 3) {
# Mamy dostęp do PSO...
}

Druga sprawa to sprawdzenie, czy interesująca nas funkcjonalność wykorzystywana jest w bieżącej domenie. Najprościej sprawdzić to bezpośrednio, wyszukując obiekty typu msDS-PasswordSettings w kontenerze CN=Password Settings Container,CN=System,
DC=domena,DC=lokal. Warto także upewnić się, że polityki nie tylko istnieją, ale są też przypisane do jakichś obiektów. Wreszcie – nie interesują nas wszystkie polityki, a jedynie te, które zmieniają parametry związane z wygasaniem haseł. Innymi słowy, nieistotne są dla nas te polityki, których właściwość odpowiedzialna za maksymalny czas ważności hasła (msDS-MaximumPasswordAge) jest identyczna z wartością maxPwdAge zdefiniowaną na poziomie domeny:

$HasloWygasa = [adsi]"LDAP://$Domena" | ForEach-Object {
$_.ConvertLargeIntegerToInt64($_.maxPwdAge[0])
}
$SciezkaPSO = [adsi]"LDAP://CN=Password Settings `
Container,CN=System,$Domena"
(New-Object adsisearcher -ArgumentList @(
$SciezkaPSO,
"(&(msDS-PSOAppliesTo=*)(!msDS-MaximumPasswordAge=$HasloWygasa))"
)).FindAll()

Jeśli to zapytanie zwróci jakiś rezultat (każdy wynik oznacza istnienie PSO, czyli każdy użytkownik może korzystać albo z polityki na poziomie domeny, albo tegoż PSO), to musimy w audycie uwzględnić wpływ szczegółowych polityk haseł na użytkowników w domenie. Jeśli wynik jest negatywny – możemy w zupełności polegać na polityce określonej na poziomie domeny. Do samych polityk można podejść od strony obiektów, którym przypisano odpowiednie polityki, lub od strony polityk, sprawdzając, jakie obiekty są do nich przypisane. W pierwszym przypadku warto skorzystać z wyliczanego atrybutu msDS-ResultantPSO wskazującego na to, która z polityk będzie faktycznie obowiązywać interesującego nas użytkownika. W drugim przypadku ustalenie, jaka polityka będzie nas obowiązywać, jest bardziej skomplikowane. Przede wszystkim istotne jest, czy przypisano ją do grupy, czy do konkretnego użytkownika, ponieważ zawsze pierwszeństwo ma polityka przypisana do użytkownika. Dzięki temu można skonfigurować system tak, by mimo członkostwa w pewnej grupie możliwe było tworzenie wyjątków w sytuacjach szczególnych. Kolejna kwestia dotyczy sytuacji, gdy dwie polityki definiujące różne wartości żywotności hasła znajdują się na tym samym poziomie (grupy bądź użytkownika). O tym, która z polityk będzie zastosowana, rozstrzyga wówczas atrybut msDS-PasswordSettingsPrecedence, a jeśli i jego wartość nie pozwala rozstrzygnąć (taka sytuacja nie powinna się zdarzyć i należy ją uznać za błąd administratora popełniony przy projektowaniu polityk), to pozostaje matematyczne porównanie GUID-ów poszczególnych PSO. Oczywiście korzystając z odpowiedniego atrybutu, zdejmujemy z siebie konieczność przeprowadzania żmudnych obliczeń. Pozostaje jedynie upewnić się, że wynikowa polityka znajduje się na naszej liście polityk zmieniających żywotność hasła, i jeśli tak w istocie jest, skorzystać z niej zamiast polityki na poziomie domeny:

[...]

Autor zawodowo zajmuje się informatyką. Jest Microsoft MVP w dziedzinie PowerShella, blogerem oraz jednym z moderatorów forum dotyczącego skryptów w serwisie TechNet. Autor książki „Windows PowerShell 5.1 Biblia”.

Pełna treść artykułu jest dostępna w papierowym wydaniu pisma. Zapraszamy do składania zamówień na prenumeratę i numery archiwalne.
 
 

Polecamy

Biblioteka Informacja Publiczna

Specjalistyczne publikacje książkowe dla pracowników administracji publicznej

więcej