电脑计算机论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2281|回复: 0

阻止AD用户在任意域计算机上登陆的方法

[复制链接]
admin 发表于 2012-7-25 11:04:28 | 显示全部楼层 |阅读模式
大家都知道,Windows活动目录中,默认情况下,域用户可以在任意域计算机上登陆。哪么如何阻止这种现象发生呢?
  常见的方法有在ADUC中设置用户属性中的登陆到,指定他能够登陆到的计算机。还有就是在客户端组策略的安全设置|本地策略|用户权限指派|“在本地登陆”设置允许在该计算机上登陆的用户和组。还有就是并发登陆,这里我们不讨论这个。微软有一个limitlogon工具,没怎么用过。至少我下下来我不知道从哪里下手。似乎这些方法都有一个点,需要手动一个一个的去设置用户的登陆属性,这对于大型环境,会打来很大的工作量。为此,我提出下面这个方法,主要思想创建一条域组策略的是将在该计算机上登陆最多的用户添加到“在本地登陆”中去。但是不同的机器又不同的用户,如何解决这个问题呢。我的处理方法是在每个客户端添加一个本地用户组,在策略“在本地登陆”中,将一个组添进去,将登陆客户端机器最多的用户添加到这个组中去。创建本地组和添加用户到组是可以采用脚本来实现的,从而解决了逐个设置的麻烦。
  本人脚本不是很熟,很多是参照其他的脚本写的,也许有的地方不是很完美。
  一、创建本地组
  有两种方式,一种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,统计事件日志\安全 中成功审核的事件次数
  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 & "'")  ‘统计事件528的用户
  CountLogon=colEvents.Count end Function
您需要登录后才可以回帖 登录 | 注册

本版积分规则


QQ|手机版|小黑屋|电脑计算机论坛 ( 京ICP备2022023538号-1 )

GMT+8, 2024-12-27 22:11 , Processed in 0.100046 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表