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

背景: 近年来,针对企业的勒索病毒攻击愈发猖獗。试想一下,如果核心的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彻底被清除

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

相关推荐
从此不归路5 分钟前
Qt5 进阶【9】模型-视图框架实战:从 TableView 到自定义模型的一整套落地方案
开发语言·c++·qt
人道领域16 分钟前
javaWeb从入门到进阶(SpringBoot基础案例2)
java·开发语言·mybatis
Stack Overflow?Tan9017 分钟前
c++constexpr
开发语言·c++
雨季66627 分钟前
Flutter 三端应用实战:OpenHarmony 简易数字累加器开发指南
开发语言·flutter·ui·ecmascript
码农水水29 分钟前
米哈游Java面试被问:Shenandoah GC的Brooks Pointer实现机制
java·开发语言·jvm·spring boot·redis·安全·面试
小程同学>o<31 分钟前
嵌入式之C/C++(二)内存
c语言·开发语言·c++·笔记·嵌入式软件·面试题库
程序员清洒34 分钟前
Flutter for OpenHarmony:Dialog 与 BottomSheet — 弹出式交互
开发语言·flutter·华为·交互·鸿蒙
cyforkk35 分钟前
07、Java 基础硬核复习:面向对象编程(进阶)的核心逻辑与面试考点
java·开发语言·面试
钱多多先森44 分钟前
【Dify】使用 python 调用 Dify 的 API 服务,查看“知识检索”返回内容,用于前端溯源展示
开发语言·前端·python·dify
qq_4171292544 分钟前
基于C++的区块链实现
开发语言·c++·算法