无论是在51cto技术论坛还是在微软中文技术论坛,经常会看到的一个问题就是有一些系统工程师或者网管员不小心在域控制器上误删除了某某员工的域帐号,或者是一个用户组,更有甚者是一个OU.这个时候他们会很着急,因为直接影响到了用户的正常工作,比如无法再登录域了啊,无法访问文件服务器上的某个共享文件夹了啊,或者无法通过ISA代理服务器上网了啊等等等等,凡是涉及到身份验证和控制的地方都有可能出现问题.那么如何快速而有效地能对这些误删除的活动目录中的object(对象)进行恢复呢?本篇博文就为大家从简入深地介绍若干种还原它们的方法.

  在介绍如何还原已删除的AD对象之前,如果有看官朋友们是才接触活动目录和Windows域这一块的话,应该会说,我在域控制器上面按照被删掉的帐号名称再重新建立一个帐号不就好了吗?为什么还要费力气非得去还原呢?那我们就简单回顾一下为什么不能单纯依靠重建对象来解决问题.

  在Windows操作系统中(不管是如XP的Client级操作系统还是像Server 2003级的Server级操作系统),都存在一个叫"安全主体"的概念.什么是"安全主体"(Security Principals)呢?安全主体就是能够被授予权限去访问网络中的资源的对象.我们在域控制器打开"Active Directory用户和计算机"控制台看到的用户,组,计算机,都是安全主体.(工作组环境下的用户,组等也存在此概念,本篇我们主要讨论域环境下,所以工作组情况略过).并且每一个安全主体都会分配到一个唯一的"安全标示符"(Security Identifier).这个安全标示符(后面统一简称SID)就是我们在系统上和网络中配置对某某资源访问的最重要的组成成分.别看当我们要在一个共享文件夹上授予某个用户或者用户组访问权限的时候输入的是他的帐号显示名称,但在计算机系统看来,它只认这个账号对应的SID.所以就算你后面对这个用户帐号进行了重新命名,计算机系统眼里他还是他,他拥有的权限还是和改名前一样,不会发生变化.这很像现实中我们的身份证,不管我们后面是不是去公安局改了自己名字,我们的身份证号码始终还是那个全国唯一的不变的号码.也正如公民的身份证或者公司的工作证对于公民或者员工的意义一样,SID是否存在于某个资源的访问控制表项中也就成为了是否允许对应此SID的用户能否访问或者使用这个资源的基础条件.

  说了这么多有关SID的概念,让我们来看看系统中SID到底是个什么样的东西吧.

  有几个常用命令行工具可以帮助我们查看到用户/用户组的SID: whoami,psgetsid.

  这里我就用whoami命令行工具来演示.(另一个工具psgetsid是属于大名鼎鼎的Sysinternals工具集中的一个命令行工具,相对于whoami它的功能和参数要更多一些,有兴趣的朋友可以到: http://live.sysinternals.com/下载).Whoami默认已经内置在Windows Server2003及以上的服务器操作系统中.如果客户端是xp系统要用它的话,请找一台Windows Server 2003或者以上的操作系统,然后在它的%systemroot%\system32目录中将whoami.exe拷贝过来使用.

  在命令提示符中输入whoami /user可以看到当前登录用户(帐户名:lion,所属群组:MIS,所在OU:资讯部)的SID信息,

clip_image002

  使用/groups参数可以看到当前用户所属组的SID信息,

clip_image004

  可以看到contoso域内的lion此用户帐号的SID为: S-1-5-21-2438905098-247976533-3193303672-1127.它有什么含义呢?这里大概介绍一下.

  SID是由三个部分构成的:修订号等级(Revision Level),标示符机构(Identifier Authority),次级机构/相对标示符(Subauthority/Relative Identifier).

  SID遵循以下语法:S-R-I-S-S

  以域用户lion的SID为例,字母"S"打头表示这是一段关于SID的信息.后面紧跟的"1"则是表明现在的修订号等级是1,然后"5"和"2"1是表示标示符机构和次级机构.(事实上Windows操作系统中新创建的安全主体的SID都是以S-1-5-21开始的).而后的"2438905098"表示采自于域的次级机构(如果是工作组环境则是采自于本地计算机),再往后的"247976533-3193303672-1127"这三截数字则表示相对标示符了.相对标示符是由域中担任五种操作主机角色之一的RID角色的域控制器来控制和分配的.(如果你还不清楚什么是FSMO,什么又是RID,请参考yuelei老师的博文:http://yuelei.blog.51cto.com/202879/127848).RID也保证了在域内新建的每个安全主体会分配到独一无二的SID.

Lion's SID:

clip_image006

  诚如以上所介绍的,正是因为存在SID这么一个概念,我们在域内重建账号分配到的SID/RID肯定和之前被删除掉的安全主体的SID/RID不一样.这样就会造成身份验证发生状况导致一系列的问题.

  所以单纯依靠重建用户,用户组,计算机帐号等等是无法让已删除的这些对象获得真正重生的.我们必需依靠"还原"操作来拯救它们.

  How to? 我们在中篇正式开始介绍.

                                                                                                                                                                                                                                 ...To be continued

===================================================================================

Notes:本文部分参考<Windows Server 2008 Active Directory ResourceKit>一书