细说LastLogonTimeStamp
微软在Windows Server 2003中引入了LastLogonTimeStamp属性。管理员们可以利用这个属性查看用户或者计算机最近是否登录过域。根据这些信息,管理员可以对长时间没有登录的账户采取相应的措施。
有人就会问了,不是有LastLogon这个属性吗,为什么还要引入LastLogonTimeStamp这个属性呢?这个问题问得好,那么我先来解释一下这两个属性的区别吧。
LastLogon是记录某个账户上一次在该域控制器认证的时间。该属性是不会在域控制器之间复制的。所以,要是以前需要确定账户最后一次登录域的时间,必须查看所有域控制器上的LastLogon,最大的那个值就代表了账户最后一次登录域的时间。LastLogon只会记录交互式登录,Kerberos验证的用户。
LastLogonTimeStamp的值会在所有域控制器间复制。所以管理员只要从一个域控制器上就能得到用户上次登录的信息。不过,LastLogonTimeStamp的值并不一定代表真实的最后一次登录域的时间。它是根据一个更新间隔来更新的(注意:要启用这个属性,域功能级别必须是Windows Server 2003喔)。LastLogonTimeStamp会记录交互式登录,Kerberos和NTLM验证的用户。
这时候有人又会问了,LastLogonTimeStamp既然不一定代表真实的最后一次登录域的时间,那么干嘛要引入呢?作者也有过类似的疑问。不过后面想想,觉得也合情合理。因为管理员利用该值对长时间没有登录的账号进行管理,那么该值只要能反映出账号长时间没有登录这个信息就好了。所以,在合适的更新间隔情况下,LastLogonTimeStamp就能反映出长时间没有登录这个信息,同时减少了AD复制流量,减轻了网络负担,何乐而不为呢?
好吧,你肯定又想知道这个更新间隔是怎么回事了。待我慢慢道来。
基本更新间隔是由msDS-LogonTimeSyncInterval这个属性定义的。默认是14天。该基本更新间隔可以在域的属性中设置,范围为1到100,000天。同时还有一个窗口(Window)以及一个随机参数(Parameter)用来调节整个更新间隔,避免LastLogonTimeStamp的值在同一个时间更新。窗口的默认值为5天,随机参数为一个百分比。真正的更新间隔Actual_Interval计算公式如下:
Actual_Interval = msDS-LogonTimeSyncInterval – Window * Parameter
举例说明:假如一个用户的LastLogonTimeStamp为2011/09/01,该用户在2011/09/10再次登录域。msDS-LogonTimeSyncInterval为14,Window为5,Parameter为80%。所以真正的更新间隔Actual_Interval为14 – 5 * 0.8 = 10。这时候由于没有满足更新条件,所以LastLogonTimeStamp不更新。请注意,用户登录后,在提供认证服务的域控制器上,LastLogon更新为2011/09/10。假如该用户在2011/09/11再次登录,这时候LastLogonTimeStamp就会更新为2011/09/11,并在域控制器之间进行复制。
刚好在作者的虚机里有这样的例子,那么我们根据图来看看这个LastLogonTimeStamp的更新吧。为了在Active Directory Users and Computer中的账户属性中看到这个属性,作者安装了AcctInfo2.dll。作者的虚机环境:两台域控制器在线(系统为Windows Server 2003 SP1),win2003AD和win2k3DC2;一台客户端win2k3ClientXP(系统为Windows XP)。
如下图XPClient用户登录前,在Win2003AD机器上,LastLogonTimeStamp为2011/08/31,而LastLogon为2011/09/13,这个间隔已经超过了更新间隔,所以假如XPClient登录,LastLogonTimeStamp必然会更新。
XPClient从win2k3ClientXP客户端登录之后,在Win2003AD机器上的LastLogonTimeStamp已经改变,如下图XPClient用户登录后所示。
细心的读者你肯定已经发现问题了吧,对的,两个图的LastLogon是一样的,这是为什么呢?原因就是,当前环境中有两台域控制器,而用户登录时联系的域控制器不是Win2003AD而是Win2k3DC2,所以LastLogon最新的数据会出现在Win2k3DC2上,如下图Win2k3DC2上XPClient信息。从这个图也可以看出,LastLogonTimeStamp已经通过AD复制同步了所有域控制器上的数据。
好了,今天的分享就到这里吧,相信通过上面详细的介绍之后,大家已经对LastLogonTimeStamp很了解了吧。
谢谢,
屈贝伟 | 企业平台支持部AD技术工程师 | 微软亚太区全球技术支持中心
本博文仅供参考,微软公司对其内容不作任何责任担保或权利赋予。