Windows - A tartományi számítógépfiókok jelszavai

forráskód letöltése
Az Active Directory-ba bejelentkező minden erőforrást igénylő fióknak jelszóval kell rendelkeznie. Felhasználók esetében nem is meglepő, de ez érvényes a számítógépfiókokra is. A rendszergazda rendelkezésére álló felügyeleti konzollal könnyedén törölhető a jelszó. A következmény: a kliens gépről a következő indítás alkalmával nem lehet bejelentkezni, még rendszergazdaként sem. Kivéve, ha ismerjük a Windows jelszókezelését...
Cikkünkhöz mellékeltük az alábbiakban tárgyalásra kerülő szkriptet. Felhasználása előtt az első sorában át kell írni a példaként megadott "Animare.hu" tartománynevet a futtatási környezetnek megfelelő tartomány nevére.
Active Directory tartományokban minden Windows NT/2000/XP-t futtató számítógép rendelkezik saját fiókkal. A felhasználói fiókokhoz hasonlóan igényelhetnek erőforrásokat, be és ki kell jelentkezniük, és rendelkeznek jelszóval. Nem így a Windows 95/98/ME-t futtató gépek. Bár elérhetnek bizonyos erőforrásokat (megosztott mappákat, nyomtatókat), lévén, hogy operációs rendszer szintjén hiányoznak a tartomány által elvárt biztonsági szolgáltatások, csak erősen korlátozott lehetőségekkel bírnak.
Ellentétben a felhasználói fiókok jelszavaival a számítógép fiókok jelszava automatikus kezelés alá esik (ez sincs meg a Windows 9x/ME sorozatban). Akkor jön létre, amikor a munkaállomás csatlakozik a tartományhoz és bizonyos időközönként megújul. Ha kiléptetünk egy gépet a tartományból a fiókja letiltott állapotba kerül. Később ugyanezzel a névvel ugyanezt, vagy egy másik gépet ismét felvehetünk, jelszava "nullázódik" és a fiók aktivizálódik. Minden alkalommal, amikor alapállapotba kerül a jelszó, elindul egy számláló az eltelt másodperceket mérve és beírva az objektum "PasswordAge" tulajdonságába. A tulajdonság csak programból érhető el, a felhasználói felületen nem jelenik meg sehol, de le lehet kézzel nullázni (egyben törölni is a jelszót): nyissuk meg a Felügyeleti eszközök > Active Directory - felhasználók és számítógépek (Administrative Tools > Active Directory Users and Computers) konzolt. Kattintsunk a jobboldali egérgombbal az adott fiókon és lépjünk a menü "Fiók alapállapotba hozása" ("Reset Account") sorára. Ettől kezdve nem egyezik meg a jelszó a kiszolgálón és a kliens gépen. Bejelentkezéskor a következő hibaüzenetet kapjuk:
A rendszer nem tudja beléptetni ebbe a tartományba vagy azért, mert a rendszer elsődleges tartományából hiányzik a számítógépfiók, vagy mert az adott fiók jelszava nem megfelelő.
Megoldást az jelent, ha helyileg bejelentkezünk a kliensre és ismét beléptetjük a tartományba. Az alábbi szkript kilistázza a "Computer" tároló számítógépfiókjait és jelszavuk "életkorát", abban az esetben, ha nullától különböző.
Definiáljunk egy változót és tároljuk el benne a vizsgálandó tartomány nevét.
Domain="animare.hu"
A tartományi objektumok elérésére használjuk a "WinNT" interfészt és a visszakapott eredményt szűrjük oly módon, hogy csak a "Computer" tárolóban lévő fiókokkal dolgozzunk.
Set Container=GetObject("WinNT://"+Domain)
Container.Filter=Array("Computer")
Az áttekinthetőbb megjelenítés érdekében készítsünk fejlécet a listához.
Wscript.Echo "Számítógépfiókok jelszavának életkora"
Wscript.Echo "-------------------------------------"
Wscript.Echo ""
FOR ciklussal egyesével haladjunk végig a tároló összes fiókján.
For Each Computer in Container
 Set ComputerAccount=GetObject(Computer.AdsPath & "$,user")
Olvassuk ki mindenhol a "PasswordAge" tulajdonságot és csak azokkal foglalkozzunk, amelyek jelszavának élettartama nagyobb nulla másodpercnél.
  If ComputerAccount.Get("PasswordAge")>0 Then
Finomítsuk tovább a szkriptet: a fiókok közül csak a munkaállomásokra legyünk kíváncsiak a tartományvezérlőkre, kiszolgálókra és egyéb szerepkört ellátó gépekre ne. Kérjük le a "UserFlags" tulajdonságot és csak a &H1000 értéket viselőkkel foglalkozzunk. A &H1000 egy "UF_WORKSTATION_TRUST_ACCOUNT" nevű konstans és a munkaállomásokat jelöli vele az Active Directory.
   lngFlags=ComputerAccount.Get("UserFlags")
     If (lngFlags And &H1000) <> 0 Then
Jelenítsük meg a képernyőn a fiók elérési útját névvel együtt, a jelszó pillanatnyi életkorát másodpercben és a gyorsabb és könnyebb értelmezhetőség miatt kerekítve számoljuk át napokra is.
      Wscript.Echo "Gépnév: " & Computer.AdsPath & "     életkor: " & ComputerAccount.Get("PasswordAge") & " mp = " & round(ComputerAccount.Get("PasswordAge")/86400) & " nap"
     End If
  End If
Next
Mentsük el a szkriptet "PasswordAge.vbs" néven. Futtassuk egy tartományvezérlőn, parancssorból az alábbi módon:
cscript PasswordAge.vbs