Active Directory on Steroids: Hromadné resety hesel podle CSV webseidon Lukáš Adámek

Active Directory on Steroids: Hromadné resety hesel podle CSV

Active Directory on Steroids: Hromadné resety hesel podle CSV

Active Directory on Steroids: Hromadné resety hesel podle CSV

Říká ti něco situace: „Zítra nastupuje 50 brigádníků, každý musí mít účet a heslo, ať se nezblázní helpdesk.“? Nebo „Insider leak – resetuj hesla všem ve výrobě hned!“? Klikat v ADUC je peklo. PowerShell se skriptem Set‑ADAccountPassword to zvládne během kávy. Pojďme na to – CSV, silná hesla, auditní log, distribuce e‑mail/SMS a žádné zablokované účty.



1 · Kdy hromadný reset dává smysl

  • Hromadný onboarding (brigádníci, sezónní pracovníci).
  • Incident response – podezření na kompromitaci hesel.
  • Pravidelná rotace hesel (SOX, ISO 27001).
  • Merge & Acquisition: sjednocení politik mezi doménami.

2 · Formát CSV pro vstup

„`csv SamAccountName,Email,Phone,OU jnovak,j.novak@firma.cz,+420777123456,OU=People,DC=firma,DC=cz kmala,karla.mala@firma.cz,,OU=Contractors,DC=firma,DC=cz

POZOR: Název sloupce SamAccountName je povinný, ostatní dobrovolné (pro notifikace a přesun v OU).


3 · Generátor silných hesel

function New‑StrongPassword {
  param([int]$Length = 14)
  Add‑Type -AssemblyName System.Web
  do {
     $pw = [System.Web.Security.Membership]::GeneratePassword($Length,3)
  } until ($pw -match '[A-Z]' -and $pw -match '[a-z]' -and $pw -match '\d' -and $pw -match '\W')
  $pw
}

Splňuje komplexitu AD + FIPS (pokud délka ≥ 14 znaků).


4 · Skript Invoke‑MassPwReset.ps1

param(
  [string]$Csv = "C:\Data\users.csv",
  [string]$Log = "C:\Logs\PwReset_$(Get-Date -F yyyyMMdd_HHmm).csv",
  [switch]$MoveOU,
  [switch]$ReportOnly
)

Import-Module ActiveDirectory
$list = Import-Csv $Csv
$result = @()

foreach ($u in $list) {
   $pwd = New-StrongPassword
   if (!$ReportOnly) {
      try {
        Set-ADAccountPassword -Identity $u.SamAccountName -Reset -NewPassword (ConvertTo-SecureString $pwd -AsPlainText -Force)
        Set-ADUser $u.SamAccountName -ChangePasswordAtLogon $true
        if ($MoveOU -and $u.OU) { Move-ADObject (Get-ADUser $u.SamAccountName).DistinguishedName -TargetPath $u.OU }
        $state = 'OK'
      } catch {
        $state = $_.Exception.Message
      }
   } else { $state = 'REPORT' }
   $result += [pscustomobject]@{
        User  = $u.SamAccountName
        Email = $u.Email
        Phone = $u.Phone
        Password = $pwd
        Status   = $state
   }
}

$result | Export-Csv $Log -NoTypeInformation -Encoding UTF8

5 · Rozeslání hesel e‑mailem / SMS

$smtp = 'smtp.firma.cz'
foreach ($r in $result) {
  if ($r.Email) {
     $body = "Ahoj $($r.User),\nTvé nové heslo: $($r.Password)\nZměň si ho při prvním přihlášení."
     Send-MailMessage -To $r.Email -From it@firma.cz -Subject 'Nové heslo' -Body $body -SmtpServer $smtp -UseSsl
  }
  if ($r.Phone) {
     Send‑Sms -To $r.Phone -Msg "Nove heslo: $($r.Password)"  # vlastní wrapper na Twilio/GOIP
  }
}

E‑maily posílej TLS, u SMS neukládej heslo do history.


6 · Prevence lockoutů & časové okno

  • Zablokuj GPO cached credentials → Interactive logon: Number of previous logons = 0.
  • Změň hesla mimo špičku (Scheduled Task, noc).
  • Informuj helpdesk – budou volat.

7 · Audit do SIEM a reverzní dohledatelnost

  • AD Audit Policy: Directory Service Changes → event ID 4724 (password reset).
  • Forward do SIEM (Splunk/ELK).
  • Skript loguje CSV (uživatel, nová hash? NIKDY – heslo jen PlainText v chráněném sdíleném úložišti → po 72 h smaž).

8 · Rollback: když se reset pokazí

  1. CSV log = reference → vygeneruj nové heslo pro konkrétní účty.
  2. Set-ADAccountPassword -Identity user -NewPassword (ConvertTo‑SecureString $old -AsPlainText -Force)
  3. Audit trail stále existuje (event ID 4724).

9 · Case study: 320 hesel za 90 s

ParametrPřed (ručně)Se skriptemRozdíl
Prům. čas/heslo45 s0,28 s‑99,4 %
Chyby (záměna O ↔ 0)~5 %0 %‑100 %
Uživ. dotazy „Kde je heslo?“403‑92 %

10 · FAQ

Mohu použít vlastní generátor hesel?
Jasně, funkci New‑StrongPassword nahraď svým algem či hashicorp/random.
Co Azure AD?
Azure AD Graph podporuje Set‑AzureADUserPassword; podobný princip, ale potřebuje Graph API beta permissions.
Neporušuji GDPR rozesíláním hesel e‑mailem?
Použij bezpečné kanály: link na OneTime Secret, šifrovaný PDF, SMS mimo PII.

11 · Závěr

Zapomeň na klikání a copy‑paste hesel v Notepadu. PowerShell ti dá turbo rychlost, auditní stopu a bezpečnost zároveň. Ať už onboarding 50 brigádníků nebo reakce na incident – hromadný reset hesel je teď otázkou minut, ne dnů.


Klíčová slova

active directory, mass password reset, powershell ad, set‑adaccountpassword, csv bulk import, secure random password, helpdesk automation, compliance audit

↥ Zpět nahoru

„`

Sdílejte na sítích

Webseidon
Webseidon
Articles: 32