博客统计信息

51cto博客之星
用户名:jrfly331
文章数:52
评论数:321
访问量:128696
无忧币:15845
博客积分:3285
博客等级:7
注册日期:2007-04-20

还原已删除的Active Directory对象之不完全攻略篇(中)
2010-04-18 02:11:47
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://mrfly.blog.51cto.com/151750/298444
Restore a Deleted Active Directory Object At a Domain Controller running Windows Server 2003
 
  时间到了现在的2010年,如果你的企业还在使用Windows Server 2003系统做为基础平台,套用一句广告词语,那确实是有些"Out"了.(画外音响起:"老兄,你知足吧,我们这儿还Windows 2000 with SP4呢",那我需要善意地提醒你,到7月份微软可就不再对2000提供技术支持啦).不过"Out"归"Out",域控制器上还要坚挺地run着Server 2003,我们的维护工作也还要和Server 2003一样坚挺着.
 
  话说资讯部门有几个长期坐在监控室里查看各台服务器状况的MM,同时也身兼着删除离职人员的域帐号及lotus notes邮件帐号的工作(很辛苦的,7X24小时轮流值班的).每天对着电脑屏幕久了,自然眼睛有些发花,这不,手一抖,就把一个离职员工的工号输错了,再一个确定,这位还在职同事的域账号就被"错杀"了.第二天一大早,叮叮零零的电话就找到资讯部工程师老冯(也就是本人^_^)头上了.
 
..."喂喂喂,是资讯部吗?我是财务部的XXX,我早上来了开了机输入帐号密码登录不进去啦?!我昨天用都还是好好的呢!"
..."那你机器上有弹出什么提示信息吗?"
..."说是系统无法让您登录,请确定您的用户名及域无误...balabalabala"
..."你密码有正确输入吗?前两天系统有提示你密码快到期吗?"老冯见过太多记不清密码或者密码过期导致的这个报错的情况了,所以下意识地这样问问.(域是正常的,因为部门的同事们都可以登录).
..."输入对了啊,我都敲了N遍了!"
......老冯心想,就算是你不想承认密码记不清楚了输错这么多遍想必帐号也被锁定了,先到域控上看一下吧.
 
  于是乎,老冯使用Dameware连接到域控制器上(一个单域两个域控,都run的是Windows Server 2003 with SP2,老冯也"out"着...T_T),打开"Active Directory用户和计算机"控制台,调出"查找用户,联系人及组"的搜索框,输入了来电员工的工号f6825091然后开始查找,结果返回的是"搜索不到相符的项目".
..."昨天还能用今天就用不了了..杯具了,难不成被人删掉了?"(域管理员可不止老冯一个.)
  联想到此,老冯不慌不忙地在域控上的"开始"--->"运行"里叫出好帮手"ldp.exe".
 
  这个"ldp.exe"工具是做什么用的呢?
  老冯这里可要站出来为这位好朋友好好宣传一下了.
  在我们把安装有Windows Server 2003 Standard/Enterprise系统(及其以上)的服务器提升为域控制器后,都会内置这个ldp.exe工具.它可以用于对任何像是Active Directory这样的LDAP目录进行连接、绑定、搜索、修改、添加和删除,而老冯最常用的就是拿它来查看存储在Active Directory中的对象等数据.
 
  在老冯叫出了ldp.exe的主程序窗口后,它需要先确认召唤它的主人的身份.点击Connection(连接),然后在下拉菜单中点击Bind(绑定),
clip_image002
  然后输入老冯自己的具有域管理员身份的帐号和密码还有要登录的域名,点击"OK".
clip_image004
  可以看到通过身份验证的提示和一大串别的信息.
