资源预览内容
第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
第9页 / 共10页
第10页 / 共10页
亲,该文档总共10页全部预览完了,如果喜欢就下载吧!
资源描述
在这篇文章中,我将为大家介绍如何通过登录/注销脚本来限制用户的多点并发登录。这是一系列文章之一,如果您对前面的测试环境不是很了解,或者对这个话题比较感兴趣,那么请参看前面的文章:限制用户多点并发登录之一“登录到 ”篇废话就不多说了,请看如下操作:1) 打开 GPMC,为 Test OU 创建并链接一条名为“ 限制用户多点并发登录”的 GPO。如图 1 和 2 所示。如果没有安装 GPMC 组策略管理控制台,请直接在 Test OU 右键属性上创建并链接一条 GPO。1.JPG 2.JPG 2) 将以下内容分别存为 logon.vbs 和 logoff.vbs以下内容请存为 logon.vbsDim oNet, sUser, sComputer, ServerLogServerLog = dc.a.comlog$ Set oNet = CreateObject(Wscript.Network)sUser = oNet.UserNamesComputer = oNet.ComputerNameSet oNet = NothingDim fso, f1, WshShell, argu, alllog, lastlogDim FileNameFileName=ServerLog & sUser & .txtSet 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 EveryoneWshShell.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. 脚本中共享文件夹路径dc.a.comlog$,请替换为自己实际的路径,最好为共享文件夹设置为隐藏共享,避免用户浏览到里面的内容而加以改动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 权限完全控制试试,我这没问题啊。就上面我提到的那个问题,中间缺个判断文件是否为空的代码。
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号