时间:2014-11-04 12:41:30 来源: 复制分享
大家都知道,Windows活动目录中,默认情况下,域用户可以在任意域计算机上登陆。哪么如何阻止这种现象发生呢?
常见的方法有在ADUC中设置用户属性中的登陆到,指定他能够登陆到的计算机。还有就是在客户端组策略的安全设置|本地策略|用户权限指派|“在本地登陆”设置允许在该计算机上登陆的用户和组。还有就是并发登陆,这里我们不讨论这个。微软有一个limitlogon工具,没怎么用过。至少我下下来我不知道从哪里下手。-_-。另外我在网上也看到一些解决办法,比如“大智弱驴”的一片博文提到的的,将用户登陆状态写入到SQL数据库中。
http://windows.chinaitlab.com/domain/776490.html
似乎这些方法都有一个点,需要手动一个一个的去设置用户的登陆属性,这对于大型环境,会打来很大的工作量。为此,我提出下面这个方法,主要思想创建一条域组策略的是将在该计算机上登陆最多的用户添加到“在本地登陆”中去。但是不同的机器又不同的用户,如何解决这个问题呢。我的处理方法是在每个客户端添加一个本地用户组,在策略“在本地登陆”中,将一个组添进去,将登陆客户端机器最多的用户添加到这个组中去。创建本地组和添加用户到组是可以采用脚本来实现的,从而解决了逐个设置的麻烦。
本人脚本不是很熟,很多是参照其他的脚本写的,也许有的地方不是很完美。
一、创建本地组
有两种方式,一种BAT脚本,一种VBS脚本,将脚本作为启动脚本。
1、BAT方式
net localgroup LogonUser /add /comment:允许本地登组
2、VBS
strComputer = "."
Set objComputer = GetObject("WinNT://" & strComputer & ",computer")
Set objGroup = objComputer.Create("group", "LogonUser")
objGroup.SetInfo
二、找出在客户端登陆最多的用户。
谁的机器,一般情况下当然是谁使用谁登陆的最多。哪么如何找出这个用户呢?登陆登陆,对了,审核。哪么我们得在域中的策略中将登陆成功审核开启。我们只需要检索谁登陆成功审核日志最多。首先第一个要解决的问题就是,我如何获得在这台机器上登陆过得域账户?
每一个域账户登陆后,都会在注册表SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList写入一个记录,下面的子项是他们的SID。哪么我只需要读出这些SID就可以了。在反过来通过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,只统计域帐户,上面这一行是域用户SID的前面一段,应该属于域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)
'函数CountLogon,统计事件日志\安全 中成功审核的事件次数