如何重置被遗忘的域控制器(DC)管理员密码

忘记了DC的管理员密码怎么办?如果你没有别的管理员可以登录DC,那么可以用下面的方法,重置Build-in Domain Administrator的密码。

前提:
要重置Domain Admin密码,要同时具备以下条件:

  1. 可以物理访问DC的
  2. 知道Local Administrator的密码。这个密码实际上在你promote DC之前设置的WindowsLocal Admin密码。如果你不知道,可以使用ERD Commander之类的工具修复本地管理员密码
  3. 有Instsrv.exe和SrvAny.exe文件(这两个文件随2003 Resource Kit Tools一同发布,可以在这里下载

接下来开始恢复过程。

很多人认为Domain Controller是没有Local Admin的,其实不是这样的。Local Admin还是有的,只是在正常登录模式下,不能用于登录而已。而目录服务恢复模式(Directory Service Restore Mode)下,则可以使用Local的账户登录。

第1步,启动Windows 2003到目录服务恢复模式(Directory Service Restore Mode):启动时按F8,然后选择Directory Service Restore Mode。

第2步,当提示登录的时候,使用Local Admin登录(一般是Administrator)。

第3步:INSTSRV.exeSrvAny.exe文件复制到%SYSTEMDRIVE%\temp,为了方便使用,也为了防止权限的影响,也把%WINDIR%\System32\cmd.exe复制到这个目录中。保证3个文件在同一个目录中(如C:\temp)。目录的名字可以随便起,但后面用到的时候也要一致。

第4步:安装SRVANY服务。打开一个命令提示行(Start–>Run–>cmd.exe),输入:

  1. INSTSRV PassRecovery "C:\temp\srvany.exe"

其中PassRecovery是安装的服务的名称,可以随便起,但后面使用PassRecovery的时候,要和这里的一样;引号中的是服务的程序,要SRVANY.exe的全路径格式。

第5步:配置SRVANY的参数,在命令提示符中依次输入下面的命令:

  1. REG ADD HKLM\System\CurrentControlSet\Services\PassRecovery
  2. REG ADD HKLM\System\CurrentControlSet\Services\PassRecovery /v Application /t REG_SZ /v "C:\temp\cmd.exe"
  3. REG ADD HKLM\System\CurrentControlSet\Services\PassRecovery /v AppParameters /t REG_SZ /v "/k net user administrator 123456 /domain"

上面的123456就是Domain Administrator的新密码,如果DC启用了强密码,就换个强密码吧。

第6步:打开管理工具中的服务(services.msc)。双击PassRecovery的服务。做如下配置:

  1. 在General选项卡中,设置服务为自动启动(Startup type=automatic)
  2. 在Log on选项卡中,选中“Allow service to interact with desktop”(允许服务与桌面交互)

至此,密码恢复的配置就算结束了。以正常模式启动DC,然后等待登录界面的出现(这时SRVANY已经将密码修改为你设置的值了)。使用在上面(第5步)设置的新的密码登录DC。

收尾工作

密码已经恢复了,接下来的工作就是删除SRVANY服务。这一步一定要做。执行下面的命令:

  1. net stop PassRecovery
  2. sc delete PassRecovery
  3. rd /s C:\temp

搞定~~~

后记

可能这个方法对于重置Domain Admin密码是比较容易的,不免让人担心DC的安全性。不过想想也是Reasonable的,有能力物理访问DC的人,多少应该具备管理DC的资格吧。

Posted by Wei@4:14 8/08/2007 in Computer Science | Permalink | Trackback | No comments.

Vista的Symbolic Link

以前一直是只有Unix-like系统上面才有Symbol Link的概念。在Unix下,Symbol Link带来了无数的好处(当然也是有缺点的)。

简单的例子,假如你创建了一堆具有相对链接的东西(比如网站上面用的页面)。如果某个文件的位置发生了变化,你会如何操作?在以前的Windows中,就要逐一修改HTML页面,指向新的位置,却难免少改了一个两个文件的。而Symbol Link正好解决这样的问题。只需要在老的位置创建一个Symbol Link,这样所有指向老的link的地方,都会自动转到新的位置。

另一个例子,在编译程序的时候(尤其是你使用Make的时候),比如lib/dll/…之类的东西有版本的区别,Unxi一般是这样写的:libxxxx-1.0.0.so,libxxxx-1.0.1.so。如果在Make文件中直接指定这些文件,不仅在版本升级的时候改起来很麻烦,而且一旦少改了一个,很可能出现莫名其妙的错误。Symbol Link上~~~

Vista开始直接支持Symbol Link了(Dev Ref),你可以使用mklink(CLI APP)来创建Symbol Link。从GUI上看,Symbol Link就是表示为一个0字节的快捷方式。在CLI里面,面向目录的Symbol Link被表示为<JUNCTION>和<SYMLINKD>;而面向文件的,则被表示为<SYMLINK>;。mklink也支持Hard Link,创建的Hard Link直接表示为和target文件一样的一个新文件。

Symbol Link和Shortcut Link是不一样的,这里我举个我刚刚完成的例子:

例子1:

前提:我使用的虚拟机是Virtual Box。刚刚装好的时候,我创建了一个Ubuntu的虚拟机。硬盘文件达到了3.5GB,这时我希望把这个文件复制到别的盘,以便节省我的硬盘空间。(这个例子其实没有Symbol Link也是完全可以的)

如果没有Symbol Link,我会这样做:首先复制Ubuntu.vdi文件到新的地方,然后启动Virtual Box修改硬盘文件的位置。

而我现在是这样做的:复制Ubuntu.vdi到新的地方,然后用mklink创建一个Symbol Link。搞定,Virtual Box仍然没有任何的变化。

当然,我使用的这个例子,不用Symbol Link也不会增加多少麻烦,可如果真的是需要修改的内容很多,那么手工修改,自然就不太适合了。不过,在这个例子中,仍然有个局限。图中的F:\是我的一个USB移动硬盘。估计有人想到了:现在移动硬盘是F:\。如果我在接入这块移动硬盘前,先 插了一个其他的存储设备,占用了F:\。那么,在之前指向F:\的Symbol Link仍然是无效的。这只能怪该死的微软,非要用字母表示分区,还是动态的。如果向Unix那样,可以任意把不同的设备挂在指定的目录中,也就没有这个 事儿了。

例子2:

前提:Vista有个Public文件夹,用来存放和用户无关的照片、音乐等。而我把MP3都复制到了Public\Music文件夹中。之前的做法是,在%HOMEPATH%\Music下创建一个Shortcut link到%PUBLIC%\Music。

使用Symbol Link可以近乎完美的解决这个问题:删除%HOMEPATH%\Music文件夹,创建一个名为%HOMEPATH%\Music的JUNCTION,指向%PUBLIC%\Music文件夹。这样的结果就是,一步多于的操作都没有,就把Music重定向到Public了。开始菜单、Favorite Link,总之以前所有指向%HOMEPATH%\Music的地方,全都自动转向%PUBLIC%\Music了。 更关键的是,以后即便不希望这种重定向发生,需要做的也只是删除Symbol Link即可。

那么Hard Link和Symbol Link有什么区别呢?在Vista中,Symbol Link其实是创建了一个指向目标文件的索引,所以当Symbol Link指向的文件被删除时,访问Symbol Link就会出现File not found的错误(就好像是快捷方式指向的文件被删除了);而Hard Link则更像是文件的另一个名字(它们虽然同名,却存储在同一片磁盘空间中),创建一个Hard Link仅仅相当于给文件添加一个“别名”,而只有当所有的名字都被删除时,文件才会真正的删除。

举例来说,如果有文件Test.txt,创建一个名为TS的Symbol Link;当文件Test.txt被删除以后,再编辑TS的时候,就会得到一个“找不到文件”的错误。而同样是Test.txt,创建一个名为TH的Hard Link;当文件Test.txt被删除后,再编辑TH,仍然是可以的。因为此时TH仍然指向以前Test.txt的空间,而删除Test.txt,只是删除了存储Test.txt文本的一个别名而已,文件实际上并没有删掉。

那么似乎Hard Link更实用一些?其实不一定,就象之前所说的,Hard Link只是指向同一磁盘区域的一个“别名”,那就是说,如果Hard Link和目标文件不在同一个分区上,别名也就不复存在了。所以Hard Link和目标文件被要求放在同一磁盘分区中。显然,Symbol Link的适用范围更广一些。

Update Aug. 17th, 2007  23:03 PST:好像有个问题,%USERPROFILE%\Links是存放显示在Explorer左侧的Favorite Links的地方,但这里貌似不支持创建指向Symbol Link(或Junction)的快捷方式。

Posted by Wei@14:36 15/15/2007 in Computer Science | Permalink | Trackback | No comments.