clip_image006
  接着,下一步,老冯就要去找这(Active Directory)里面的一个叫做"Deleted Objects"的容器.
  这是什么东东?又是干啥用的?
  呵呵,各位看官莫急,且听老冯慢慢道来.
 
  其实,当我们在Active Directory中删除了一个对象时,它并没有立即就从活动目录数据库中被"人间蒸发"掉,而是会被打上一个"已删除"的标记并被挪到这个叫做"Deleted Objects"的隐藏容器中,这个过程也就是我们常说的逻辑删除.而这个墓碑对象真正被系统删除(物理删除)的时间在Windows Server 2003打上了SP2补丁以后默认为180天(这个时间也是可以由adsiedit.msc工具进行修改的).也就是说虽然我们于某时删除了这个活动目录对象后无法再使用或者说看见它,但它实际上还安安稳稳地躲在"Deleted Objects"容器中直至被删除时刻的180天后.那么我们的思路就很明确了,对于还在180天墓碑生存时间里的被删除对象,只要找到"Deleted Objects"容器,定位到被删除对象本身再设法去掉它的"已删除"标记然后抛回它原来的所在地(原来的OU)中就OK了.
 
  So,请接着和老冯一起往下拯救大兵XXX.
  上面已经提到了"Deleted Objects"是"隐藏Boss",所以需要多花点力气(步骤)才能find it.
  老冯继续操作ldp.exe, 在"Options"菜单中,单击“Controls”,展开"Load"下拉菜单,单击"Return deleted objects",然后"确定".
clip_image008
  又回到主画面,点击"View"--->"Tree",在BaseDN中输入DC=CONTOSO,DC=COM,点击"OK".
clip_image010
  在控制台树中双击根DN,终于可以看到CN=Deleted Objects,DC=contoso,DC=com容器了.
  而且令老冯眼前一亮的是,打电话的这个MM的域帐号果然也在此容器内.
clip_image012
  抓紧时间,用户等的有点不耐烦了.
  OK,接着在这个被删除对象上右键,选择"Modify".
clip_image014
  然后在弹出的对话框中依次执行:
1.在“Edit Entry Attributes”中输入 isDeleted
2.保留“Values”框为空值
3.在“Operation”下单击“Delete”,然后单击“Enter”
4.在“Edit Entry Attributes”中,输入 distinguishedName
5.在“Values”中,键入此 Active Directory 对象的原始DN(可分辨名称):CN=f6825091,OU=Finance,DC=contoso,DC=com
6.在“Operation”下单击“Replace”
7.选中“Extended”复选框,单击“Enter”,然后单击“Run”
clip_image016
  如果一切顺利,不会返回任何error信息.
  回到"Active Directory用户和计算机"控制台上点击进用户原来的OU,可以看到用户账号已经被还原回来了.
image
  但是,你会发现,除了被还原回来的账号处于禁用状态,其属性中还丢失了很多信息,例如,姓名,所属组等.这是设计使然.当活动目录对象被删除时,除了objectGUID属性等被保留,其他属性都会被剔除.如果我们想要修改墓碑对象中哪个属性会被保留,需要使用ADSIEDIT.MSC工具打开活动目录架构, 找到想要保留的每个属性(例如Address),设置对应的searchFlags属性值为 0x00000008。然而链接属性,就像组成员关系,即使设置也不能保留。所以被还原回来的用户帐号还需要手动再加一遍组成员关系等.
clip_image002[5]
  对于用户组,其恢复过程与用户相似,这里就不赘述了.
 
====================================================
  话说在老冯成功地使用ldp.exe工具轻松地还原了单个被删除的Active Directory对象后,给做在监控室里的小妹们发了封邮件友善地提示她们以后删除帐号要先看清楚再动手,小妹们谨记教诲,自此相安无事.
  又过了几日,坐在老冯旁边的新进工程师小周悄悄地凑过来问,"冯哥,我刚才一不小心在一个OU里删除了一票用户帐号".
  正在喝茶的老冯听罢差点没一口水喷在电脑屏幕上.
