活动目录
Active Directory(简称AD。中国大陆译名为“活动目录”,台湾与香港维持英文不译)是微软Windows Server中,负责架构中大型网络环境的集中式目录管理服务(Directory Services),在Windows 2000 Server开始内建于Windows Server产品中,它处理在组织中的网络物件,物件可以是用户、组群、电脑、域控制器、邮件、配置文件、组织单元、树系等等,只要是在活动目录结构定义档(schema)中定义的物件,就可以存储在活动目录资料档中,并利用活动目录 Service Interface来存取,实际上,许多活动目录的管理工具都是利用这个接口来调用并使用活动目录的资料。
活动目录也被做为微软部分伺服器软件与域构连的数据结构,例如Microsoft Exchange Server 2003-2007,均使用AD来存储其个人信箱资料(透过创建新的活动目录 Schema),并将AD列为建置Exchange Server的必要条件。
活动目录最早在1996年出现,并在Windows 2000中首次问世,研发代号为Cascade,并历经Windows 2000、Windows Server 2003的演化,目前AD已成为成熟的目录服务组件,在Windows Server 2008中,AD更扩展其角色至五种服务(包含证书、联合、权限管控与轻量级服务等)。
目录结构
活动目录(AD)以树状的数据结构来组成网络服务的资讯,在简单的网络环境中(例如小公司),通常域都只有一个,在中型或大型的网络中,域可能会有很多个,或是和其他公司或组织的AD相互链接(此链接称为信任关系,于后面帮助)。
物件
活动目录的最小存储单元为物件(object),每个物件均有自己的schema属性,可以存储不同的资料,像是用户、组群、电脑、信箱或其他的基本物件等。
一个AD域底下的基本物件,有以下几种
- Domain Controllers,存储域所属的域控制站(简称DC、域控)。
- Computers,存储加入域的电脑物件。
- Builtin,存储内建的账户组群。
- Users,存储AD中的用户物件。
若公司需要以不同的组织结构来管理公司的账户,则可以在AD中创建一个或多个组织单元(Organization Unit,简称OU),组织单元是一个具有收纳能力的活动目录物件(其在ADSI中是IADsContainer接口),可以在OU之中存放AD的物件,包括用户,组群,电脑等,让组织结构在AD中可以被真实的反映出来,而且也方便AD中的另一个功能——组策略(Group Policy)的应用与集中管理。
树系与多域
若组织的网络环境相当庞大与复杂时,域可能会有许多个,在AD之中,域可以有一个或多个,而一个大型公司可能会利用分公司或是办公室的方式来组织域物件,如此一来,在AD中会有数个域,若需要在域中共享资料或是做委派管理与配置设置时,便需要创建彼此间的组织关系,微软将AD中多域相互的关系层次结构化,称为域树(domain tree),域树结构以DNS识别方式来区分,例如一间公司可能有业务部门,工程部门与管理部门,那么若要以部门来创建域时,则可以如此创建(如右图):
- acme.com.tw:根域。
- sales.acme.com.tw:业务部门。
- engineering.acme.com.tw:工程部门。
- admin.acme.com.tw:管理部门。
如此便可在AD中反映出组织的结构,同样的,域内还是可以再创建不同的域,例如在工程部门中若需要分为软件部门与硬件部门时,还可以在工程部门的域中创建:
- software.engineering.acme.com.tw:软件部门的域。
- hardware.engineering.acme.com.tw:硬件部门的域。
而软件部门和硬件部门的设置,会自动的继承工程部门域中的组策略设置,而在软件部门的配置,则不会影响到硬件部门(可经过设置来应用)。
森林
在多个域的环境下,可能在不同的域之间会需要交换与共享资料,像是配置设置、用户账户与组策略设置等,在这个时候需要有一个角色来做为不同域间的资讯交换角色,同时又必须要符合AD树状结构的规范,因此微软在多域之间创建了一个中介用的角色,称为森林(Forest),一个组织中最多只能有一个Forest,在Forest下则是各自的域树系,而在Forest下的域或域树系间,可以共享资讯。
实体结构
活动目录背后,则是一个植基于Windows Server网络基础结构(infrastructure)的网络服务与通讯方式所组成,这些网络服务和通讯方式让活动目录具有高度的扩展性与向后兼容性等,网络管理人员必须要妥适的设置与监控这些网络服务与通讯方式,以让活动目录能够正常且顺利的运作。
在以往的Windows NT域环境中,域的实体结构分为三种角色,即主要域控制站(Primary Domain Controller, PDC)、备份域控制站(Backup Domain Controller, BDC)以及成员伺服器(Member Server)三种,域的资料都存储在PDC和BDC中,并且在PDC和BDC间交换资料,但PDC和BDC的部署方式并不方便(一个域只能有一个PDC),在不同的地理环境中也不能设置PDC,而且所有域的查询都会被导向PDC,如此很容易造成域登录和存取的塞车情况,这个问题在活动目录中已获得改善,即不再有BDC(只有DC和Member Server两种角色),在域中的任何一台域控制站都可以负责处理来自客户端的域查询,如此在分散部署上会具有相当的弹性。
Global Catalog
在AD的实体结构中,最重要的角色非Global Catalog[1](全局目录,简称GC)莫属,它存储了最完整的活动目录的结构资料,也是以目录为主(directory-enabled)的应用程式对AD的查询的主要标的,而通常在不同的地理位置(例如在中国大陆、台湾、美国和英国各有分公司,且各有域)时,GC扮演了重要的缓存结构角色,若台湾的员工出差到英国分公司,并试图登录域时,Windows会先搜索最近的Global Catalog Server(由DNS设置提供),若找不到时,才会链接到其他地区的GC,但若分公司的网络很慢时,这种跨地理位置的AD资料存取会直接影响到登录的时间,因此谨慎的GC的布署对AD的推行是很重要的。
Operation Masters
营运主机(Operation Masters,又称为Flexible Single Master Operation,即FSMO)[2]是被设置为担任提供特定角色资讯的域控制站,在每一个活动目录域中,至少会存在三种营运主机的角色。
- Primary Domain Controller Emulator Master:设置作为这个角色的域控制站,可以被目前仍存在域中的Windows NT Backup Domain Controller(备份域控制站)当做Primary Domain Controller (主要域控制站)来调用使用,同时它也是树系中提供Windows Time Service时间同步的主机。
- RID Master:在域控制站中会存储AD物件的relative ID(关系标识符),可分散以RID为主的查询的流量。
- Infrastructure Master:负责处理对目前域的物件参考,以及对应其他域的物件参考,并可负责处理针对AD物件的变更(例如删除与更名)。
另外还有两种角色,是具有额外功能,但不强制部署在域的:
- Schema Master:负责处理域中所有针对物件结构的变更。
- Domain Naming Master:负责处理域中的目录分割以及应用目录分割的工作。
Site
活动目录站台(site),是指一个实体的网络位置,在一个站台中可能会有很多个域控制站,AD域资料的复制,就是以站台为主,实际处理复制作业的工具称为KCC(Knowledge Consistency Checker,知识一致性检查器),它会在特定时间对站台设置中的域进行资料的同步化,复制活动则分为对内复制(intra-site replication)与对外复制(或站间复制,inter-site replication),对内复制是同一个域间的控制站交换资讯,对外复制则是在网络管理人员的设置下,透过指定的通讯方法(IP或SMTP)以及拓朴进行复制。
默认情况下,站台的通讯方式是使用IP(即RPC over IP)来通讯,这个方式是最快的,且可以利用TCP/IP来执行远程调用以及处理,但若是非域资料(架构、设置和通用类别目录更新,亦即没有AD物件)的复制,则可以利用SMTP通讯方法,但这个方法需要另外创建企业级的证书服务才可以使用,目的是确保SMTP的资料可以被确认与保全。
在中大型的网络环境中,适当的分散网络流量以及设计网络拓朴是很重要的事,KCC会利用设置好的网络通讯成本(cost)来选择要用哪一条网络来进行复制,例如可能公司和办公室间有一条T1和ISDN 64Kbps的线路,而T1的成本设为500(因为会有很大流量),而ISDN只有100时,KCC会选择ISDN做复制,这样代表网络管理员可以自己决定要使用哪一条网络来进行复制,KCC的复制算法会判断哪一个网络最适合复制AD的资料。除了成本以外,AD也支持了桥接站台(site bridge)的结构,站台桥接能力让复制的成本得以分散,并可让同一台GC的复制流量分散,也适合在不同地理区域之间的AD资讯复制与散发工作。
DNS
活动目录极度依赖DNS,因为DNS可以让AD表现出层次结构化的树状结构,同时也可以和开放的目录标准接轨,因此在建置域时,DNS服务(或另有架设DNS Server)一定要存在于网络或该域控制站中,AD以SRV记录(SRV Record)来识别域控制站,以提供域处理的服务,而和Windows NT域不同的是,Windows NT使用的是NetBIOS通讯协议,但AD使用的则是TCP/IP,但AD仍然提供可以在Windows NT账户格式(DOMAIN\User)和AD账户格式(user@domain)的格式互转。
实体存储
活动目录使用强化过的Microsoft Jet Database Engine(基于Microsoft Jet Blue项目),即Extensible Storage Engine(ESE98),可存储16TB的资料量,理论上可容纳十亿个域物件,文件名称为NTDS.dit,它存储在%system_root%\NTDS目录中(这个目录所在的磁碟也必须要是NTFS格式),内含了物件资料表以及链接资料表,在Windows Server 2003中加入了一个描述安全资讯的新资料表。
而在AD更新资料时的记录,都被存储在edb*.log,默认的名称为edb.log,其他的文件使用"edb" +数字 + ".log"来记录,另搭配了edb.chk作为检查点记录档,以及Res1.log和Res2.log作为系统的保留文件。
AD实体存储的组件有[3]:
- 上层接口(interface):作为目录服务客户端或目录服务中的其他伺服器的连接接口,像是LDAP、REPL、MAPI与SAM等。
- 目录服务代理人(Directory Service Agent):实现于NTDSA.DLL,负责接收与处理来自客户端的要求或其他伺服器的要求(例如KCC的要求)。
- 数据库存取层:内含于ntdsa.dll中,负责直接存取数据库。
- 延伸存储引擎(Extensible Storage Engine):负责处理数据库与其名称(DN)的记录对应。
- 数据库文件:即NTDS.dit,以及负责处理未认可交易的记录档。
域控制站会定时(默认为12小时)对NTDS.dit做重组(defragment),并清除资料档中的垃圾,在重组前会检查磁碟空间是否有大于数据库文件1.5倍的空间可用。若数据库所在的目录没有足够的可用空间,就要把数据库移往其他地方去。然而,由于Windows 2000与Windows Server 2003在卷影复制服务(VSS)的机制有所不同,使这移动过程有可能失败。对于Windows 2000,log files与数据库可以分别存放在不同的磁碟上,但Windows Server 2003则必须放在同一个磁碟上。要移动数据库,必须重启伺服器,并进入活动目录 Restore Mode里,利用ntdsutil工具进行移动。
只读域控制站
在Windows Server 2008中,加入了一个新的域控制站角色,称为只读型域控制站(Read-Only Domain Controller,简称RODC),RODC可以作为组织的分部、分公司、办公室或是临时单位等,将域控制站放在该处时会有安全性疑虑或风险时使用,顾名思义,RODC不会写入任何资料到活动目录,与其他域的复写也是有限度的,并且只会以系统管理员定义的Password Replication Policy(密码复制原则)控制下的账户才会缓存密码等功能。
若要在AD中加入只读域控制站,则域的功能层级必须要在Windows Server 2003以上。
安全性
活动目录的安全性可分为物件的安全性识别、层次结构的安全性以及森林之间的信任关系等。
安全性识别
AD以Kerberos V5作为其安全验证的主要架构,并且每个AD物件都拥有一个独一无二的安全性标识符(Security Identifier,SID),其格式示例为S-1-5-21-7623811015-3361044348-030300820-1013,每组代码均有其意义,这组标识符存储在AD的objectSid属性中。
层次结构的安全性
在AD中,不同层次结构的OU可以定义不同的安全性资讯,以及不同的用户权限,而不同的域层次结构之间也可以定义不同的用户权限,管理员也可以利用安全性管理模板(Secutiy Template)来定义不同的安全性资讯,或者使用组策略(Group Policy)来定义,在大型网络之中,使用组策略会比安全性模板要来的方便,将两者合并使用更可达到事半功倍之效(例如和Microsoft Base Security Analyzer的集成)。
在父层次结构定义的安全性,可以被继承至子层次结构。
信任关系
在大型的网络环境中,可能组织间有伙伴关系,或者是项目间的合作,而需要在两个Forest间共享或授权存取时,可以利用信任关系(trust relationship)来创建Forest间的信任,以授权在彼此树系间的存取权,在Windows Server 2003以后版本的AD环境可支持四种信任关系:
- 快捷方式式信任(shortcut trust),此为加速验证流程所设计的信任法,在多层次的域中,用户只要连接到最近的域即可登录,无需要将消息转到授权的根服器。
- 外部式信任(external trust),此为跨森林的授权方法。
- 领域式信任(realm trust),作为与非Kerberos验证的LDAP目录服务与Windows域的信任模式。
- 森林式信任(forest trust),此为强化型的外部式信任法,可以经由一个中介的森林信任来获取信任关系,例如acme.com.tw信任aspvendor.com,而contoso.com.tw也信任aspvendor.com,则acme.com.tw可以获取和contoso.com.tw的信任关系。
信任关系的设置可以分为单向(one-way)和双向(two-way)两种,单向信任表示被信任的一方可以存取信任的一方的资源,而双向信任则是可以存取各自的资源。
信任关系的传递可分为可递移(transitive)与不可递移(non-transitive)两种,可递移表示创建信任关系的域在同一树系内的其他域也可以使用在创建信任关系域中的信任资讯,不可递移则表示只有创建信任关系的域(不论是否有层次结构)才可以使用信任资讯。
名称系统
活动目录的命名默认是以LDAP(轻量级目录存取协议)版本的X.500协议为主(由ADSI LDAP Directory Service Provider),对于AD这种如此规模的目录服务而言,LDAP这种具有层次结构识别能力的协议,非常适合作为目录服务的存取协议,但AD亦可以支持NT时代的UNC格式(由ADSI Windows NT Directory Service Provider提供),在UNC与LDAP名称间的转换则由ADSI的IADsNameTranslate
接口来提供。
识别名
每个AD物件均有一个以LDAP组成的名称,称为识别名(Distinguished name,简称DN),这个识别名是作为使用LDAP查询AD目录中识别物件的名称,其格式类似下列:
LDAP://cn=John Smith, ou=Software Engineering, dc=engineering, dc=acme, dc=com, dc=tw
LDAP://cn=COMP1024, ou=Computers, dc=acme, dc=com, dc=tw
在LDAP字符串中经常使用的代字有:
- DC:domainComponent
- CN:commonName
- OU:organizationalUnitName
- O:organizationName
- STREET:streetAddress
- L:localityName
- ST:stateOrProvinceName
- C:countryName
- UID:userid
当客户端在下达LDAP查询字符串时,若无法符合AD物件的LDAP DN,则会找不到资料,LDAP代字亦可使用于搜索(IADsDSObject与ADsDSObject(),参见活动目录 Service Interface条目)。
一般名称
每个AD中的物件都会有一个一般的名称,又称为别名(Canonical Name),在Schema中的属性为cn(Common Name),但组织单元(OU)基本上是例外,它自己有一个代字ou作为识别符。
关系识别名称
为了要在容器与物件间作识别,在Schema中设置了一个Relative Distinguished name(简称RDN),存储在rDnAttId属性中,可在搜索AD时可以快速的对应容器内的物件。
GUID
每一个物件都有一个唯一的GUID物件标识符,存储在objectGUID属性中,其编码方式与GUID相同。
其他名称
- Windows NT用户名系统:即SAM(Security Account Manager)的名称系统,存储在用户的
sAMAccountName
属性中。 - 用户主体名称:即User Principal Name,在AD中用户是以
user@domain
的方式呈现,这个值存储在userPrincipalName
属性。
功能层次
活动目录于是一个开放式的目录服务,而且为了要能够容纳不同版本的Windows操作系统以及其域,因此特别在AD中使用了一种版本控制的机制,称为功能层次(functional level),功能层次定义了目前在域环境中可以使用的最大版本层次,同时这个修改是单向无法撤销的修改。若域中有不同版本操作系统的域控制站,则为了最大的兼容性,功能层次的设置应要以最低版本为主,例如一个域中有Windows Server 2003和Windows 2000时,则域的功能层次应该设为Windows 2000混合模式(Mixed Mode),若设为Windows Server 2003原生模式(Native Mode)时,Windows 2000的域控制站会失效。但由于新版本的AD设置通常都会比前版的要强(尤其是安全性的改进),因此若域中没有前版本的操作系统,则应将功能层次设置到最新版本,以开放AD的所有功能。
另外,若要在域中安装新版本的操作系统(例如在Windows Server 2003域中要安装Windows Server 2008)作为域控制站时,必须要先将活动目录中的Schema资讯做扩展以兼容于较新版本的操作系统,因此微软在安装光碟中都会提供一个活动目录准备工具 (adprep.exe),它可以让系统管理员以简单的方式升级活动目录中的数据结构,包含树系以及域的数据结构(使用参数设置),以兼容于新版本操作系统。
adprep /forestprep
:升级树系的数据结构。adprep /domainprep
:升级域的数据结构。adprep /rodcprep
:准备域以提供RODC(只读域控制站)的功能(Windows Server 2008以后版本才支持)。
对于Windows NT的BDC,则不是透过功能层次的设置,而是用Operation Master的PDC Emulator来保持兼容性。
物件结构
由于微软在设计活动目录是使用开放型的目录服务为方针,且目录服务的最基本特性之一就是要能“广纳百川”,除了基本的网络服务资料外,还需要能够和其他异质型服务连接与集成,因此微软在AD之中实现了一个物件的存储单位,称为“物件结构”(schema),物件结构可以视为AD物件的元数据(metadata)。每一个物件(不论是单元或是容器物件)都有各自的schema,用以存储识别该物件的不同资料,schema是由class和attribute所组成,attribute是最小的存储单元,class则是包含attribute的集合体。
存储在attribute中的资料有很多种格式,微软将这些格式定义成27种Schema资料类型,像是指示账户过期日的Account-Expires
属性,其值是interval资料类型(代表时间周期,为一个64位整数值),又如指示账户SAM名称的sAMAccountName
属性,其值是String(Unicode)值(支持Unicode的字符串值),又如存储用户的照片的Picture
属性,其值是Object(Repl-Link,代表是字节资料,且可以复制到其他域控制站)。
微软也开放了可扩展schema的方法[4],开发人员可以利用这一套方法来延伸活动目录 Schema中的资料,但一旦写入AD后,即不可删除(因为物件标识符不可更动),但是可以停用,延伸AD Schema最好的例子就是Microsoft Exchange Server。
服务
活动目录本身除基本的网络目录服务外,微软也应用这个基础架构设计了不同的服务,并且在Windows Server 2003不同的版次中加入,以提升活动目录的应用范围。
联合服务
由于AD本身具有可分布式的身份验证与授权能力,且在2003年时Web正吹起了单一签入(single-sign on)的架构研究风,微软也开始利用AD来设计一个可支持多个网站(或应用程式)的单一签入功能,其实现品即为活动目录 Federation Services(AD联合服务,简称ADFS),它显露了几个主要成员[5]:
- Federation Service:负责在ADFS的SSO架构中处理验证的伺服器。
- Federation Service Proxy:在外部网络或是WS-I服务中,扮演Federation Service的代理角色,并支持WS-Federation规格的验证设置。
- Claim-aware client:由ADFS开放的Claim-aware(宣告感知)组件的Web客户端,或是ASP.NET应用程式,可直接支持ADFS的SSO架构。
- Windows Token-based Agent:以Windows验证为主的Web应用程式,ADFS可支持AD权仗与Windows NT权仗的模拟与交换。
此服务在Windows Server 2003 R2版本中首次出现,并在Windows Server 2008中升级为活动目录 Federation Service角色。
轻量级服务
轻量级服务(Lightweight Directory Service)[6]在Windows Server 2003中被称为活动目录 Application Mode(ADAM),它是一个不需要与AD基础架构集成就可以独立运作的目录服务,适合用来表现企业的层次结构化概念与物件的管理,而且开发人员只要把使用ADSI的经验搬过来即可使用,不必另外学习ADAM的操作方法,它也可以做为ADFS的外部验证提供者。轻量级目录可以在同一台电脑中安装多个执行个体,因此也很适合用ADAM来实现Directory-Enabled的应用程式,尤其是与组织结构相关的(例如人事或人力资源系统),ADAM本身也可以延伸schema,开发人员可以将ADAM视为另一种型式的数据库,也可以由AD中复制资料到ADAM,不过ADAM不会对AD进行站台复制,开发人员需要自行撰写程序来复制资料。
轻量级服务在Windows Server 2008中改名为活动目录 Lightweight Directory Service(简称AD LDS),并提升为AD的应用角色之一。
证书服务
证书服务(Certificate Service)[7]是在Windows Server 2008中首次纳入活动目录体系的服务,它原本是在Windows 2000与Windows Server 2003的证书伺服器(Certificate Server),用来创建企业中的公开密钥基础建设,在Windows Server 2008中,证书和AD物件有了更强更紧密的集成,所以有了活动目录 Certificate Service(AD CS)的角色,这个角色还可以和权限管理的Right Management Service(RMS)集成在一起,提供对文件或应用程式层次的权利管理。
权利管理服务
权利管理服务(Right Management Service)[8]也是在Windows Server 2008中首次纳入活动目录体系的服务,最早的时候,它是在Microsoft Office 2003开始提出的资讯权利管理(Information Right Management)功能,可利用它来控制Office文件散布时的权限,例如打印以及存储文件等,接着微软发表了Right Management Server以及RMS SDK,供Windows Server 2003平台使用,而在Windows Server 2008中即将它集成到活动目录中,变成AD服务的一部分。
集成Unix到活动目录中
活动目录互通的多样性层次得以透过符合标准的LDAP客户端在大多数的类Unix操作系统记录,但这些系统通常缺乏与Windows组件像是组策略与单向信任关系的许多属性的自动直译,目前也有许多第三方软件厂商提供了将Unix平台(包含UNIX、Linux、Mac OS X与数个Java与Unix-based应用程式)集成活动目录方法,这些供应商的一部分,包含Thursby Software System(ADmitMac), Quest Software(Vintela Authentication Services), Centrify(DirectControl),与Likewise Software(Likewise Open and Likewise Enterprise)。Microsoft也在这个市场中拥有为UNIX产品所设计的免费Microsoft Windows服务(即Windows Service for Unix)。
这些额外的物件结构在Windows Server 2003 R2版本中被发布,包含完全对应到RFC 2307的一般用途的属性。这些RFC 2307、nss_ldap与pam_ldap的参考实现均提供自PADL.com,包含直接使用这属性以及填充资讯的支持。默认组群成员(group membership)的活动目录 Schema与被提议的RFC 2307bis延伸功能一起编译。RFC 2307bis使用LDAP成员属性存储Unix的组群成员资料,与基础RFC 2307,以存储组群成员为以逗号分隔的用户标识符菜单有所不同。Windows Server 2003 R2包含了一个MMC snap-in以创建与编辑这些属性。
一个替代选项是使用其他的目录服务,像是Fedora Directory Server(之前的Netscape Directory Server)或是Sun的Java System Directory Server,它可以执行与活动目录双向同步化,进而在需要使用FDS验证的Unix与Linux平台与需要使用Windows验证的Windows客户端之间,提供一个与活动目录之间转向(deflected)的集成。另一个选项是使用OpenLDAP以及它的透通覆盖(translucent overlay)功能得以延伸项目于使用额外属性存储在本地数据库的任何远程LDAP伺服器上。在本地数据库中指示的客户端将会看到包含在远程和地的属性,当远程数据库仍保持完整不变的情况下。
Samba 4,在2012年12月11日发布的 Samba 4[9]中包含了一个活动目录兼容伺服器。
参考文献
- ^ Global Catalogs. [2009-01-04]. (原始内容存档于2008-12-27).
- ^ Operation Masters. [2009-01-04]. (原始内容存档于2009-01-19).
- ^ Directory Data Store[永久失效链接]
- ^ Extending the schema[永久失效链接]
- ^ Directory Federation Services概觀. [2009-01-04]. (原始内容存档于2012-07-19).
- ^ Directory輕量型目錄服務概觀. [2009-01-04]. (原始内容存档于2013-04-27).
- ^ Directory憑證服務概觀. [2009-01-04]. (原始内容存档于2012-07-16).
- ^ Directory Rights Management Services概觀. [2009-01-04]. (原始内容存档于2012-07-18).
- ^ Samba4.0 Release. [2017-10-10]. (原始内容存档于2010-11-15).