域控宕机!如何强制夺取五大角色恢复业务?

背景: 近年来,针对企业的勒索病毒攻击愈发猖獗。试想一下,如果核心的Active Directory(AD)域控制器被勒索加密或硬件损坏无法启动,导致全公司认证瘫痪,作为安全/运维人员,该如何快速救火?

在多域控环境下,当主域控彻底故障且无法恢复时,我们不能坐以待毙。本文将手把手教你如何在辅助域控上强制夺取AD域五大操作主机角色(FSMO),并彻底清除故障残留,确保业务连续性。

1. 实验环境拓扑

为了还原真实场景,我们搭建了如下模拟环境:

  • DC01 (故障机)

    • 操作系统:Windows Server 2022

    • IP地址:192.168.232.100

    • 状态:原五大角色持有者,模拟断电/系统崩溃,彻底离线

  • DC02 (救援机)

    • 操作系统:Windows Server 2022

    • IP地址:192.168.232.101

    • 状态:正常运行,准备接管角色

  • Client01 (业务终端)

    • 操作系统:Windows 10 Pro

    • IP地址:192.168.232.200

    • 作用:模拟域内普通用户,验证故障期间及恢复后的业务可用性

高危警告: "强制夺取"仅适用于原FSMO角色持有者彻底损坏且永远不会再上线的情况。 如果原DC01后续可能恢复,请尽量使用"平滑迁移"而非"强制夺取"。若原DC01被强制夺权后又重新联网,可能会导致USN回滚等严重数据灾难!

2.为什么要关注五大角色?

当域环境中存在多个域控时,各个域控信息同步,互为备份,上面存储的域内信息都是一样的,既然域控制器存储的信息都是一样的,那么域控损坏是不是可以直接不管放弃呢?答案是并不是,域控服务器作用不取决于它是网络中的第几台域控制器,而取决于FSMO五种角色在网络中的分布情况,FSMO的五种角色,想必都或多或少有一些了解,简单说一下5个操作主机的概念:

架构主机 (Schema Master)

同一个时间内,整个林中只能有一台架构主机,负责更新活动目录架构(如添加新对象类型或属性),若该主机故障,将影响新软件安装等需要修改架构的操作

域命名主机 (Domain Naming Master)

同一个时间内,整个林中只能有一台域命名主机,管理域的创建、删除及重命名操作。缺失时无法新增或删除域

PDC (PDC Emulator)

每一个域内只能有一台域控制器扮演PDC主机的角色,处理旧版客户端兼容、时间同步、密码验证及组策略更新。域内所有DC需同步其时间设置,缺失可能导致时间同步问题。

RID池管理器(RID Master)

每一个域内只能有一台域控制器扮演RID主机的角色。分配全局唯一标识符的局部部分(Relative ID),故障时无法创建新安全主体(如用户/计算机账户)

基础结构主机 (Infrastructure Master)

维护跨域对象引用的一致性,确保用户/组信息在多个域中同步。缺失会导致域间引用错误。如果所有域控制器同时都是全局编录,则由哪台域控扮演都无所谓

3.实战:强制夺取五大角色

3.1 确认故障与环境

如果五个操作主机都在正常的域控制器中,直接进行清除故障主机即可

现在的DC01是这个新林中第一台域控制器,默认所有的操作主机都在这一台上面。

关闭DC01,模拟DC01无法启动

登录DC02,确认主机角色,确认DC01不可达

3.2 启动 ntdsutil 工具

一般强制占用顺序为:架构主机、域命名主机、PDC主机、RID主机、结构主机;注意当前域控的首选DNS一定要指向自己。不建议使用127.0.0.1,故障主机建议直接关机或者断网

管理员身份运行 PowerShell 或 CMD,输入以下命令进入交互模式

复制代码
ntdsutil
Roles
Connections
Connect to server <当前域控服务器完整名字>
Quit

3.3 执行强制夺取命令

依次执行以下5条命令。 注意: 每输入一条,系统会尝试先安全转移,发现连不上DC01后,会弹出确认框,直接点**【是】**进行强制夺取。

3.3.1 占用架构主机:seize schema master

选择"是",每次运行强制占用都会先尝试安全转移主机角色,失败报错后会进行强制占用角色。

3.3.2 占用域命名主机:seize naming master

选择"是"

3.3.3 占用PDC主机:seize pdc

选择"是"

3.3.4 占用RID主机:seize rid master

选择"是"

3.3.5 占用基础结构主机:seize infrastructure master

选择"是"

3.3.6 验证结果

输入 quit 退出到CMD界面,运行以下命令查询当前角色持有者

如果显示的都是 DC02,恭喜你,夺权成功!

3.4 清除故障主机的记录

夺权虽成功,但AD数据库里还有DC01的"幽灵记录",必须彻底清除,否则日志会一直报错。

使用 ntdsutil 清除元数据

继续以管理员身份运行 PowerShell

复制代码
  ntdsutil
  Metadata cleanup
  Connections
  Connect to server <当前域控服务器完整名字>
  Quit

接下来选择要删除的目标(请根据你的实际编号选择)

复制代码
select operation target
list domains
select domain <编号>    # 选择故障DC所在的域
list sites
select site <编号>      # 选择故障DC所在的站点
list servers in site
select server <编号>    # 选择故障DC

最后执行删除

复制代码
quit                      #返回上一层
remove selected server    #删除故障机器

系统会弹出确认对话框,确认无误后点击确定。

这是最后一步大扫除

3.4.1 去Active Directory 站点和服务删除DC01的残余记录

打开 Active Directory 站点和服务,找到 DC01,右键删除。

3.4.2 去DNS管理中删除

打开 DNS管理器,检查正向查找区域、_msdcs 等区域,删除所有与 DC01 相关的 A记录、NS记录和 SRV记录。

至此,DC01彻底被清除

通过以上步骤,我们成功在单台域控故障的情况下,保住了域环境的完整性。

相关推荐
2401_87690752几秒前
USB TYPE-C 公头连接器设计规范总结:提升可靠性、降本增效的关键指南
c语言·开发语言·设计规范
额呃呃5 分钟前
std::allocator<T>::destroy
开发语言
期待のcode9 分钟前
Java虚拟机栈
java·开发语言·jvm
iso少年41 分钟前
Go 语言并发编程核心与用法
开发语言·后端·golang
故事不长丨1 小时前
C#字典(Dictionary)全面解析:从基础用法到实战优化
开发语言·c#·wpf·哈希算法·字典·dictionary·键值对
Sun_小杰杰哇1 小时前
Dayjs常用操作使用
开发语言·前端·javascript·typescript·vue·reactjs·anti-design-vue
雒珣1 小时前
Qt简单任务的多线程操作(无需创建类)
开发语言·qt
泡泡以安1 小时前
【爬虫教程】第7章:现代浏览器渲染引擎原理(Chromium/V8)
java·开发语言·爬虫
亮子AI1 小时前
【Python】比较两个cli库:Click vs Typer
开发语言·python
月明长歌1 小时前
Java进程与线程的区别以及线程状态总结
java·开发语言