如何利用限制AD用戶登陸
大家都知道,Windows活動(dòng)目錄中,默認(rèn)情況下,域用戶可以在任意域計(jì)算機(jī)上登陸。哪么如何阻止這種現(xiàn)象發(fā)生呢?
常見的方法有在ADUC中設(shè)置用戶屬性中的登陸到,指定他能夠登陸到的計(jì)算機(jī)。還有就是在客戶端組策略的安全設(shè)置|本地策略|用戶權(quán)限指派|“在本地登陸”設(shè)置允許在該計(jì)算機(jī)上登陸的用戶和組。還有就是并發(fā)登陸,這里我們不討論這個(gè)。微軟有一個(gè)limitlogon工具,沒(méi)怎么用過(guò)。至少我下下來(lái)我不知道從哪里下手。似乎這些方法都有一個(gè)點(diǎn),需要手動(dòng)一個(gè)一個(gè)的去設(shè)置用戶的登陸屬性,這對(duì)于大型環(huán)境,會(huì)打來(lái)很大的工作量。為此,我提出下面這個(gè)方法,主要思想創(chuàng)建一條域組策略的是將在該計(jì)算機(jī)上登陸最多的用戶添加到“在本地登陸”中去。但是不同的機(jī)器又不同的用戶,如何解決這個(gè)問(wèn)題呢。我的處理方法是在每個(gè)客戶端添加一個(gè)本地用戶組,在策略“在本地登陸”中,將一個(gè)組添進(jìn)去,將登陸客戶端機(jī)器最多的用戶添加到這個(gè)組中去。創(chuàng)建本地組和添加用戶到組是可以采用腳本來(lái)實(shí)現(xiàn)的,從而解決了逐個(gè)設(shè)置的麻煩。
本人腳本不是很熟,很多是參照其他的腳本寫的,也許有的地方不是很***。
一、創(chuàng)建本地組
有兩種方式,一種BAT腳本,一種VBS腳本,將腳本作為啟動(dòng)腳本。
1、BAT方式
net localgroup LogonUser /add /comment:允許本地登組
2、VBS
strComputer = "."
Set objComputer = GetObject("WinNT://" & strComputer & ",computer")
Set objGroup = objComputer.Create("group", "LogonUser")
objGroup.SetInfo
二、找出在客戶端登陸最多的用戶。
誰(shuí)的機(jī)器,一般情況下當(dāng)然是誰(shuí)使用誰(shuí)登陸的最多。哪么如何找出這個(gè)用戶呢?登陸登陸,對(duì)了,審核。哪么我們得在域中的策略中將登陸成功審核開啟。我們只需要檢索誰(shuí)登陸成功審核日志最多。首先***個(gè)要解決的問(wèn)題就是,我如何獲得在這臺(tái)機(jī)器上登陸過(guò)得域賬戶?
每一個(gè)域賬戶登陸后,都會(huì)在注冊(cè)表SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList寫入一個(gè)記錄,下面的子項(xiàng)是他們的SID。哪么我只需要讀出這些SID就可以了。在反過(guò)來(lái)通過(guò)SID查處用戶。
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_
strComputer & "\root\default:StdRegProv")
strKeyPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
oReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys
For Each subkey In arrSubKeys
If left(subkey,40) = "S-1-5-21-3417139075-3398302879-647143828" Then
'比較SID,只統(tǒng)計(jì)域帳戶,上面這一行是域用戶SID的前面一段,應(yīng)該屬于域ID。
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery _
("Select * from Win32_UserAccount Where LocalAccount='False' And SID= '" & subkey & "'")
For Each objItem in colItems
LogonTimes=CountLogon("cotoso\\" & objitem.Name)
'函數(shù)CountLogon,統(tǒng)計(jì)事件日志\安全 中成功審核的事件次數(shù)
Function CountLogon(Username)
strComputer = "."
Set objWMIService = GetObject("winmgmts:{(Security)}\\" & _ strComputer & "\root\cimv2")
Set colEvents = objWMIService.ExecQuery
_ ("SELECT * FROM Win32_NTLogEvent WHERE LogFile = 'Security' AND " & _
"EventCode = 528 AND User ='" & username & "'") ‘統(tǒng)計(jì)事件528的用戶
CountLogon=colEvents.Count end Function
【編輯推薦】