让AD域用户账户只能登陆管理员指定的客户端计算机

 

 

 

 

我们都知道,在域AD环境下域用户账户默认是可以登陆到除DC外的任意计算机客户端的,这就让一些别有用心的员工找到漏洞了,这样他就可以登陆别人的计算机去获得他想要的资料了,这样对一个企业来说是非常不安全的,那么应该如何解决这个问题呢?OK,入正题。

这里介绍两种方法,不过还是用第一种方法比较灵活,第二种方法比较复杂而且也带有漏洞。

第一个办法:

1
、在域帐号的属性中设置。
打开该帐号的属性,帐户页面,登录到,如下图所示:

然后在登录工作站选择下列计算机;将要登录到的计算机名字填写,然后确定,即可。

3.
测试,当使用该帐号没有登录到指定的计算机的时候,系统会提示错误,如下图所示:

到此设置完毕。

第二个办法:

1
、准备两个脚本。一个用于用户登入时执行的login.vbs,另一个是用于注销时使用的logoff.vbs

2
、为配合脚本,我们需要在DC上创建一个共享文件夹,让所有用户拥有更改的权限!

3
、建立一条组策略

A
、准备脚本(我会在本文最后提供脚本给大家分享)
B
、创建共享文件夹Userinfo(为避免用户错误,我尽量详尽)

创建共享及并给用户以变更权限

开始将我们的login.vbs这个脚本加入到启动指令中
在这一切设置完毕之后,为了加速就用的时候,我们在GPMC管理工具上将这个策略设置成强制。并重启我们的客户端计算机,当然你也可以先执行gpupdate /force 这个命令来强行的刷新组策略!
将这个策略设置成强制。
原理:
两个脚本是用来记录用户所登入与登出的计算机时间,在一个用户登入后,会立即写下当前的记录,如果用户使用同一个账户在另一个计算机上登录时就会报警。现在我们来看看用户登陆后,在共享资料夹里产生的文件!它的文件命名方式以用户的登陆名为主!
下面这个文件是MIS-04登入计算机后产生的,我们可以清楚的看到MIS-04这个用户所登入的计算机及时间!通过这种方式,如果MIS-04再登入其他的电脑的话,VBS会检查这个档里面的信息,当他发现MIS-04已经登入一台电脑了,并且没有注销。它就会自动退出!
login.vbs
代码:
Dim oNet, sUser, sComputer, ServerLog
ServerLog = "\\192.168.1.1\Userinfo\ "
Set oNet = CreateObject("Wscript.Network")
sUser = oNet.UserName
sComputer = oNet.ComputerName
Set oNet = Nothing
Dim fso, f1, WshShell, argu, alllog, lastlog
Dim FileName
FileName=ServerLog & sUser & ".txt"
Set fso = CreateObject("Scripting.FileSystemObject")
If Not (fso.FileExists(FileName)) Then
  Set f1 = fso.CreateTextFile(FileName,True)
  f1.WriteLine sUser & "   " & sComputer
  f1.Close
  Set WshShell = Wscript.CreateObject("Wscript.Shell")
  argu = FileName & "/T/E/G" & sUser & ":f /R Everyone"
  WshShell.run("cacls " & argu)
  Set WshShell = Nothing
End If

Set f = fso.GetFile(Filename)
   intSizeB = f.Size
   if intsizeB=0 then
   alllog = ""
   lastlog = ""
   end if
   if intsizeB>0 then
    set f1=fso.OpenTextFile(Filename,1,True)
   alllog = f1.readall
    f1.close
    set f1=fso.OpenTextFile(Filename,1,True)
   lastlog = f1.readline
    f1.close
   end if
If Left(lastlog, 5) = "logon"  Then  
If InStr(lastlog,sComputer) < 1 Then  
        Set f1 = fso.OpenTextFile(FileName, 2, True)
        f1.WriteLine (lastlog & Chr(13) & Chr(10) & "FailLogon:" & Now() & " " & sUser & "  at  " & scomputer & Chr(13) & Chr(10) & alllog)
        f1.Close

        Set WshShell = Wscript.CreateObject("Wscript.Shell")
        Dim i,OldComputer
        i=InStr(lastlog,"at")
        OldComputer=Right(lastlog,Len(lastlog)-i-2)
        WshShell.popup "
对不起:此账号已经在 " & OldComputer & " 上登入使用!出现此提示的可能情况如下:1、您在其他电脑上登陆的帐户未及时注销。2、您上次非法关闭计算机或者意外停电。3、如果您确认未发生上述2种情况,那么可能您的帐户被盗。对于23情况请及时上报IT支持,谢谢!!!" , 30
        Set WshShell = Nothing
        Dim os, retcode
        For Each os In GetObject("Winmgmts:{impersonationLevel=impersonate,(shutdown,remoteshutdown)}!//" + sComputer).InstancesOf("Win32_OperatingSystem")
           retcode = os.Win32ShutDown(4, 0)
        Next
        Wscript.quit
       Else
        Set f1 = fso.OpenTextFile(FileName, 2, True)
        f1.WriteLine ("logon:  " & Now() & " " & sUser & "  at " & sComputer & Chr(13) & Chr(10) & alllog)
        f1.Close
       End If
Else  
       Set f1 = fso.OpenTextFile(FileName, 2, True)
       f1.WriteLine ("logon:  " & Now() & " " & sUser & "  at " & sComputer & Chr(13) & Chr(10) & alllog)
       f1.Close
End If
Set f1 = Nothing
Set fso = Nothing
Wscript.quit
logoff.vbs
代码
dim oNet,sUser,sComputer,ServerLog
ServerLog = "\\192.168.1.1\Userinfo\ "
set oNet=createobject("Wscript.Network")
sUser=oNet.UserName
sComputer=oNet.ComputerName
set oNet=nothing
dim fso,f1,alllog,lastlog
Dim FileName
FileName=ServerLog & sUser & ".txt"
set fso=createobject("Scripting.filesystemobject")

If Not (fso.FileExists(FileName)) Then
  Set f1 = fso.CreateTextFile(FileName,True)
  f1.WriteLine sUser & "   " & sComputer
  f1.Close
  Set WshShell = Wscript.CreateObject("Wscript.Shell")
  argu = FileName & "/T/E/G" & sUser & ":f /R Everyone"
  WshShell.run("cacls " & argu)
  Set WshShell = Nothing
End If

Set f = fso.GetFile(Filename)
   intSizeB = f.Size
   if intsizeB=0 then
   alllog = ""
   lastlog = ""
   end if
   if intsizeB>0 then
    set f1=fso.OpenTextFile(Filename,1,True)
   alllog = f1.readall
    f1.close
    set f1=fso.OpenTextFile(Filename,1,True)
   lastlog = f1.readline
    f1.close
   end if



if 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.close
End If
end if
set f1=nothing
set fso=nothing
wscript.quit