在Windows Server系统中,一些服务必需要构建在域的环境中,这不仅是为了统一验证和资源共享,同时也是为了网络安全。为构建虚拟化测试,我们需要先搭建域环境。之前先来了解一下域。
在使用工作组时,计算机是相对独立的,工作组仅是网络中计算机分类的一种方式,在不在一个工作组中,对网络资源的访问影响并不大。工作组好比允许*进出的公共停车场,你可以停在A区,也可以停在B区。如果停在A区,就与A区的其他汽车形成一个松散的组合。
在使用Windows域(Domain)时则不同,域是经过严格组织的,计算机加入域并且使用域账户登录才能访问某些共享资源。在域中至少有一台域控制器(Domain Controller, 简称DC)负责计算机和用户的验证工作。域好比私人停车场,需要刷卡验证才能进出(可以有多于一个门禁),但验证通过后即可使用里面的共享设施,甚至其他汽车。例如当你的计算机使用具有管理员权限的域账户成功登录后,就可以使用该域账户登录同域中其他计算机上Sql Server,那么你可以不再使用sa账户了。当然加入域的计算机并不代表只能呆在域中,如果只是用本地账户而非域账户登录,计算机和在工作组中没有什么不同。你的汽车可以停在私人停车场,也可以停在公共停车场,除非对汽车做了特别的限制。你的计算机只使用本地账号登录,要想访问其他计算机上Sql Server,这时你无法使用Windows Authentication,但依然可以使用SQL Server Authentication,使用sa账户登录。
一、域测试网络
接下来我们在Window Server中部署域,为以后需要,我们将连接域的网络称为管理网络,并以如下图参数配置网络。
二、配置域控制器
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操作系统的服务器可以。
另外设定的功能级别可以升级不能降价,域功能级别不能低于林的功能级别。
三、测试和维护域
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角色以及删除没有被正确卸载的域控制器的元数据。
adsiedit.msc。adsiedit用于编辑 Active Directory 中的单个对象或少量对象。在WS2012服务器管理器中的AD DS服务器右键菜单可以找到。
ldp.exe。ldp.exe用于管理 Active Directory 轻型目录服务 (AD LDS)