文档详情

限制用户多点并发登录之二“脚本”篇

第***
实名认证
店铺
DOC
521KB
约10页
文档ID:32813592
限制用户多点并发登录之二“脚本”篇_第1页
1/10

在这篇文章中,我将为大家介绍如何通过登录/注销脚本来限制用户的多点并发登录这是一系列文章之一,如果您对前面的测试环境不是很了解,或者对这个话题比较感兴趣,那么请参看前面的文章:《限制用户多点并发登录之一“登录到 ”篇》废话就不多说了,请看如下操作:1) 打开 GPMC,为 Test OU 创建并链接一条名为“ 限制用户多点并发登录”的 GPO如图 1 和 2 所示如果没有安装 GPMC 组策略管理控制台,请直接在 Test OU 右键属性上创建并链接一条 GPO1.JPG 2.JPG 2) 将以下内容分别存为 logon.vbs 和 logoff.vbs以下内容请存为 logon.vbsDim oNet, sUser, sComputer, ServerLogServerLog = "\\\log$\" Set oNet = CreateObject("Wscript.Network")sUser = oNet.UserNamesComputer = oNet.ComputerNameSet oNet = NothingDim fso, f1, WshShell, argu, alllog, lastlogDim FileNameFileName=ServerLog & sUser & ".txt"Set fso = CreateObject("Scripting.FileSystemObject")If Not (fso.FileExists(FileName)) ThenSet f1 = fso.CreateTextFile(FileName,True)f1.WriteLine sUser & " " & sComputerf1.CloseSet WshShell = Wscript.CreateObject("Wscript.Shell")argu = FileName & "/T/E/G" & sUser & ":f /R Everyone"WshShell.run("cacls " & argu)Set WshShell = NothingEnd IfSet f1 = fso.OpenTextFile(FileName, 1, True)alllog = f1.readallf1.CloseSet f1 = fso.OpenTextFile(FileName, 1, True)lastlog = f1.readlinef1.CloseIf Left(lastlog, 5) = "logon" Then If InStr(lastlog,sComputer) 0 Then Set f1=fso.opentextfile(FileName,2,true)f1.writeline("logoff: " & Now() & " " & suser & " at " & scomputer & Chr(13) & chr(10) & alllog)f1.closeEnd Ifend ifset f1=nothingset fso=nothingwscript.quit说明:1. 运行该登录和注销脚本后,会在共享文件夹中写下 log 文件,其中记录了域用户在工作站上的登录注销记录2. 请确保用户对共享文件夹有合适的写权限,否则脚本运行肯定报错3. 脚本中共享文件夹路径\\\log$\,请替换为自己实际的路径,最好为共享文件夹设置为隐藏共享,避免用户浏览到里面的内容而加以改动3) 编辑“ 限制用户多点并发登录”策略,找到“ 用户配置”?“Windows 设置”?“脚本(登录/注销)” 。

将以上两个脚本分别部署为登录和注销脚本,如图 3 和 43.JPG4.JPG 4)在 DC 上的设置就完成了回到客户端 ClientA,执行一下命令 gpupdate /force 后注销再登录,或者直接重启计算机让其生效同样,我们拿 Bob 这个帐号来验证在 ClientA 上输入 Bob 的用户名和密码后,成功登录如图 5 为 Bob 登录后,运行 set 命令得到的结果,从中我们可以看出,Bob 已登录到ClientA 上5.JPG 4)同理,回到客户端 ClientB 上,执行一下命令 gpupdate /force 后注销再登录,或者直接重启计算机让其生效我们仍然拿 Bob 这个帐号来验证在 ClientB 上输入 Bob 的用户名和密码,如图 6,尽管能登录进去,但是很快就可以看到如图 7 的信息,提示 Bob 这个帐号已经在 ClientA 上登录点击“ 确定”或者关闭按钮后(或者直接等待 30 秒),系统就会自动注销,如图 8 所示6.JPG 7.JPG 8.JPG 5) 上面介绍的方法简单又实用,只需要在服务端部署脚本即可,不需要客户端任何额外的设置能确保任何时刻都只有一个帐号在使用。

而且,提供的日记记录信息也有不少用处,至少比在 DC 上查看安全审核策略要来得更直观以下我简单介绍一下 log 中记录的信息:9.JPG Logon 一行记录的是某某用户于某某时间成功登录了哪台工作站;该处值为 Logoff 时则表示,某某用户于某某时间成功从哪台工作站注销了FailLogon 则记录的是登录失败的信息为什么会登录失败?是因为当前使用的帐号已经在别处登录从图中第二行记录可以看出,Bob 这个帐号试图在 ClientB 上登录,但是因为当前已经在 ClientA 上登录(第一行 Logon 记录),所以就 “FailLogon”啦需要说明的是,除第一行外,日志都会以时间的先后顺序将登录注销事件记录下来,后发生的事件靠上但是第一行例外,它记录的是当前某帐号目前在哪台工作站上,如果再次用这个帐号在别处登录,那么登录脚本就首先会检查第一行记录,如果记录的是 logon,而且 at 后面的工作站不和当前工作站相同的话,就会触发注销脚本,然后给出提示信息如果第一行记录的是 logoff,则表明该帐号当前已经处于注销未登录状态,所以就不会再检测 at 后面的工作站名,直接让该帐号可以再在别处登录。

这也是整个登录脚本执行的原理如上图所示,第一行记录就表明,Bob 这个帐号已经在 ClientA 上登录,且没有注销,不能在别处登录只能在 ClientA 上登录说到这,也许您会问我,如果我用 Bob 这个帐号在 ClientA 上登录后,突然停电了,根本就没有按正常的方式运行注销脚本,那么该 Bob 帐号还能在别处登录吗?问题很好,我们来分析一下突然停电,Bob 就肯定不会运行注销脚本,既然不会运行注销脚本,那么就不会往 log 文件中的第一行添加 logoff 字段,根据前面介绍的脚本执行原理可以得出结论, Bob 这个帐号肯定就不能在别处登录了因为脚本在检测的时候,会发现 log 文件里面依然记录的是 Bob 还在 ClientA上登录着呢如果我想再用 Bob 在别处登录,那如何解决这个问题呢?解决方法有两个:1. 将 bob.txt 日志文件中的第一行 logon 改为 logoff,让脚本在检测的时候认为 Bob 已经注销,从未允许在别处登录2. 不修改 logon 值,直接修改 at 后面的工作站名例如我将 ClientA 改为 ClientB,则脚本会以为Bob 这个用户当前登录的是 ClientB,从而允许“ 继续在 ClientB 上登录”。

这 2 个脚本好像运行有错啊:输入超出文件尾 错误'800a003e',网上查了下,好像是没有判断自己使用的readall 的文件是否是空文件,如果是空就会返回这个错误请版主改一下进一步实验还发现:如果在 Log$文件夹内 bob.txt 中添加一条首记录 Logon: 2008-02-28 下午 20:48:52 bob at CLIENTA (此时已经用 bob 在 ClientA 登陆)——那么以后的操作都没有问题,也不会提示什么脚本错误了LZ 你好!测试时发现登陆和注销都出现错误LogonLogoff这是为什么捏?logon.JPG 答:确认一下 LOG 文件夹共享,并且共享权限和 NTFS 权限完全控制试试,我这没问题啊就上面我提到的那个问题,中间缺个判断文件是否为空的代码。

下载提示
相似文档
正为您匹配相似的精品文档