1 i! T4 J* i5 r) K% }/ O 早在2002年1月,微软启动了“可信赖计算”这一针对Windows平台安全性的计划。这一计划直接影响了微软下一批产品(建立在.NET框架之上)的发行日期,不过额外增加的数月开发时间确实使新产品的安全性、稳定性超过了它们的前辈。 & t: E8 J) V- } 3 w' P. [+ ~" S0 W 在这篇文章中,我们将一起探究Windows 2003 Server增强的安全机制。新的操作系统中提高安全性的新特性随处可见,但这里我们只注重大多数Windows用户和管理员最关心的地方,借此粗略感受一下Windows Server 2003新的安全机制。 + I, h2 I; X( [ L8 B
5 r! p2 \9 p2 U5 m
一、NTFS和共享权限 + o, \/ b- d! g, o; F/ v- h U! n2 |6 |& o4 |4 s6 V% f% D
在以前的Windows中,默认的权限许可将“完全控制”授予了Everyone组,整个文件系统根本没有安全性可言(就本地访问来说)。但从Windows XP Pro开始,这种情况改变了。 2 P- B8 n3 G: @0 H+ g
3 W. j8 G" \8 F2 i
授予Everyone组的根目录NTFS权限只有读取和执行,且这些权限只对根文件夹有效,请参见图1。也就是说,对于任何根目录下创建的子文件夹,Everyone组都不能继承这些权限。对于安全性要求更高的系统文件夹,例如Program Files和Windows文件夹,Everyone组也已经从ACL中排除出去。(说明:ACL即“访问控制列表”,或Access Control List,它是一种安全保护列表,适用于整个对象、对象属性组或某个对象个别属性。Windows Server 2003有两种访问控制列表类型:随机和系统)。 2 z% Y' X# `+ D7 m1 V) \' p( N0 r0 e8 d7 H9 v p; k o1 ~
9 T, {/ E7 G' b3 \: G: ]
[# g( P0 F- v+ L* k/ E2 Y$ f: Z: K' \$ S
图1 7 m9 K; J3 S5 F5 w& i 0 T' D- k/ H: V5 d9 h0 b5 Z- l 0 ~1 E3 Q; {6 ^# l$ ~ Users组除了读取和运行之外,还能够在子文件夹下创建文件夹(可继承)和文件(注意,根驱动器除外)。授予System帐户的权限和本地Administrators组成员的权限仍未改变,它们仍拥有对根文件夹及其子文件夹的完全控制权限。CREATOR OWNER仍被授予子文件夹及其包含的文件的完全控制权限,也就是允许用户全面管理他们自己创建的子文件夹。 8 x5 D# i- b. U6 Y9 U) [: t$ T2 X* }
对于新创建的共享资源,Everyone现在只有读取的权限。 ) m4 M% X4 e) e( D7 y, e6 {! D : ?& D6 x3 X( n6 ?5 T' B 另外,Everyone组现在不再包含匿名SID(安全标识符,一种不同长度的数据结构,用来识别用户、组和计算机帐户。网络上每一个初次创建的帐户都会收到一个唯一的 SID。Windows中的内部进程将引用帐户的SID而不是帐户的用户名或组名),进一步减少了未经授权访问文件系统的可能性。要快速查看文件或文件夹的NTFS权限,可以用右键点击文件或文件夹,选择“安全”选项卡,点击“高级”,然后查看“有效权限”页,如图2所示,不用再猜测或进行复杂的分析来了解继承的以及直接授予的NTFS权限。不过,这个功能还不能涵盖共享权限。 - _ j; r; Q. z$ ^: {- L( e" s* m; z, y
4 C- c9 l9 {# h, p
: t0 I& z' a! L8 o; y- l; L1 M) \
; z$ k1 Z# U' E; S6 ?1 F
图2 |" \+ g* Z0 S3 ^9 J$ | F) o ; ]6 j" c; c& K2 u$ P Y9 L 6 b* J1 N% }1 S- O4 [ |二、文件和文件夹的所有权 * _: I3 Z' Y s6 V " ^! T/ q0 v; Q 现在,你不仅可以拥有文件系统对象(文件或文件夹)的所有者权限,而且还可以通过该文件或文件夹“高级安全设置”对话框的“所有者”选项卡将权限授予任何人,请参见图3。 + |9 T. b& z+ p, `& `! o3 A- M
6 B/ h; C! r6 I0 o$ M8 k9 w + }; D( B4 {3 R$ P1 ^, T * _$ P) U1 d1 R( r* ~* g( C# x- P N5 E( g. E5 I
图3 + f3 m* D* D# ]* q9 Y5 P6 r0 o' n& ]* N; D
2 O1 i% q' q0 f: ~ Windows的磁盘配额是根据所有者属性计算的,授予其他人所有者权限的功能简化了磁盘配额的管理。例如,管理员应用户的要求创建了新的文件(例如复制一些文件,或安装新的软件),使得管理员成为新文件的所有者,即新文件占用的磁盘空间不计入用户的磁盘配额限制。以前,要解决这个问题必须经过繁琐的配置修改,或者必须使用第三方工具。现在Windows Server 2003直接在用户界面中提供了设置所有者的功能,这类有关磁盘配额的问题可以方便地解决了(对于使用NTFS文件系统的任何类型的操作系统都有效,包括Windows NT 4.0、2000和XP Pro,只要修改是在Windows Server 2003上进行就可以了)。 & M4 j% A2 ]7 U5 |
/ Y7 y2 d" v' a0 x
值得一提的是,这个功能(有效权限和授予所有者权限)对于从Windows Server 2003管理的活动目录对象也同样有效。 % I* s& T# o: I; ?4 L6 b3 {9 F; {! c
三、Windows服务配置 4 t8 U' B) D$ K- A; |8 U! U
8 E5 G2 M$ R1 i( h: T
Windows服务配置方面的变化可分成两类,请参见图4的Windows Server 2003服务管理工具。 4 t: m' V. a6 d0 v1 r% C9 E+ C9 n; q1 U$ ~6 A
3 c) N; C w: p2 { Q/ A
' I0 ~% _$ n0 u6 g) n, \; D6 [5 y; M% F( }( _* C
图4# C, k: K1 f4 |( p1 J+ x _
0 t Y* i) }3 v5 M # X5 \' ^! `3 Z: ?, ? ㈠ 启动类型。几种最容易受到攻击的服务,诸如Clipbook(启用“剪贴簿查看器”储存信息并与远程计算机共享)、Network DDE以及Network DDE DSDM(前者的功能是为在同一台计算机或不同计算机上运行的程序提供动态数据交换(DDE)的网络传输和安全;后者用于管理动态数据交换网络共享)、Telnet、WebClient(使基于Windows的程序能创建、访问和修改基于Internet的文件)等,默认情况下已经被禁止了。还有一些服务只有在必要时才启用,例如Intersite Messaging(启用在运行Windows Server的站点间交换消息)只有在域控制器提升时才启用,Routing and Remote Access Service(为网络上的客户端和服务器启用多重协议——LAN到LAN,LAN到WAN,虚拟专用网络(VPN)和网络地址转换(NAT)路由服务)只有在配置Windows Server 2003作为路由器、按需拨号的服务器、远程访问服务器时才启用。 5 d+ L( K2 R: M/ P: W 8 ~( E7 F6 _" n" I ㈡ 运行在Local System安全上下文之下的服务变少了,因为Local System具有不受限制的本地特权。现在,许多情况下,Local System被Local Service或Network Service帐户取代,这两个帐户都只有稍高于授权用户的特权。正如其名字所示的,Local Service帐户用于本地系统的服务,它类似于已验证的用户帐户的特殊内置帐户。Local Service帐户对于资源和对象的访问级别与Users组的成员相同。如果单个服务或进程受到危害,则通过上述受限制的访问将有助于保护系统。以Local Service帐户运行的服务作为空会话,而且不使用任何凭据访问网络资源。 8 P* J* y$ g7 r
* F: z; ~+ D4 r9 k" \
相对地,Network Service则被用于必须要有网络访问的服务,它对于资源和对象的访问级别也与Users组的成员相同,以Network Service帐户来运行的服务将使用计算机帐户的凭据来访问网络资源。 8 A8 e. \* C K* h3 b' S0 t9 Y' P+ t& N) N, L: Y
四、身分验证 * ?2 W0 {$ J; S8 O: U- a ; r j' X, {- r0 j. N: ` 身分验证方面的增强涵盖了基于本地系统的身份验证和基于活动目录域的身份验证。 7 Y; j* v/ v1 g9 ?, W4 v5 \
9 Z* r/ r: p- n3 C
在本地系统验证方面,默认的设置限制不带密码的本地帐户只能用于控制台。这就是说,不带密码的帐户将不能再用于远程系统的访问,例如驱动器映射、远程桌面/远程协助连接。 6 {: N4 W2 P6 Q) J7 q X$ Q
( g3 H$ t- O( T/ H& J8 o 活动目录验证的变化在跨越林的信任方面特别突出。跨越林的信任功能允许在林的根域之间创建基于Kerberos的信任关系(要求两个林都运行在Windows 2003功能级别上)。在 Windows Server 2003林中,管理员可创建一个林,将单个林范围外的双向传递性扩展到另外一个Windows Server 2003林中。在Windows Server 2003林中,这种跨越将两个断开连接的Windows Server 2003林链接起来建立单向或双向可传递信任关系。双向林信任用于在两个林中的每个域之间建立可传递的信任关系。 5 s' z+ P& F( P1 j% x
8 h8 N+ ^1 n8 H* L Y8 k
林信任具有许多优点: 1 Y7 R1 j. x" }0 q( n
& a- z, @, G# Z0 ^ l$ ~$ H ⑴ 通过减少共享资源所需的外部信任数,使得跨越两个 Windows Server 2003林的资源的管理得以简化。 6 K* z( Z1 g* g
: k: P4 }" w! T ⑵ 每个林中每个域之间的完全的双向信任关系。 6 q: t( E$ {6 ~' Z0 G, F
3 [& F4 U; i! a, x9 q0 W( T ⑶ 使用跨越两个林的用户主体名称(UPN)身份验证。 & ]1 D0 [ ?/ \% a) c( p
% b! i) E- ?: ^5 i5 r' K G% n. C
⑷ 使用Kerberos V5和NTLM身份验证协议,提高了林之间传递的授权数据的可信度。 4 { Z: \$ w# O; ]3 o) } * a+ \: c2 n" C& U ⑸ 灵活的管理。每个林的管理任务可以是唯一的。 3 F% K8 U6 p" E$ a3 S
H* t9 ^* o3 Q1 R, b0 D 林信任只能在两个林之间创建,不能隐式扩展到第三个林。也就是说,如果在林1和林2之间创建了一个林信任,在林2和林3之间也创建了一个林信任,则林1和林3之间没有隐式信任关系。 ; i: e3 K/ d8 e" B; R& L
" }; h M7 T j. @# i: B 注意:在Windows 2000林中,如果一个林中的用户需要访问另一个林中的资源,管理员可在两个域之间创建外部信任关系。外部信任可以是单向或双向的非传递信任,因此限制了信任路径扩展到其他域的能力。但在Windows Server 2003 Active Directory中,默认情况下,新的外部信任和林信任强制SID筛选。SID筛选用于防止可能试图将提升的用户权限授予其他用户帐户的恶意用户的攻击。强制SID筛选不会阻止同一林中的域迁移使用SID历史记录,而且也不会影响全局组的访问控制策略。 ( P8 { V4 T0 Y- y$ @5 ?" g, S
! Y% q# g$ n, ?% Z
在默认配置下,身分验证是在林的级别上进行的,来自其他林的责任人将被授予与本地用户和计算机同样的访问能力。但无论是谁,都受到设置在资源上的权限的约束。 1 N$ G4 r( Y s( l) @
, B- d7 _6 v2 I: ~; Q: \8 l 如果上述默认配置不能满足要求,你可以配置选择性验证,不过这要有Windows 2003的林功能级别。在这种配置方式中,你可以指定哪些来自其他林的用户或组允许通过验证,以及选择本地林的哪些资源可用来执行验证。具体设置分两步进行。 ! }- S1 \; A% ~8 \2 ]: O8 Y, }0 k4 e7 x O
第一步是授予来自其他林的责任人允许验证的权限。例如,假设有两个Windows 2003功能级别的林ForestA和ForestB,两者之间有信任关系。ForestA中DomainA域的UserA用户需要访问ForestB中DomainB域ServerB服务器的ShareB共享资源。要达到这个目标,必须按如下方式操作: 1 t* s, O G& t3 S. z( T2 Q7 B9 G2 [% C9 S& G' b) m# t
⑴ DomainA的管理员在DomainA域中创建一个全局组(例如GroupA),其中包含成员UserA。虽然可以直接授予UserA适当的权限(这种方式的优点之一是透明),但如果用户数量较多,直接配置各个用户的话效率就很低了。 ; i" f6 m6 x8 X! F x0 L5 C: o! T% K: J
* a( r9 p" @' S: R ⑵ 启动Active Directory用户和计算机管理器,找到DomainB,再找到ServerB,双击ServerB的图标,打开它的属性对话框。 0 z. z, k1 b+ y# O* G0 |! P+ c
, M; M0 t S& U
⑶ 转到安全设置页,将DomainA\GroupA加入到窗口上方的清单。在窗口下方,选中“允许验证”和“读取”权限的“允许”选项。第一步的设置到这里完成,我们已经允许DomainA\GroupA的成员访问DomainB\ServerB时执行验证。 9 {4 e; H h9 q7 @ * Q; p0 K: G G u6 H: c7 E! t 第二步很简单,只要把ServerB服务器ShareB共享资源上适当的权限授予DomainA\GroupA全局组即可(或者,也可以将DomainA\GroupA全局组加入到DomainB域本地组,然后对本地组授权)。 t8 m3 V2 h4 C. f9 q% v' L* W7 o- j' J) H2 y" h j
结束语:本文只涉及了Windows 2003安全性很小的一方面,许多重要的主题尚未涉及,例如Active Directory安全特性(SID过滤等),以及托管、非托管代码的应用程序代码控制等。尽管如此,我们已经可以体会到微软宣称的“迄今为止微软最强大的Windows服务器操作系统”确实在安全性方面作了许多改进。