网管经验共享:组策略相关故障排错经验谈(1)


对于网络管理员来讲,关于组策略的问题可能听到最多的抱怨就是:“我设置了一个策略,为什么它不生效?”。对于一些比较大的网络环境,组策略可以减轻网管人员的管理工作,但其出问题的几率还是比较大的。这一方面是由于我们在日常操作时不慎引起的,另一方面是由于策略相互影响而造成最终的结果与设想不一致。

组策略应用要点

这里,笔者给出几点微软不推荐的做法:

1.不要删除两条默认的策略(默认域策略和默认域控制器策略),很多问题的发生都是由删除这两条默认策略而引起的。而且要使用组策略管理控制台(GPMC)工具备份这两条默认策略,用于将来还原。如果直接通过GPMC删除默认策略时,我们会发现是行不通的,但是,稍有经验的读者知道如何删除它们。既然是一个不推荐的做法,希望大家不要删除它们。

2.组策略是不能够链接在用户组上的。有很多初次接触活动目录的管理员,经常设想将组策略生效于某一用户组,这是行不通的。组策略不是为用户组设定的策略,而是一组策略的集合,只能链接在站点、组织单元和域上面。

3.组策略的生效问题

(1)生效顺序

正常生效顺序:本地策略→站点策略→域策略→父OU策略→子OU策略。

我们使用时,在出现登录对话框前,会有“应用安全策略”的提示,这也就是本地策略生效的过程。

发生冲突时,最新的策略设置会覆盖其他设置。计算机设置高于用户设置(即使用户设置是后设置的)。父容器组策略设置与子容器设置发生冲突,子容器中组策略的设置将最终生效。同一容器的多个策略按照优先权顺序进行生效。所以,当在一个容器上面链了多个GPO时,不妨仔细看看它们的顺序,很有可能问题是顺序不当引起的。

(2)生效时间

默认情况下,非域控制器的计算机每90分钟刷新一次策略,其中含有随机的30分钟时间偏移量,时间偏移量保证了多个计算机不会同时连接到同一个域控制器上面。域控制器每5分钟刷新一次,保证了紧急更新的组策略设置(安全性设置)能够得到及时执行,可以在 “域控制器组策略重新刷新时间间隔”里面更改(如图1)。

图1 “域控制器组策略重新刷新时间间隔”进行更改

在Windows 2000里面可以使用secedit/refreshpolicy machine_policy或secedit /refreshpolicy user_policy命令强制刷新,在Windows XP或Windows 2003使用gpresult /force强制刷新。如果新做的设置没有能够生效,不妨考虑一下是否为刷新时间间隔问题。

组策略常规排错法

如果您平时是按照以上建议做的,结果组策略的某些设置还是没有按照预期生效,我们就需要做排错处理了。

1.首先,确保客户端拿到了相关的策略。比如,希望域内所有的计算机不要显示上次登录的用户名以确保安全,可是在所有的用户端都没有生效,说明这条策略很有可能客户端就没有拿到。从Gpresult或者是组策略结果集,可以知道客户端拿到了哪些策略。前者是命令行模式,后者是图形界面,功能都是相同的。下面介绍组策略结果集的使用。

(1)打开gpmc.msc,单击组策略结果收集向导,选择是本机还是远程计算机,选择为哪一个 用户显示最终结果,我们就可以查看结果了(如图2)。

图2 查看结果

在“组策略对象→应用的策略”中,我们能够看到出问题的客户端应用了哪些GPO,没有应用哪些GPO,如果某一条组策略没有被应用,那么设置必定没有生效,因为计算机根本就没有拿到这个策略。

正如案例中所述的那个问题(希望域内所有的计算机不要显示上次登录的用户名以确保安全,可惜在所有的用户端都没有生效),后来在随机的客户端运行 gpresult,结果发现,为计算机设置的不显示上次登录的用户名策略(当时命名为Do not Display last logon name)根本就没有应用到客户端,自然策略不会生效。

2.如果网络里面有多台域控制器,要确保多台域控制器的策略保持一致,检查方法是运行 gpotool(需要安装Windows Resource Kit工具包)。

Validating DCs...
Available DCs:
mic-technet.dc.mic
Searching for policies...
Found 4 policies
Policy {31B2F340-016D-11D2-945F-00C04FB984F9}
Friendly name: Default Domain Policy
Policy OK
==========================================================
Policy {6AC1786C-016F-11D2-945F-00C04FB984F9}
Friendly name: Default Domain Controllers Policy
Policy OK
==========================================================
Policy {90BD780C-D2E8-44CB-97B8-80B343852457}
Friendly name: Do not display logon name
Policy OK
==========================================================
Policy {CC2C8E4F-FA55-4824-AC75-0122494DCC31}
Friendly name: user
Policy OK
==========================================================
Policies OK

这是一次运行gpotool的结果,当然,笔者这里只是一个虚拟环境,只有一台域控制器,读者可以拿出问题的日志与正常日志进行比对,便会发现问题所在。设想,如果有两台域控制器它们之间的复制又出了问题,那么意味着每个域控制器的组策略不统一了,自然客户端在应用时会发生问题。

3.检查组策略对象是否在AD中和Sysvol中,而且GUID是否与正确的GPO相关联。

(1)查看组策略的GUID。

(2)用Search.vbs检查LDAP协议正确性,GPO和GUID是否为真正意义的对应。

Search.vbs是Windows 2003安装光盘Support\Tools\ Support.cab下的一个脚本工具,可以将GPO名称解析为GUID。

使用方法:

cscript search.vbs "LDAP://dc=mydomain,dc=com"

/C:"&(objectClass= groupPolicyContainer)(displayName=Default Domain

Policy)" /P:name /S:SubTree

将mydomain和com换成您自己的域名。

3.以上两步结束后,如果仍然没有查到问题所在,可以激活userenv.log:

打开注册表编辑器,定位至HKEY_LOCAL_MACHINE\Software\ Microsoft\Windows NT\ CurrentVersion\Winlogon。

新建dword值:UserEnv DebugLevel,数据为10002 (Windows 2000/XP),Windows 2003改为30002。重新启动后在%SystemRoot%\Debug\ UserMode\下可找到Userenv.log 文件。该文件对我们解决用户配置文件和组策略处理方面的问题很有帮助。

例如,有时会在该文件中发现:

USERENV(178.63c) 22:27:23:188 EvalList: Object cannot be accessed

这说明登录的用户对要应用给他的GPO是没有权限的,这时就要注意组策略的权限问题。

4.如果是和安全设定有关的策略没有生效,可以开启Winlogon:

打开注册表编辑器,定位至HKEY_LOCAL_MACHINE\Software\ Microsoft\Windows NT\ CurrentVersion\Winlogon\ GPExtensions\{827D319E-6EAC-11D2-A4EA-00C04F79F83A},新建一个DWORD值,名称为 Extension DebugLevel,数值设为2,刷新策略,这样在以下位置Windows\ Security\Logs生成winlogon.log,所有安全设定会被详细记录在里面。

举例来说,启动基于Windows 2000的计算机时,事件查看器大约每5分钟记录一次事件ID 1202和1000。

然后当查看 Winlogon.log 文件时,会发现下面的错误信息:

Error 1332: No mapping between account names and security IDs was done.Cannot find Power Users.

很明显,这是有人给Power Users组做了安全权利指派,但是当计算机被提升成为域控制器后,Power Users组就会被删除掉,然而组策略里却没有将其权限相应的删除,计算机就会不停地找(准确的说是对应)Power Users组,因此就会报错。

当我们在查看Userenv.log和Winlogon.log时,可以关注以下信息:fail,error,cannot等这些失败、错误信息。


相关内容

    暂无相关文章