脚本安全性

 

适用于: Exchange Server 2007 SP3, Exchange Server 2007 SP2, Exchange Server 2007 SP1, Exchange Server 2007

上一次修改主题: 2007-02-12

本主题介绍 Exchange 命令行管理程序中的脚本安全性如何帮助防止有害脚本或其他不需要的脚本在组织中运行,以及可以使用哪些选项来修改脚本安全性,以符合组织的需求。

通常,您接触的脚本来自三种不同的来源:您自己、组织中的其他人员以及组织以外(例如 Internet)的脚本编写者。如果是您自己编写脚本,则您相信脚本可以执行设计的功能。如果您与组织中的其他管理员共享脚本,则这些管理员也会信任该脚本,但原因仅仅是他们信任您。

如果脚本来自其他来源,例如 Internet,则脚本安全性就成为一个问题。对于来自组织未知来源的脚本,信任它们的唯一方式是直接检查脚本代码,并在隔离的实验室环境中对其进行测试。此过程可能是费时乏味的。但建议采用此做法来防止意外执行恶意代码或破坏性的代码。

Exchange 命令行管理程序支持数字签名建议的使用方式,以确保创建脚本后,该脚本不被更改。有关数字签名的详细信息,请参阅本主题后面内容中的“代码签名基础知识”。

脚本执行模式

Exchange 命令行管理程序可以使用四种脚本执行模式,根据脚本的签名方式以及脚本是来自已知来源还是未知来源,来控制脚本的使用方式。下表描述了每种脚本执行模式。

脚本执行模式

模式 说明

Restricted 模式

不运行任何脚本,即使脚本是由受信任的发布者签名的,也是如此。

AllSigned 模式

所有脚本必须先获得受信任发布者的数字签名才可以运行。

RemoteSigned 模式

运行本地创建的所有脚本。不运行从远程位置(例如 Internet)下载的不可信脚本。这是默认的脚本执行模式。

Unrestricted 模式

运行所有脚本,无论它们是否已进行数字签名或已得到信任。除非在可控的非生产测试环境中运行脚本,否则不建议使用 Unrestricted 模式。

若要更改默认的 RemoteSigned 脚本执行模式,请在 Exchange 命令行管理程序中使用 Set-ExecutionPolicy cmdlet。例如,若要将执行策略更改为 AllSigned 模式,请运行以下命令:

Set-ExecutionPolicy AllSigned

Exchange 命令行管理程序立即识别对策略的更改。

对于希望为运行 Exchange 命令行管理程序的所有计算机设置一致的脚本执行模式的大型组织,应使用 Active Directory 组策略应用脚本执行模式设置。您应配置 Active Directory 组策略,将位于 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell 注册表项下的 ExecutionPolicy 值设置为所需的脚本执行模式。

Caution警告:
UNRESOLVED_TOKEN_VAL(exRegistry)

代码签名基础知识

“数字签名”是使用公钥签名算法创建的,该算法使用称为密钥对的两个不同加密密钥:公钥和私钥。私钥只有其所有者知道,而公钥可供任何用户使用。在数字签名中,私钥将生成签名,而相应的公钥将验证该签名。

“证书”是一个数字文档,通常用于身份验证,可以帮助保护开放网络中的信息。证书可以将公钥安全地绑定到持有相应私钥的实体。证书由证书颁发机构 (CA) 进行数字签名。通过使用代码签名证书,脚本的作者可以为脚本文件添加数字签名。在此过程中,将会使用私钥来创建并加密脚本的单向哈希值。加密哈希值是为脚本文件添加的数字签名字符串。此数字签名字符串将作为注释,以免影响脚本的功能。

如果在需要代码签名的 Exchange 命令行管理程序环境中运行此脚本,则会为脚本文件生成一个新的单向哈希值。使用公钥解密脚本文件包含的加密哈希值后,会将单向哈希值与其进行比较。如果脚本在签名后未发生任何更改,哈希值将是匹配的。然后,计算机将通过向受信任的证书颁发机构构建一个证书链,来尝试验证签名是否来自受信任的发布者。如果确定可信,则会运行该脚本。

脚本是否来自受信任的来源,取决于用于对脚本进行数字签名的代码签名证书的来源。通常存在两种类型的证书:

  • 由受信任的证书颁发机构颁发的证书   证书颁发机构先验证申请者的身份,然后才颁发代码签名证书。颁发机构可以是销售证书的第三方外部公共机构,也可以是组织主办的内部证书颁发机构。如果使用此类证书对脚本进行签名,则可以与识别并信任颁发该证书的证书颁发机构的其他计算机上的用户共享该脚本。

  • 自签名证书   对于此类证书,您的计算机就是创建证书的机构。自签名证书的优点在于,您可以在自己的计算机上编写、签署和运行脚本。但是,无法在其他计算机上运行您的脚本,因为其他计算机无法将您的计算机识别为受信任的证书颁发机构。如果其他计算机不信任您的计算机,则无法验证您的自签名,而脚本也将无法运行。

用于管理代码签名的 Cmdlet

Exchange 命令行管理程序包含两个用于管理代码签名的 cmdlet。Set-AuthenticodeSignature cmdlet 用于为脚本文件添加数字签名。Set-AuthenticodeSignature cmdlet 将要进行签名的文件的名称用作第一个位置参数。如果该文件不在当前的工作目录中,则必须提供该文件的路径。此 cmdlet 的第二个输入参数是用于签名的证书。该证书存储在本地证书存储中。必须以引用该证书的字符串的形式提供此参数。可通过“Cert: 驱动器”访问该证书。

用于管理代码签名的第二个 cmdlet 是 Get-AuthenticodeSignature cmdlet。使用 Get-AuthenticodeSignature cmdlet 来检查和确认作为输入参数提供的文件的当前代码签名状态。如果在使用已进行代码签名的脚本时出现问题,Get-AuthenticodeSignature cmdlet 的输出将提供有用的故障排除信息。

如果要运行来自外部来源(例如 Microsoft)的脚本,则必须根据环境的脚本执行模式调整脚本。可按基本的 .txt 文件格式接收脚本,并将其重命名为 .ps1 脚本文件,然后,在应用任何所需签名后运行这些脚本,就如同脚本是您自己编写的一样。

有关数字签名和脚本执行策略的详细信息,请在 Exchange 命令行管理程序中运行以下命令:Get-Help About_Signing。此命令将返回帮助信息,其中包含有关对脚本进行数字签名的详细说明。