指令碼安全性

 

適用版本: Exchange Server 2007 SP3, Exchange Server 2007 SP2, Exchange Server 2007 SP1, Exchange Server 2007

上次修改主題的時間: 2007-02-12

本主題說明 Exchange 管理命令介面中的指令碼安全性如何防止有害或無用指令碼在您的組織中執行,以及說明可以使用哪些選項來修改指令碼安全性,以符合您組織的需求。

通常您會遇到來自三個不同來源的指令碼:您自己、組織中的另一個人,以及來自組織外 (例如網際網路) 的指令碼撰寫者。如果您撰寫指令碼,請信任指令碼會執行其被設計來執行的動作。如果您與組織中的其他系統管理員共用指令碼,他們也可能信任指令碼,但是只因為他們信任您。

當指令碼來自其他來源時,例如網際網路,便需擔心網際網路安全性。如果指令碼來自組織所不知的來源,您可以信任此指令碼的唯一方法就是直接檢查指令碼,並在隔離的實驗環境中測試它。此處理程序可能很耗時且冗長乏味,但這是建議的作法,因為如此才能防止意外執行惡意或毀滅性的程式碼。

Exchange 管理命令介面支援建議您使用數位簽章,以確定在建立指令碼之後,不會變更指令碼。如需數位簽章的相關資訊,請參閱本主題稍後的<程式碼簽署基礎>。

指令碼執行模式

有四種指令碼執行模式,可供 Exchange 管理命令介面控制如何使用指令碼,而使用的模式則取決於如何簽署它們,以及它們來自已知或未知來源而定。下表描述每一種指令碼執行模式。

指令碼執行模式

模式 描述

Restricted 模式

即使信任的發行者簽署了指令碼,也不會執行它們。

AllSigned 模式

信任的發行者必須以數位方式簽署所有指令碼,然後才能執行它們。

RemoteSigned 模式

將執行所有在本機建立的指令碼。不會執行從無法信任的遠端位置 (例如網際網路) 下載的指令碼。這是預設的指令碼執行模式。

Unrestricted 模式

不管指令碼是以數位方式簽署或已得到信任,都將執行所有指令碼。除非您是在託管制的非生產測試環境中執行指令碼,否則我們不建議使用 Unrestricted 模式。

若要從預設 RemoteSigned 指令碼執行模式變更指令碼執行模式,請在 Exchange 管理命令介面中使用 Set-ExecutionPolicy 指令程式。例如,若要將執行原則變更為 AllSigned 模式,請執行下列命令:

Set-ExecutionPolicy AllSigned

Exchange 管理命令介面會立即辨識出原則的變更。

大型組織若想要對執行 Exchange 管理命令介面的所有電腦設定一致的指令碼執行模式,應該藉由使用 Active Directory 群組原則來套用指令碼執行模式設定。您可設定 Active Directory 群組原則,將位於 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell 登錄機碼下的 ExecutionPolicy 值設為想要的指令碼執行模式。

Caution請注意:
不正確地編輯登錄可能會造成嚴重問題,而需要重新安裝作業系統。 因不正確地編輯登錄而造成的問題可能無法解決。 在編輯登錄之前,請先備份重要資料。

程式碼簽署基礎

「數位簽章」是使用公開金鑰簽章演算法所建立的,此演算法使用兩個不同的密碼編譯金鑰,稱為金鑰組:公開金鑰及私密金鑰。私密金鑰只有其擁有者才知道,而公開金鑰則是任何人皆可使用。在數位簽章中,私密金鑰會產生簽章,而對應的公開金鑰則會驗證簽章。

「憑證」是數位文件,通常用於驗證並協助保護開放網路上的資訊。憑證可安全地將公開金鑰繫結至持有對應私密金鑰的實體。憑證是由負責發行的憑證授權單位 (CA) 以數位方式簽署的。藉由使用程式碼簽署憑證,指令碼的作者可將數位簽章新增至指令碼檔案。在進行此處理程序期間,將建立指令碼的單向雜湊並使用私密金鑰來進行加密。加密的雜湊是新增至指令碼檔案的數位簽章字串。此數位簽章字串會被註銷,使其不會干擾指令碼的功能。

當此指令碼是在需要程式碼簽署的 Exchange 管理命令介面中執行時,將會產生指令碼檔案的新單向雜湊。在使用公開金鑰解密指令碼檔案之後,單向雜湊會與此指令碼檔案隨附的加密雜湊進行比較。在簽署指令碼之後,如果未以任何方法變更此指令碼,則雜湊將會相符。然後,電腦會與信任的憑證授權單位建立憑證鏈結,嘗試驗證簽章是否來自信任的發行者。如果信任通過驗證,就回執行指令碼。

指令碼是否來自信任的來源,取決於用來以數位方式簽署指令碼之程式碼簽署憑證的起源而定。通常有兩種類型的憑證:

  • 信任的憑證授權單位所發出的憑證   憑證授權單位會在發出程式碼簽署憑證之前驗證申請者的身分。負責發行的憑證授權單位可以是出售憑證的外部公開協力廠商,或是您組織所主控的內部憑證授權單位。如果使用此種憑證來簽署指令碼,則您可以與其他電腦 (可以辨識並信任發出憑證的憑證授權單位) 上的使用者共用指令碼。
  • 自行簽署的憑證   如果是此種憑證,表示您的電腦就是建立憑證的憑證授權單位。自行簽署的憑證的好處,就是您可以在電腦上撰寫、簽署及執行指令碼。但是您無法共用指令碼,讓它在其他電腦上執行,因為它們不會將您的電腦辨識為信任的憑證授權單位。如果它們不信任您的電腦,它們將無法驗證您自行簽署的簽章,因此指令碼將不會執行。

用於管理程式碼簽署的指令程式

Exchange 管理命令介面包括兩個用於管理程式碼簽署的指令程式。Set-AuthenticodeSignature 指令程式是用來將數位簽章新增至指令碼檔案。Set-AuthenticodeSignature 指令程式則會採用要簽署的檔案名稱作為它的第一個位置參數。如果檔案不在目前的工作目錄中,您必須提供檔案的路徑。此指令程式的第二個輸入參數是用於簽署的憑證。此憑證是儲存在本機憑證儲存區中。您必須以參照憑證的字串格式來提供此參數。憑證可以透過下列項目來存取:Cert磁碟機。

第二個用於管理程式碼簽署的指令程式是 Get-AuthenticodeSignature 指令程式。使用 Get-AuthenticodeSignature 指令程式,檢查並確認當作參數輸入來提供之檔案的目前程式碼簽署狀態。當使用程式碼簽署的指令碼時,如果發生問題,則來自 Get-AuthenticodeSignature 指令程式的輸出將提供有用的疑難排解資訊。

如果想要從外部來源 (例如 Microsoft) 執行指令碼,您必須根據環境的指令碼執行模式來改寫指令碼。您可以將指令碼當作基本 .txt 檔案來接收、將它們重新命名為 .ps1 指令碼檔案,然後在套用任何必要簽署之後,執行這些指令碼,就如同您已自行撰寫指令碼一般。

如需數位簽署及指令碼執行原則的相關資訊,請在 Exchange 管理命令介面中,執行下列命令:Get-Help About_Signing。此命令會傳回說明資訊,其中包括數位簽署指令碼的詳細指示。

若要確保您目前閱讀的是最新資訊,並尋找其他的 Exchange Server 2007 說明文件,請造訪 Exchange Server 技術資源中心.