..."额,怎么这么不小心啊?"
..."不好意思啊哥,最近偷菜把手指功夫练的太灵活了,不小心就多点了那么几下..."
(^%/$%^*@%#!!@%~)
  老冯忙不迭地登到域控上一看,Oh my lady gaga plus Orz.市场部OU下原来大概有二,三十号人,现在就剩俩了.这要还用上回的还原方法(LDP.EXE)可就不灵了,不等你恢复好他们部门老大怕都早已一个电话打到自己老板那去啦.
  赶紧请出AdRestore.exe吧~(下载地址: http://live.sysinternals.com,下载成功后请将此程序拷贝入%windir%system32目录下)
  adrestore.exe使用起来很简单,命令提示符中键入adrestore回车,就可以看到被删除的活动目录对象信息,
clip_image002[7]
clip_image004[4]
然后使用adrestore -r 后面加想要被还原的对象的cn,回车
clip_image006[5]
会提示是否要还原选定对象,键入Y,再回车,
clip_image008[5]
被删除的用户也顺利恢复了.比起使用ldp.exe可真是大大节省了时间.
不过和ldp.exe一样,存在帐户属性信息丢失和所属组丢失的情况.
"好在这个OU里的帐户属性并不复杂,所属组也就一个,剩下的重复性工作就交给小周来完成吧,当给他一个教训也是一次锻炼机会吧~",老冯心中暗想...
 
                                                                                                            ...To  be continued
====================================================
Notes:本文部分参考<Windows Server 2008 Active Directory ResourceKit>一书
 

本文出自 “"take IT easy&qu..” 博客,请务必保留此出处http://mrfly.blog.51cto.com/151750/298444

分享至
更多
一键收藏,随时查看,分享好友!
0人
了这篇文章
类别:DirectorySrv技术圈()┆阅读()┆评论() ┆ 推送到技术圈返回首页

文章评论

 
2010-04-18 13:34:57
亮哥,小弟佩服的五体投地了~~~~
没想到这样也能玩啊~~~

2010-07-16 17:49:11
亮哥,请教一个问题。有两台域控制器,DC和BDC,在DC上做了系统状态备份后,不小心删除一个域账号,重启进入活动目录状态还原,还原后还需要增加这个域账号的版本号,不然账号恢复后与BDC同步后又会丢失。   而用adrestore还原这个账号,在DC和BDC中就会出现这个账号,不存在增加账号版本的问题,请问怎么解释?
博主回复:
2010-07-16 23:53:40
呵呵,其实说白了是两者操作的本质就不一样。
关键点在于adrestore是从Deleted Objects中将被删除对象还原回去的,说还原,不如说“修改”+“移动”更好理解,因为其实Deleted Objects也就是活动目录中的一个容器而已。使用adrestore相当于对一个帐号进行了某些属性的修改操作,例如去除掉isDeleted标记,恢复正常DN,然后再从一个容器(Deleted Objects)移动到另外一个容器(某个OU)中去。这些在活动目录看来和对一个普通帐号的普通操作没什么两样,USN也是会相应增加的。通过每一次USN的变化,我(做修改的域控)都一条一条地告诉着别人(复制伙伴)关于冯某某的最新消息,冯某某的电话变成多少啦,他的邮箱又变成多少啦,等等等等。
而授权还原是从一个早期的目录数据库中获得某些数据而重写进现在的目录数据库中,这其实更类似于“新增”的过程。他不是把这个用户信息由现有数据库中某处移动过来的,而是从另外一个数据库(你可以将备份的AD数据库看做是另外一个目录,完全没有问题)中copy新增进来的。就像我直接朝着别人喊某班新来了个冯某某,他的信息我来告诉你们。加一万号USN目的就是告诉别人(复制伙伴)我知道的关于冯某某的信息才是最新的,如果凑巧以前你们也知道他,那你们知道的都是过时的,都可以扔掉了。

2010-07-17 19:50:44
谢谢你的解答,明白了。这几天在读你的博客,技术阐述的很清楚,也很有深度。关于AD方面的知识我收获了很多,再次感谢。
博主回复:
2010-07-19 11:27:32
客气了,欢迎常来坐坐,有任何建议或是问题或是批评,都请不要客气,在这里留言或者发到论坛上都可以,谢谢~

 

发表评论            

【技术门诊】专家解析:软考重点难点及应试技巧
昵  称:
登录  快速注册
验证码:

请点击后输入验证码博客过2级,无需填写验证码

内  容: