活用软件限制策略

在多人共用一台计算机的环境下,我们可能需要对每个人可以使用的软件进行限制。例如,系统中安装了一个游戏,可你不打算让其他使用你计算机的人玩这个游戏。或者公司的计算机上安装了很多软件,老板希望员工只能使用工作需要的程序,其他非必须的程序都不准使用。

为了实现这一目标,我们可以配置Windows中的软件限制策略,Windows XP Pro、Windows Server 2003以及Windows Vista商业版、企业版和旗舰版这些带有组策略功能的操作系统都可以配置软件限制策略(Windows 2000虽然带有组策略,但没有软件限制策略功能)。

本文会介绍单机环境下软件限制策略的使用。需要注意的一点是,和其他大部分策略一样,软件限制策略在域环境下才能发挥出最大作用,例如通过不同的OU(组织单元),域管理员可以为不同部门或者不同需要的员工创建出不同的策略。在单机或工作组环境下,我们的策略只能对本地帐户生效。

可用的规则

软件限制策略可以让我们设置允许用户运行哪些程序,不允许运行哪些程序。同时我们可以通过不同的规则来指定允许或者禁止运行的软件。在Windows的软件限制策略中,我们可以通过下列条件来创建规则:

证书规则 通过证书规则,我们可以借助软件可执行程序自带的数字证书来创建策略。例如,我们可以通过证书规则决定,所有带有来自微软的数字证书的软件都可以运行,或者所有带有某个不被信任的开发商的数字证书的软件都禁止运行。这样每当我们试图运行一个程序的时候,系统都会查看该程序的数字签名,然后跟软件限制策略中的定义进行比较,并根据策略的设置决定是否允许运行。

哈希规则 在使用哈希规则的时候,我们可以指定一个软件的可执行文件,然后由操作系统计算该文件的哈希值,并根据计算出来的哈希值决定是否允许运行该软件。

网络区域规则 该规则主要用于使用Windows Installer技术安装的软件,因为通过该规则,我们可以对来自不同Internet区域的软件的安装程序采取不同的限制措施。

路径规则 通过该规则,我们可以利用程序的安装路径或者注册表路径来决定是否允许某个路径的程序的运行。

上述四种方式各有利弊,下表列出了不同情况下建议使用的规则:

目的 建议使用的规则
允许或不允许运行特定版本的程序 哈希规则
允许或不允许运行始终安装在同一位置的程序 文件路径规则
允许或不允许运行可以安装在计算机上任何位置的程序 注册表路径规则
允许或不允许运行保存在中央服务器上的程序或脚本 文件路径规则
允许或不允许运行保存在中央服务器上的一批程序或脚本 带有通配符的文件路径规则
允许或不允许某个特定名称的程序运行 路径规则
允许或不允许某个特定公司开发的软件 证书规则
允许或不允许从某个Internet 区域站点安装软件 网络区域规则

通常来说,不同的情况需要选择不同的规则。例如,假设我们通过哈希规则允许某个软件运行,但这个软件有一天升级了,升级程序对软件的主文件进行了修补,导致文件的哈希值产生了改变(要知道,对一个无论多大的文件,只要内容被改变了哪怕一个字节,该文件的哈希值也会发生巨大的变化),那么用户将无法再使用这个程序,除非管理员修改软件限制策略。这种时候我们就可以使用证书规则来限制,毕竟无论软件怎么升级,只要开发商没有”改头换面”,那么该软件包含的数字证书就不会变化。

同时这些规则的应用还存在一个优先级问题。例如,同一个程序,如果按照证书规则来看,是允许运行的,但按照路径规则来看,是不被允许的。那么系统到底该允许还是禁止该程序运行?一般来说,上述四类规则按照优先级的高低排列,顺序是:哈希规则、证书规则、路径规则、网络区域规则,高优先级规则的设置会覆盖低优先级规则的设置。同时,对于同一种规则,”禁止”要优先于”允许”,例如对某个软件,我们无意中使用某种规则(例如哈希规则)创建了禁止运行和允许运行这两条规则,那么最终的结果是系统禁止该程序运行。

可用的策略

运行secpol.msc,打开本地安全策略控制台,在控制台窗口左侧的树形图中依次进入到”安全设置-软件限制策略”,然后在软件限制策略节点上单击鼠标右键,选择”创建软件限制策略”,这样我们就可以创建一个默认的软件限制策略,同时该节点下将出现名为”安全级别”和”其他规则”的两个节点(如图1所示)。下面我们分别介绍新出现的每个策略。

图 1,Windows Vista中可用的软件限制策略

新建了软件限制策略后,在”软件限制策略”节点下有三条策略,其作用分别如下:

强制 该策略决定了软件限制策略的适用范围。单击该策略后可以看到2所示的对话框。

图 2,”强制”策略的设置内容

应用软件限制策略到下列文件 该选项决定了软件限制策略是否应用到库文件。简单来说,库文件为软件的运行提供支持,有时候是运行某些软件时必不可少的组件。但有时候可能有这样的情况:假设我们通过证书规则决定只运行某个厂商开发的软件,但该软件的运行需要的某个dll文件的数字签名来自另外一个厂商,这种情况下,为了让该软件可以正常运行,我们就需要选择”除去库文件之外的所有软件文件”选项,同时一般情况下也建议选择该选项。毕竟大部分软件的运行都是通过一些可执行文件(例如.exe文件)实现的,只要对可执行文件设置好限制,库文件的限制已经不再那么重要了。

将软件限制策略应用到下列用户 该选项决定了是否将软件限制策略应用给管理员用户,默认情况下将会被应用给所有用户。这是一种安全措施,可以让管理员也被自己创建的策略所限制。在默认的设置下,如果不小心设置了错误的策略,并且可能连管理员也被禁止运行策略编辑器,或者根本无法登录,这时候可以使用管理员帐户登录到安全模式下修改策略。不过一般情况下,如果不是很必要,建议软件限制策略只对非管理员用户生效,也就是选中”除本地管理员以外的所有用户”选项。

在应用软件限制策略时 该选项决定了是否在应用软件限制策略时执行证书规则。如果希望使用证书规则,请选择”执行证书规则”,如果希望禁用,请选择”忽略证书规则”。

指派的文件类型 该策略决定了具有什么扩展名的文件可以被视为可执行文件,如图3所示。

图 3,通过策略决定哪些类型的文件属于可执行文件

所有由该策略指定的文件都会被系统当作是可执行文件,而执行这些文件都需要经过软件限制策略的许可。如果希望添加新的文件类型为可执行文件,可以在”文件扩展名”文本框中输入目标文件类型的扩展名,然后单击”添加”按钮;如果不再希望系统将某种类型的文件当作可执行文件,可以从列表中选中目标文件类型,然后单击”删除”按钮。

受信任的发布者 该策略的属性对话框如图4所示。默认情况下,Windows Vista并不允许我们修改这些设置,因此首先需要选中”定义这些策略设置”选项,接下来所有选项都将可修改了。在这个对话框上,”受信任的发布者管理”选项可以让我们决定谁可以选择受信任的发布者(受信任的发布者发布的程序将允许运行),例如我们可以选择”所有管理员和用户”,这样用户就可以决定;或者我们可以选择”所有管理员”(单机或工作组环境下)或”企业管理员”(域环境中),这样就只能由管理员选择受信任的发布者。接下来的证书验证选项可以用来决定Windows通过检查哪些项目决定证书是否被吊销。通常吊销的证书都是无效的,因此应该及时检查证书吊销情况,以免以前创建的证书规则在证书被吊销后依然生效,让用户运行了已经不再允许运行的程序。如果希望Windows检查证书的发行者是否依然有效,可以选中”是否未被吊销”选项;如果希望让Windows检查证书的有效时间有没有到期,可以选择”是否具有有效的时间戳”选项。

图 4,收信人的发布者策略属性

接下来进入到”安全级别”节点,在Windows Vista下,该节点有三条策略。这些策略都是互斥的,因此同一时间里,只有一条策略是生效的默认策略。默认策略的显示和非默认策略有所不同,默认策略的图标上会有一个对钩的图案。如果希望更改默认策略,只需要在目标策略上单击鼠标右键,然后选择”设置为默认”即可,这样原先的默认策略会被取消,系统会自动将我们新选择的策略设置为默认。

不允许的 这条策略的含义是,除了通过其他规则明确允许的软件外,其他软件都禁止运行。

不受限的 这条策略的含义是,除了通过其他策略明确拒绝的软件外,其他软件都允许运行。

因此我们可以根据这两条策略的相应作用并结合自己的需要进行配置。例如,如果希望公司员工只使用特定的几个工作需要的程序,而禁止使用本机安装的其他程序,就可以将”不允许的”设为默认值;如果希望用户可以使用绝大多数软件,只禁止运行特定的几个软件,可以将”不受限的”设置为默认值。

除此之外,还有一个名为”基本用户”的策略,”基本用户”这条策略的含义是,除了通过其他规则明确指定的软件外,其他所有软件都只能以一般用户的身份运行(也就是说,不能以管理员的身份运行)。

在”其他规则”节点下,可以看到一些系统预设的规则。取决于系统的不同以及其他策略的设置,这里可能会出现不同数量的默认规则。通常情况下,这些规则都是为了保证操作系统可以正常使用而准备的,因此如果不是特别必要,最好不要删除或者修改这些系统自建的规则。我们可以按照需要创建自定义的规则。

在”其他规则”节点上单击鼠标右键,从随后出现的右键菜单中,选择”新建证书规则”、”新建哈希规则”、”新建网络区域规则”或者”新建路径规则”,就可以建立对应的规则。我们一起来看看这些规则都是如何创建的。

创建规则

证书规则

上文中我们已经说过,通过使用证书规则,我们可以通过应用程序文件的数字签名来决定是否允许运行该程序。对于这个功能,应该谨慎使用,因为一旦启用证书规则,那么每次运行程序的时候,系统都将对程序需要的每个可执行文件以及库文件(如果曾设置了包含库文件的话)检验数字签名,这有可能导致系统性能的降低。

新建证书规则对话框如图4所示。

图 5,新建证书规则

在Windows Vista中,创建证书规则是很简单的,我们不需要专门获得软件公司的证书,因为只要有带有数字签名的文件,Windows Vista可以自动从中提取证书。因此我们可以直接单击”浏览”按钮,在随后出现的下拉菜单中定位证书。

在定位证书的时候要注意,如果你已经准备好了需要添加规则的证书(.cer或者.crt文件),那么只需要在打开对话框中选中这些文件即可。如果你手头没有需要的证书,但是想要对特定的软件进行限制,也很简单,只要该软件带有数字签名(由正规公司新发行的软件基本上都带有),那么可以在打开对话框的文件类型下拉菜单中选择”签名的文件”选项,然后直接选择目标软件对应的主文件即可。

选择好文件或者证书后,”证书使用者名称”文本框就会变为灰色,同时显示所选证书的信息。如果需要看到证书的详细信息,可以单击右侧的”详细信息”按钮。

接下来,我们需要在”安全级别”下拉菜单在中选择一个级别,例如是”不允许的”或者”不受限的”。

最后,为了方便日后管理众多的规则,我们还可以在”描述”文本框中输入一定的描述性文字。

如果你还在使用Windows XP,那么在使用证书策略的时候会遇到一些麻烦,因为Windows XP限制我们只能使用cer或者crt文件创建规则,而不能使用带有数字签名的程序文件。因此在Windows XP中创建证书规则的时候,我们必须首先能够获得某个厂商的数字证书。方法也很简单,我们只需要准备一个该厂商发布的,带有数字签名的软件的安装程序(.exe或者.msi格式的文件)即可。具体的操作步骤是这样的:

  1. 打开Windows资源管理器,找到目标文件,用鼠标右键单击,选择”属性”,打开属性对话框。

  2. 在属性对话框上打开”数字签名”选项卡(注意,如果没找到这样的选项卡,说明该安装程序不带数字签名,无法从中提取)。

  3. 在签名列表中通常会出现该程序开发商的名称,单击将其选中,然后单击下方的”详细信息”按钮。

  4. 在随后出现的数字签名详细信息对话框上直接单击”查看证书”按钮,随后可以打开证书对话框。

  5. 打开证书对话框的”详细信息”选项卡,单击底部的”复制到文件”按钮(如图6所示)。

     

图 6,通过这个对话框将证书复制为文件

  1. 随后可以看到一个证书导出向导对话框,在向导的第一个页面上单击”下一步”。

  2. 随后可以看到图7所示的导出文件格式页面,在这里选择默认的”DER编码二进制X.509″,然后单击”下一步”。

图 7,选择正确的证书导出格式

  1. 接下来为证书文件指定一个保存位置,可以单击”浏览”按钮进行定位。选择好之后单击”下一步”。

  2. 单击”完成”,证书导出操作结束。

至此,我们已经得到了目标软件的.cer格式的证书,利用这个证书我们可以按照上文介绍的方法创建证书规则,并对所有带有该证书的软件的运行进行控制。

哈希规则

要创建哈希规则,请在”其他规则”节点上单击鼠标右键,选择”新建哈希规则”,随后可以看到图8所示的对话框。

图 8,在这里创建哈希规则

首先,我们需要单击”浏览”按钮定位该队则应用到的软件的主文件,随后系统会自动为我们指定的文件计算散列信息,并保存到系统中,同时在”文件信息”文本框中还会显示我们选择的文件的详细信息。

接下来,需要根据实际需要在安全级别下拉菜单中选择不同的安全级别:不受限的、基本用户、不允许的。

最后,为了方便日后管理众多的规则,我们还可以在”描述”文本框中输入一定的描述性文字。

网络区域规则

这种规则可以让我们针对位于不同IE区域的.msi格式的软件安装文件的运行进行限制。要创建区域规则,请在请在”其他规则”节点上单击鼠标右键,选择”新建网络区域规则”,随后可以看到图8所示的对话框。

图 9,在这里创建网络区域规则

首先,我们可以从”网络区域”下拉菜单中选择不同的网络区域,然后可以从”安全级别”下拉菜单选择希望进行的设置。

路径规则

路径规则可以让我们对安装在某个路径下的软件,或者需要访问某个注册表路径的软件的运行进行控制。

要创建路径规则,请在”其他规则”节点上单击鼠标右键,选择”新建路径规则”,随后可以看到图9所示的对话框。

图 10,创建路径规则

如果要创建文件路径(可以是本地路径,例如”c:\windows”;或者UNC格式的网络路径,例如”\\Server\Folder”),请直接在”路径”文本框中输入,或者单击”浏览”按钮进行选择;如果要创建注册表路径,请直接在”路径”文本框中输入。在输入文件路径的时候,可以使用”*”和”?”通配符,同时还可以使用环境变量。

在给文件路径规则使用通配符的时候需要注意,如果同一个路径,有不同的路径规则进行控制,那么越具体的路径设置可以获得越高的优先级。例如,我们利用文件规则对”*.vbs”格式的文件禁止运行,但又通过文件路径规则对”\\LOGIN_SRV\Share\*.VBS”设置为”不受限的”,那么这些保存在特定服务器上的.vbs文件将可以正常运行,但其他位置保存的.vbs文件就无法运行。

在输入注册表路径的时候需要注意,输入的路径必须用半角的百分号(%)包裹起来,同时必须输入完整的根键名称,不能输入缩写。路径的格式是这样的:

%<Registry Hive>\<Registry Key Name>\<Value Name>%

例如,我们可以输入这样的路径:

%HKEY_LOCAL_MACHINE\Software\Microsoft%

但不能输入这样的路径:

%HKLM\Software\Microsoft%

输入好路径后,在”安全级别”下拉菜单中选择希望使用的设置。

使用举例

关于软件限制策略的介绍就是上面这些。那么在了解了所有的概念后,怎样才能根据需要设置出符合要求的策略来?下文会以家庭和办公室两种环境进行模拟。

家庭环境:禁止特定程序运行

家长需要使用Windows Live Messenger联系朋友,可不希望孩子用这个软件在网上和陌生人聊天,这时候可以考虑使用软件限制策略。

要使用这个功能,家长必须使用管理员帐户,孩子则必须使用非管理员帐户。这样做主要有两个目的:首先,在单机环境下,软件限制策略只能对所有本地帐户生效,但有一个例外,就是管理员帐户,我们可以通过组策略决定软件限制策略是否对管理员帐户生效。另外,不让孩子使用管理员帐户,可以防止孩子私自修改相关策略,取消限制。

完整的操作过程是这样的:

  1. 运行secpol.msc打开本地安全策略控制台,从窗口左侧的控制台树中依次进入”安全设置-软件限制策略”,用鼠标右键单击”软件限制策略”,选择”创建软件限制策略”。接着双击右侧的”强制”策略,把”将软件限制策略应用到下列用户”选项设置为”除本地管理员以外的所有用户”。

  2. 接着创建禁止运行Windows Live Messenger的策略。在”其他规则”节点上单击鼠标右键,选择”新建路径规则”,在随后打开的对话框中单击”浏览”按钮,然后选择Windows Live Messenger的安装目录。确定目录后在”安全级别”下拉菜单中选择”不允许的”。

这样就设置完成了。现在请考虑,为什么在这里我们要使用路径规则,而不使用其他规则?如果使用证书规则,那么所有带有微软数字签名的软件都将无法使用,而Windows Vista中这样的软件数不胜数。如果使用哈希规则,那么一旦Windows Live Messenger升级了,哈希改变,就会导致显示失效。

看看会怎样吧。让孩子使用自己的帐户登录系统,运行其他软件,都正常,但在尝试运行Windows Live Messenger的时候会看到下图所示的错误提示信息。

公司环境:允许特定程序运行

公司里的情况就复杂多了,老板可能希望员工只使用工作上需要的程序,而禁止运行其他任何和工作无关的程序。假设老板希望在保证Windows正常运行的情况下,只允许员工运行AutoCAD,不允许使用其他任何程序,完整的操作过程是这样的:

  1. 首先和上面的例子一样,给员工创建非管理员帐户,当然,原因也是一样的。

  2. 接着运行secpol.msc打开本地安全控制台,创建软件限制策略,并将”强制”策略设置为”除本地管理员以外的所有用户”。

  3. 进入到”安全级别”节点,在”不允许的”节点上单击鼠标右键,选择”设置为默认”,并在随后出现的提示对话框上单击”是”。这样才可以在禁止运行所有程序的前提下只允许指定的程序运行。

  4. 进入到”其他规则”节点,一定要注意,取决于实际情况,这里可能会出现一些安全级别显示为”不受限的”的规则,不要编辑或者删除这些规则,只有存在这些规则才能保证操作系统能够正常运行。用鼠标右键单击”其他规则”节点,选择”新建哈希规则”。在随后出现的对话框中单击”浏览”按钮,选择AutoCAD软件的主文件,然后在”安全级别”下拉菜单中选择”不受限的”。

注意:这种方法无法限制Windows自带的程序。

软件限制策略使用建议

基本上,和软件限制策略有关的概念性内容就是上面这些了,很容易,但是如何利用这些概念创建出能够保证系统和信息安全的规则则需要长期的练习。同时在使用该功能的时候还有一些问题需要注意。

首先,如果设置的策略对所有用户,包括管理员都生效,但因为自己设置错误,导致系统无法使用,甚至本地安全策略控制台都打不开,这时候该怎么办?遇到这种情况也不用着急,只要在安全模式下使用管理员帐户登录即可,安全模式下软件限制策略不会生效,因此我们可以在安全模式下修改错误的设置。

另外,请密切注意你的设置在保证限制的同时,是否会影响到用户的使用。例如,如果我们需要在禁止使用其他软件的同时允许使用Windows Live Messenger和客户交流,那么是否只要对msnmsgr.exe(Windows Live Messenger的主程序)创建一条哈希规则就可以了?这样做该软件确实可以使用,但功能上会受到限制,例如语音通信或者视频通信,虽然也是在Windows Live Messenger中完成的,但实际上这些应用由专门的程序来完成。因此在创建规则的时候,一定要确保不仅可以保证必要软件的正常使用,还得保证所有需要的功能都不会受到限制。

最后,单纯使用软件限制策略能否完全保证实现目的?假如我们通过路径规则禁止员工使用QQ,员工将QQ的安装目录移动到其他位置,只要让路径变化了,那么这条策略就等于失效。因此在使用策略限制软件使用的同时,还需要配合NTFS权限,禁止员工移动文件到其他目录,或者禁止给某些目录写入新的文件。

本文已刊登于《个人电脑》杂志

分享:

《活用软件限制策略》上有4条评论

  1. 求教
    公司环境:允许特定程序运行
    选择”新建哈希规则”。在随后出现的对话框中单击”浏览”按钮,选择AutoCAD软件的主文件,然后在”安全级别”下拉菜单中选择”不受限的”。
    CAD软件只能通过双激AutoCAD软件的主文件才能运行,但在卓面及开始菜单就运行不了,有什么方法解决

    谢谢

  2. 这个问题确实存在,因为对于快捷方式,实际上也是文件(.lnk扩展名),因此如果默认的安全级别是“不允许的”,那么就会出现这样的问题,因为没有为这个程序的快捷方式对应的.lnk文件设置哈希规则。

    但是我试验了一下,直接对快捷方式创建哈希规则也没用。不过我想到了一个变通的方法。

    假设默认的安全级别是“不允许的”,并且通过设置,让系统可以正常运行起来,随后需要允许某些特定的程序可以通过快捷方式来执行,例如AutoCAD。

    首先根据哈希规则,将批准使用的软件设置为“不受限的”,然后在桌面上新建一个文件夹,可以起名为“允许的程序”(或者其他名称),将允许使用的程序的快捷方式都放在这个文件夹里,然后对这个文件夹设置NTFS权限,只允许读取。接着对这个文件夹创建路径规则,允许该路径下程序运行。

    这样,就算用户将其他程序的快捷方式拖动到桌面上,也无法运行。只有保存在“允许的程序”文件夹里的快捷方式,才能运行程序。而且因为权限的缘故,用户不能将其他程序的快捷方式放在这个文件夹里。问题应该可以解决了。

    如果还有问题,可以继续留言。

  3. DC域控上:通过组策略用户配置——WINDOWS——安全设置全——软件限制策略——路径策略 设置如下: 1、默认所有软件不允许的,2、设置d:\aaa\test.lnk禁止运行 3、限制d:\aaa\test.exe禁止运行

    终端服务器上设置:1、USERS对d:\aaa拥有读取、写入权限 2、d:\aaa\test.lnk链接到c:\windows\notepad.exe 3、d:\aaa\test.exe为notepad.exe重命名

    终端用户登陆到终端服务器后:1、可以成功运行d:\aaa\test.lnk且启动了notepad.exe 2、不能运行test.exe

    请教高手,为什么组策略不能限制test.lnk的运行。

    以上问题在单机(未加入域)上测试过,可以实现限制上述的test.lnk快捷方式的运行,与上面的区别是在本地计算机策略——计算机配置——WINDOWS设置——安全设置——软件限制策略——路径策略中实现的。

    而上面的是在域控上的一条策略中——用户配置——WINDOWS设置——安全设置——软件限制策略——路径策略实现的。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

发表评论前,先做个简单的数学题吧: * Time limit is exhausted. Please reload CAPTCHA.