共计 7710 个字符,预计需要花费 20 分钟才能阅读完成。
在 Windows Server 系统中,一些服务必需要构建在域的环境中,这不仅是为了统一验证和资源共享,同时也是为了网络安全。为构建虚拟化测试,我们需要先搭建域环境。之前先来大概了解一下域。
在使用工作组时,计算机是相对独立的,工作组仅是网络中计算机分类的一种方式,在不在一个工作组中,对网络资源的访问影响并不大。工作组好比允许自由进出的免费停车场,加入工作组,好比你可以停在 A 区,也可以停在 B 区,如果停在 A 区,就与 A 区的其他汽车形成一个松散的组合。
在使用 Windows 域(Domain)时则不同,域是经过严格组织的,计算机加入域并且使用域账户登录才能访问某些共享资源。在域中至少有一台域控制器(Domain Controller, 简称 DC)负责计算机和用户的验证工作。域好比收费停车场,需要刷卡验证才能进出(可以有多于一个门禁,即 DC),但验证通过后即可使用里面的共享设施,甚至其他汽车。例如当你的计算机使用具有管理员权限的域账户成功登录后,就可以使用该域账户登录同域中其他计算机上 Sql Server,那么你可以不再使用 sa 账户了。当然加入域的计算机并不代表只能呆在域中,如果只是用本地账户而非域账户登录,计算机和在工作组中没有什么不同。一般情况下,你的汽车可以停在收费停车场,也可以停在免费停车场,除非对汽车做了特别的限制(使用组策略可以限制计算机只能使用域账号登录)。你的计算机只使用本地账号登录,要想访问其他计算机上 Sql Server,这时你无法使用 Windows Authentication,但依然可以使用 SQL Server Authentication,使用 sa 账户登录。
一、域测试网络
接下来我们在 Window Server 2012 中部署域,为以后需要,我们将连接域的网络称为管理网络,并以如下图参数配置网络。图中配置两个域控制器互为备份,虽然 windows server 2003 以后已经不再区分主域控和备份域控,但由于主机角色的客观存在,域控制器的作用还是有一定差别的,下文将讲述。
二、配置域控制器
Windows Server 上安装域控制器(Domain Controller, DC)是一件简单的事,但安装之前需要确认几件事:登陆账号是否拥有本地管理员权限,操作系统是否支持,TCP/IP 是否配置正确,磁盘是否有 NTFS 分区和充足的空间以存放 Active Directory(AD) 数据库,DNS 服务器是否支持等。另外最好预先修改计算机名称并重新启动,以免完成安装后再修改域控制器名称所带来的麻烦。
Windows Server 2008 及以后版本都可以以角色的方式安装 Active Directory 域服务(AD DS),并提升为域控制器。Windows Server 2008 中也可以直接在运行中使用 dcpromo 命令,进行 AD 域服务的安装和提升为域控制器。但 Server 2012 中 dcpromo 命令已经不被支持,所以在以角色的方式安装 AD 域服务后,可以在服务器管理界面上面的事件提示中找到提升为域控制器的链接。
关于具体安装域控制器的步骤不再赘述,网络中有很多网页已经对此进行了详细描述,但是关于域配置还需要深入了解下面的一些内容:
1、林(Forest)、域树(Tree)、域(Domain)和子域(Child Domain)
这些名词已经非常形象的解释了它们之间的关系,但还需说明的是:我们建立的第一个域是根域(Root Domain),于此同时也建立了第一个域树和第一个林,因而这个根域既是林根域也是树根域,因而在网络中建立全新的域时,其实就是建立一个新林,在配置域控的时候不要选错了。根域也是域,只是地位特殊,一个林中只有一个林根域,但可以有多个树根域。拥有共同命名空间的根域和子域构成域树,拥有不同命名空间的域树构成林。域树的名称与第一个域相同,林的名称与第一个域树相同,也与第一个域相同。因而域名称的选择是很重要的,搭建好域后修改域名称虽然可行,但是毕竟存在很大的风险。
如下图,我们根据 Assigning the Forest Root Domain Name 文章中的规则建立了两个林。如果你所在组织拥有两个通用域名,其中一个用于外部互联网,比如用于组织的网站首页,则另一个可以用于组织内部网络作为林的名称(即第一个域的名称),这样建立的林将和下图左侧的林 x.com 类似。如果只拥有一个通用域名,为了内外有别,可以建立一个二级域名用于内部网络作为林的名称,这样建立的林将和下图右侧的林 cloud.z.com 类似。使用通用域名的是为了方便林与林之间通过互联网建立信任关系,但如果在测试中可以使用任何符合域名规则的名称,我们的实验环境将使用 cloud.z.com 作为林名称。
2、DNS 服务器、全局编录服务器(GC)和只读域控制器(RODC)
配置域控过程中会遇到选择这几个选项:DNS 服务、全局编录服务器(GC)和只读域控制器(RODC)
- DNS 服务器即域名服务器。在域中计算机、集群等名称的解析,需要 DNS 服务的支持。建立域必须在域中提供 DNS 服务,如果在配置域过程中勾选 DNS 服务器,则本机将被配置为 DNS 服务器(配置程序会检测当前 DNS 基础结构来决定 DNS 服务是否默认勾选)。
- 全局编录服务器(Global Catalog, GC)可以理解为林中只读的全局缓存,缓存中存储了林中本域内的所有对象的所有属性和其他域的所有对象的部分属性。“全局编录使用户能够在林中的所有域上搜索目录信息,无论数据存储在什么位置。将以最大的速度和最低的网络流量在林中执行搜索。”如果在配置中勾选全局编录服务器,将会使这台域控制器同时成为全局编录服务器。
- 只读域控制器(Read Only Domain Controller, RODC)。“只读域控制器(RODC)是 Windows Server 2008 操作系统中的一种新类型的域控制器。借助 RODC,组织可以在无法保证物理安全性的位置中轻松部署域控制器。RODC 承载 Active Directory 域服务(AD DS)数据库的只读分区。”“物理安全性不足是考虑部署 RODC 的最常见原因。RODC 提供了一种在要求快速、可靠的身份验证服务但不能确保可写域控制器的物理安全性的位置中更安全地部署域控制器的方法。”
3、AD 数据库、日志文件和 SYSVOL 文件夹
Active Directory 使用文件型数据库,数据库引擎是基于 JET 开发的 Extensible Storage Engine(ESE),也叫做 JET Blue。JET Blue 计划用于升级 Access 的数据库引擎 JET Red 的,但却用于 Microsoft 的其他产品中,如 AD,WINS,Exchange Server 等。ESE 有能力扩展至 16TB 容量,容纳 10 亿对象。数据库所有相关文件默认在 %systemroot%\ntds\ 文件夹内,主要包括:
- ntds.dit 数据库文件。有兴趣可以查阅 Active Directory database file NTDS.DIT 详细了解。
- edb.chk 检查点文件。对数据库的增删改,在提交更新到数据库之前,检查点文件会记录事务完成情况,如果事务完成就从日志文件提交更新到数据库。
- edb.log 和 edbxxxxx.log 等为日志文件。每个日志文件 10MB,edb.log 文件填满之后,会被重新命名为 edbxxxxx.log,文件名编号自增。对数据库的增删改会写入日志文件,用以事务处理。
- edbresxxxxx.jrs 为日志保留文件。为日志文件占据磁盘空间,仅当日志文件所在的磁盘空间不足时使用。
- edbtmp.log 临时日志文件。当前 edb.log 被填满时,会创建 edbtmp.log 继续记录日志,同时当前 edb.log 被重命名为 edbxxxxx.log,而后 edbtmp.log 被重名为 edb.log。
Active Directory 使用 SYSVOL 文件夹(需要放置在 NTFS 分区中)在 DC 间共享公共文件,包括登录脚本和策略配置文件等。详细可参考 Sysvol and netlogon share importance in Active Directory
4、FSMO 主机角色
Active Directory 在多个域控制器(DC)间进行数据复制的时有两种模式:单主机复制模式(Single-Master Model)和多主机复制模式(Multi-Master Model)。
DC 间数据复制多采用的多主机复制模式,即允许在任意一台 DC 上更新数据,然后复制到其他 DC,当出现数据冲突时采用一些算法解决(如以最后被写入的数据为准)。多主机复制模式实现了 DC 间负载均衡和高可用的目的。但对一些数据多主机复制模式带来了难以解决的数据冲突或解决冲突需要付出太大代价的问题,这时 Active Directory 会采用单主机复制模式,即允许只有一台 DC 更新数据,然后复制到其他 DC。这些数据主要由 5 种操作主机角色来承担更新的职责,这些角色可以被分配到林中不同 DC 中,这些角色也称为灵活的单主机操作角色(Flexible Single Master Operation, FSMO),他们分别是:
林级别(在林中只能有一台 DC 拥有该角色):
- 架构主机(Schema Master):架构是林中所有对象和属性的定义,具有架构主机角色的域控制器(DC)才允许更新架构。架构更新会从架构主机复制到林中的其它域控制器中。整个林中只能有一个架构主机。
- 域命名主机(Domain Naming Master):具有域命名主机角色的域控制器才允许在林中新增和删除域或新增和删除域的外部引用。整个林中只能由一个域命名主机。
域级别(在域中只有一台 DC 拥有该角色):
- PDC 模拟器(PDC Emulator):Windows Server 2000 及以后版本中域控制器不再区分 PDC(Primary Domain Controller) 和 BDC(Backup Domain Controller),但为兼容旧系统和实现 PDC 上的一些功能,就需要 PDC 模拟器发挥作用了。这些包括:密码实时更新;域内时间同步;兼容旧有系统(如 NT4 和 Win98)等。
- RID 主机(RID Master):在 Windows 系统中,安全主体(如用户和用户组)的唯一标识取决于 SID(如用户名不同但是 SID 相同的用户 Windows 仍然认为是同一用户)。SID 由域 SID(同域内都一样)和 RID 组成。RID 主机的作用是负责为安全主体生成唯一的 RID。为避免安全主体 SID 重复,造成安全问题,RID 统一从 RID 主机分配的 RID 池中生成。
- 结构主机(Infrastructure Master):结构主机的作用是负责对跨域对象引用进行更新,以确保所有域间操作对象的一致性。在活动目录中有可能一些用户从一个 OU 转移到另外一个 OU,那么用户的 DN 名就发生变化,这时其它域对于这个用户引用也要发生变化。这种变化就是由基础结构主机来完成。如果架构主机与 GC 在同一台 DC 上,架构主机将不会更新任何对象,因为 GC 已经拥有所有对象和属性的拷贝。所以在多域情况下,建议不要将架构主机设为 GC。
5、功能级别
Active Directory 新建林时需要确定林和域的功能级别,功能级别决定了 Active Directory 域服务(AD DS)的功能,也决定了哪些 Windows Server 操作系统可以被林和域支持成为域控制器。Windows Server 在历次改版,也对 Active Directory 进行改进,形成了不同功能级别,更高的功能级别提供更多的功能,目前已有功能级别包括:Windows 2000 本机模式、Windows Server 2003、Windows Server 2008、Windows Server 2012 等。
运行 Windows Server 2008 的操作系统上可以设定林和域的功能级别为 Windows Server 2003,运行 Windows Server 2003 操作系统的服务器可以加入成为域控制器。但设定林和域的功能级别为 Windows Server 2008,运行 Windows Server 2003 操作系统的服务器将无法加入成为域控制器,但运行 Windows Server 2012 操作系统的服务器可以。
另外设定的功能级别可以升级不能降价,域功能级别不能低于林的功能级别。
6、域信任
域信任就是在域之间建立一种关系,使得一个域中的用户可以在另一个域的域控制器上进行验证,但建立信任仅仅是为实现跨域访问资源提供了可能,只有在资源上对用户进行了授权才能最终实现跨域访问。
域信任分为单向和双向,单向就是我信任你但是你不信任我或者反之,双向就是相互信任。另外域信任可配置为具有可传递,就是我信任你所信任的(第三方),可传递的信任省去了在复杂域环境中配置信任关系工作。
同一个林中父域和子域默认存在双向的可传递的信任。域树之间默认存在双向的可传递的信任(Tree Trust),两个不同域树中的域之间可以建立快捷信任(Shortcut Trust),以加快验证过程。不同林之间可以建立林信任(Forest Trust)。
与其他使用 Kerberos 做验证的目录系统可以建立领域信任(Realm Trust)。与较老的 NT4 系统可以建立外部信任(External Trust)。
7、站点
理论上 Windows 域与物理网络拓扑无关,域中多个域控制器只要满足能够相互通信的条件,可以在同一个子网,也可以分属不同子网;可以在同一个物理位置,也可以分别在不同的物理位置。但域控制器以及域中的计算机之间的通信最终受制于物理的网络拓扑,如域控制器之间的复制和账户验证等与物理位置关系密切。
站点可以看成是域中高速连接的一组计算机,按物理位置将域控制器和计算机部署在不同站点内,可以提高域内域控制器间复制和账户验证的效率。例如一个域中,北京站点有两个域控 A 和 B,上海站点有两个域控 C 和 D,他们之间的复制如果按照 BCDA 的顺序复制,那将是没有效率的。按 ABCD 顺序,同一个站点内的域控相互复制,站点间只要复制一次即可。
三、测试和维护域
1、修改域控制器计算机名
修改域控制器计算机名不能简单的打开计算机属性直接进行修改,涉及域内名称解析,修改不当可能会造成找不到域控制器的麻烦。建议升级为控制器前先修改计算机名并重启计算机,如的确需要修改域控制器计算机名可以使用 netdom 命令。在 Powershell 命令行提示符下:
# Show all computer names of a DC
netdowm computername dc02.cloud.z.com /enumerate
# Change computer name of a DC from dc02 to dc03
netdom computername dc02.cloud.z.com /add:dc03.cloud.z.com
netdom computername dc02.cloud.z.com /makeprimary: dc03.cloud.z.com
# Restart the computer
netdom computername dc03.cloud.z.com /remove:dc02.cloud.z.com
2、迁移 FSMO 角色
前文介绍了 AD 中 5 个 FSMO 角色,为在域中多个 DC 间合理部署这些角色,或者迁移 DC 时,我们需要考虑迁移 FSMO 角色。转移 FSMO 角色有两种方式,第一种通过 GUI:
Windows 2012 中在“服务器管理器”菜单“工具”中开“Active Directory 用户和计算机”。默认情况下已经连接到域,在域名上右键选择“操作主机”,这里可以迁移 RID、PDC 和结构主机。
在“Active Directory 域和信任关系”右键选择“操作主机”,这里可以迁移域命名主机。
在“Active Directory 架构”右键选择“操作主机”,这里可以迁移架构主机。但是“Active Directory 架构”不会出现在服务器管理器中,我们需要事先注册 regsvr32 schmmgmt.dll,然后再 mmc 控制台中通过菜单“文件”添加“Active Directory 架构”管理单元,而后进行后续的管理。
第二种使用 ntdsutil 命令,过程中可以输入“?”以查询帮助:
# Show FSMO roles
netdom query fsmo
# Move FSMO roles from dc01 to dc03
ntdsutil
roles
connections
connect to server dc03.cloud.z.com
quit
transfer schema master
transfer naming master
transfer infrastructure master
transfer pdc
transfer rid master
quit
quit
3、清理 AD 元数据
当 DC 降级后,需要手动清除它在 AD 中的信息,可以使用 utdsutil 命令:
# Remove metadata of a DC that need to be deleted
ntdsutil
metadata cleanup
connections
connect to server dc03.cloud.z.com
quit
select operation target
list site
select domain 0
list domains
select domain 0
list severs for domain in site
# Select the DC that need to be deleted
select server 0
remove select server
quit
quit
4、迁移域控制器
从 dc01 到 dc03 迁移域控制主要包含以下几个步骤:
- 提升 dc03 为域控制器(WS2012 以前使用命令 dcpromo),全局编录、DNS 服务器选择与 dc01 一致。
- 如果 dc01 是 DNS 服务器,配置 dc03 网络 DNS 服务器地址指向 dc01,等待 dc03 和 dc01 上的 DNS 数据同步。
- 在 dc01 上迁移 FSMO 角色至 dc03。
- 降级 dc01(WS2012 以前使用命令 dcpromo /forcemoval),在服务器管理器中删除 AD DS 角色将提示降级域控制器。
- 清理 DNS 记录,使用 ntdsutil 清理 dc01 的 AD 元数据。
5、其他维护工具
ntdsutil.exe。ntdsutil.exe 是一个命令行工具,提供对 Active Directory 域服务(AD DS)和 Active Directory 轻量目录服务(AD LDS)的管理功能。可以使用 ntdsutil 命令执行 AD DS 数据库维护、管理和控制 FSMO 角色以及删除没有被正确卸载的域控制器的元数据。
netdom.exe。
dcdiag.exe。
adsiedit.msc。adsiedit 用于编辑 Active Directory 中的单个对象或少量对象。在 WS2012 服务器管理器中的 AD DS 服务器右键菜单可以找到。
ldp.exe。ldp.exe 用于管理 Active Directory 轻型目录服务 (AD LDS)
replmon.exe。
repadmin.exe。