Caspol.exe (程式碼存取安全性原則工具)

更新:2011 年 4 月

程式碼存取安全性 (CAS) 原則工具 (Caspol.exe) 可以讓使用者和系統管理員修改電腦原則層級、使用者原則層級和企業原則層級的安全性原則。

重要事項重要事項

在 .NET Framework 4 版 (含) 以後的版本中,除非將 <legacyCasPolicy> 項目設為 true,否則 Caspol.exe 並不會影響 CAS 原則。如需詳細資訊,請參閱.NET Framework 4 中的安全性變更

注意事項注意事項

64 位元電腦包含 64 位元和 32 位元版的安全性原則。為了確保您的原則變更會套用至 32 位元和 64 位元應用程式,請使用 Visual Studio 命令提示字元執行 Caspol.exe 的 32 位元版本,並使用 Visual Studio x64 Win64 命令提示字元執行 64 位元版本。

這個工具會自動隨 Visual Studio 和 Windows SDK 一起安裝。 若要執行工具,建議您使用 Visual Studio 命令提示字元或 Windows SDK 命令提示字元。 這些公司可讓您輕鬆地執行工具,而不需瀏覽至安裝資料夾。 如需詳細資訊,請參閱Visual Studio 和 Windows SDK 命令提示字元

  • 如果您已經在電腦上安裝 Visual Studio:在工作列上,依序按一下 Start、All Programs、Visual Studio、Visual Studio Tools,然後按一下 Visual Studio Command Prompt。

    -或-

    如果您已經在電腦上安裝 Windows SDK:在工作列上,依序按一下 Start、All Programs、Windows SDK 的資料夾,然後按一下Command Prompt(或 CMD Shell)。

  • 在命令提示字元中輸入下列文字:

caspol [options]

參數

選項

描述

-addfulltrustassembly_file

-afassembly_file

加入實作自訂安全物件 (例如自訂使用權限或自訂成員資格條件) 的組件至指定原則層級的完全信任組件清單。 assembly_file 引數指定要加入的組件。 這個檔案必須使用強式名稱簽署。 您可以使用強式名稱工具 (Sn.exe),以強式名稱來簽署組件。

將含有自訂使用權限的使用權限集合加入原則時,必須將實作自訂使用權限的組件加入該原則層級的完全信任清單。 實作安全性原則 (例如電腦原則) 中所用的任何自訂安全性物件 (例如自訂程式碼群組或成員資格條件) 的組件,都必須加入至完全信任組件清單。

注意事項警告
如果實作自訂安全性物件的組件參考其他的組件,您就必須先將參考的組件加入完全信任組件清單中。使用 Visual Basic、C++ 和 JScript 建立的自訂安全性物件會分別參考 Microsoft.VisualBasic.dll、Microsoft.VisualC.dll 或 Microsoft.JScript.dll。依預設,這些組件不在完全信任組件清單中。您必須在加入自訂安全性物件之前,先將適當的組件加入至完全信任清單中,否則將會破壞安全性系統,造成所有的組件都無法載入。在這種情況下,Caspol.exe -all -reset 選項將不會修復安全性。若要修復安全性,您必須手動編輯安全性檔案,以移除自訂安全性物件。

-addgroup {parent_label | parent_name} mship pset_name [flags]

-ag {parent_label | parent_name} mship pset_name [flags]

加入新的程式碼群組至程式碼群組階層架構。 您可以指定 parent_labelparent_nameparent_label 引數會指定標籤 (例如 1. 或 1.1.) 屬於所新增之程式碼群組的父代的程式碼群組。 parent_name 引數會指定已被加入的父代程式碼群組的名稱。 由於可以交替使用 parent_labelparent_name,Caspol.exe 必須能夠區分這兩者。 因此,parent_name 不能以數字為開頭。 此外,parent_name 只可以包含 A-Z、0-9 以及底線字元。

mship 引數會指定新程式碼群組的成員資格條件。 如需詳細資訊,請參閱本節稍後的 mship 引數表。

pset_name 引數是將要與新程式碼群組產生關聯的使用權限集合名稱。 您也可以為新群組設定一個或多個 flags。 如需詳細資訊,請參閱本節稍後的 flags 引數表。

-addpset {psfile |psfile pset_name}

-ap {named_psfile |psfile pset_name}

加入新的具名使用權限集合至原則。 使用權限集合必須在 XML 中進行撰寫並儲存在 .xml 檔中。 如果 XML 檔包含使用權限集合的名稱,只會指定該檔案 (psfile)。 如果 XML 檔不包含使用權限集合名稱,必須同時指定 XML 檔名 (psfile) 和使用權限集合名稱 (pset_name)。

請注意在使用權限集合中使用的所有權限,都必須定義於已包含在全域組件快取中的組件。

-a[ll]

指示所有接在這個之後的選項將套用到電腦、使用者和企業原則。 -all 選項永遠參考目前登入使用者的原則。 請參閱 -customall 選項,參考除了目前使用者以外的使用者原則。

-chggroup {label |name} {mship | pset_name |

flags}

-cg {label |name} {mship | pset_name |

flags}

變更程式碼群組的成員資格條件、使用權限集合或 exclusivelevelfinalnamedescription 旗標的設定值。 您可以指定 label 或是 namelabel 引數會指定標籤 (例如 1. 或 1.1) 的程式碼群組。 引數 name 會指定要變更之程式碼群組的名稱。 由於 labelname 可以交替使用,Caspol.exe 必須能夠區分這兩者。 因此,name 不能以數字為開頭。 此外,name 只可以包含 A-Z、0-9 以及底線字元。

pset_name 引數指定使用權限集合的名稱來與程式碼群組產生關聯。 如需 mshipflags 引數的詳細資訊,請參閱本章節後半內容的表格。

-chgpset psfile pset_name

-cppsfile pset_name

變更具名使用權限集合。 psfile 引數為使用權限集合提供新的定義;它是 XML 格式的序列使用權限集合檔案。 pset_name 引數指定您想要變更的使用權限集合名稱。

-customall路徑

-ca path

指示所有接在這個之後的選項將套用到電腦、企業和指定的自訂使用者原則。 您必須使用 path 引數來指定自訂使用者的安全組態檔的位置。

-cu[stomuser] path

允許管理不屬於代表目前正執行 Caspol.exe 的使用者的自訂使用者原則。 您必須使用 path 引數來指定自訂使用者的安全組態檔的位置。

-enterprise

-en

指示所有接在這個之後的選項將套用到企業層級原則。 不是企業系統管理員的使用者沒有足夠的權限修改企業原則,但是可以檢視它。 在非企業案例中,依照預設,這個原則不會與電腦和使用者原則牴觸。

-e[xecution] {on |關閉}

開啟或關閉在程式碼開始執行前檢查使用權限執行的機制。

注意事項注意事項
這個參數已在 .NET Framework 4 (含) 以後的版本中移除。如需詳細資訊,請參閱.NET Framework 4 中的安全性變更

-f[orce]

抑制工具的自行解構測試,並變更使用者所指定的原則。 一般來說,Caspol.exe 會檢查是否有對其本身造成無法正常執行的任何原則變更;如果有的話,Caspol.exe 不會儲存該原則變更並印出錯誤訊息。 若要強制 Caspol.exe 來變更原則 (即使這個原則會造成 Caspol.exe 本身無法執行),請使用 -force 選項。

-h[elp]

顯示 Caspol.exe 的命令語法和選項。

-l[ist]

列出程式碼群組階層架構以及指定的電腦、使用者、企業和所有原則的使用權限集合。 如果 Caspol.exe 不是 Null 的話,會先顯示程式碼群組的標籤,後面接著名稱。

-listdescription

-ld

列出指定原則層級的所有程式碼群組描述。

-listfulltrust

-lf

列出指定原則層級的完全信任組件清單內容。

-listgroups

-lg

顯示指定原則層級或所有原則層級的程式碼群組。 如果 Caspol.exe 不是 Null 的話,會先顯示程式碼群組的標籤,後面接著名稱。

-listpset-lp

顯示指定原則層級或所有原則層級的使用權限集合。

-m[achine]

指示所有接在這個之後的選項將套用到電腦層級原則。 不是系統管理員的使用者沒有足夠的權限修改電腦原則,但是可以檢視它。 對系統管理員而言,-machine 是預設值。

-polchgprompt {on |關閉}

-pp {on |關閉}

啟用或停用提示,該提示顯示於每當使用會造成原則變更的選項來執行 Caspol.exe 時。

-quiet

-q

使造成原則變更的選項暫時不再顯示提示。 不過全域變更提示設定並不會變更。 僅可以在使用單一命令時,才可以使用該選項,如此才不會停用所有 Caspol.exe 命令的提示。

-r[ecover]

從備份檔復原原則。 當原則變更時,Caspol.exe 會將舊原則儲存到備份檔中。

-remfulltrustassembly_file

-rf assembly_file

從原則層級的完全信任清單中移除組件。 如果使用權限集合包含原則不再使用的自訂使用權限,應該執行這項作業。 不過,只有在組件沒有實作任何其他還在使用中的自訂使用權限,才可以從完全信任清單中移除實作自訂使用權限的組件。 當您從清單中移除組件時,也必須移除它所依存的任何其他組件。

-remgroup {label |name}

-rg {label | name}

移除由其標籤或名稱指定的程式碼群組。 如果指定的程式碼群組有子程式碼群組的話,Caspol.exe 也會移除所有子程式碼群組。

-rempsetpset_name

-rppset_name

從原則中移除指定的使用權限集合。 pset_name 引數指示要移除的使用權限集合。 只要使用權限集合沒有與任何程式碼群組產生關聯的話,Caspol.exe 會將它移除。 無法移除預設 (內建) 的使用權限集合。如需詳細資訊,請參閱具名使用權限集合

-reset

-rs

將原則回復到它的預設狀態並保存 (Persist) 到磁碟中。 當變更的原則似乎無法修復並且您想要以安裝的預設值重新開始時,這非常有用。 當您想要以預設原則做為特定安全組態檔的修改起點時,重設也很方便。 如需詳細資訊,請參閱手動編輯安全組態檔。

-resetlockdown

-rsld

將原則傳回預設狀態的更嚴格的版本,並保存至磁碟;建立先前電腦原則的備份並將它保存至稱為 security.config.bac 的檔案。 鎖定原則類似於預設原則,差別在於原則沒有授與使用權限可從 Local Intranet、Trusted Sites 和 Internet 區域撰寫程式碼,而對應的程式碼群組沒有子程式碼群組。

-resolvegroupassembly_file

-rsg assembly_file

顯示特定組件 (assembly_file) 所屬的程式碼群組。 根據預設,這個選項會顯示這個組件所屬之電腦、使用者和企業的原則層級。 如果只要檢視一個原則層級,請使用這個選項配合 -machine-user-enterprise 選項。

-resolvepermassembly_file

-rsp assembly_file

如果允許組件執行的話,顯示指定 (或預設) 的安全性原則層級會授與組件的所有使用權限。 assembly_file 引數指定組件。 如果指定 -all 選項,Caspol.exe 會根據使用者、電腦和企業原則計算組件的使用權限,否則會套用預設的行為規則 (Rule)。

-s[ecurity] {on |關閉}

開啟或關閉程式碼存取安全性。 指定 -s off 選項並不會停用以角色為基礎的安全性。

注意事項注意事項
這個參數已在 .NET Framework 4 (含) 以後的版本中移除。如需詳細資訊,請參閱.NET Framework 4 中的安全性變更
注意事項警告
停用程式碼存取安全性時,所有的程式碼存取需求都會成功。停用程式碼存取安全性會讓系統容易受惡意程式碼的攻擊,如病毒和破壞程式。關閉安全性可取得一些額外的效能,但應該在已採取其他安全措施,以協助確保整體系統安全性沒有漏洞的情況下,才能這樣做。其他安全性措施的範例,包括從公用網路中斷連結、用實際方法保全電腦等等。

-u[ser]

指示所有接在這個之後的選項將套用到代表正執行 Caspol.exe 的使用者的使用者層級原則。 對於非系統管理使用者,-user 是預設值。

-?

顯示 Caspol.exe 的命令語法和選項。

指定程式碼群組的成員資格條件的 mship 引數可以與 -addgroup-chggroup 選項一起使用。 每個 mship 引述都會實作為 .NET Framework 類別。 若要指定 mship,請使用下列其中之一。

引數

描述

-allcode

指定所有程式碼。 如需這個成員資格條件的詳細資訊,請參閱 AllMembershipCondition 類別

-appdir

指定應用程式目錄。 如果指定 -appdir 做為成員資格條件,程式碼的 URL 辨識項會與該程式碼的應用程式目錄辨識項相比。 如果兩個辨識項值相同,則符合這個成員條件。 如需這個成員資格條件的詳細資訊,請參閱 ApplicationDirectoryMembershipCondition 類別

-自訂xmlfile

加入自訂成員資格條件。 強制型 xmlfile 引數指定含有自訂成員資格條件的 XML 序列化 (Serialization) 的 .xml 檔案。

-hash hashAlg {-hex hashValue |-file assembly_file }

指定具有指定組件雜湊的程式碼。 若要使用雜湊做為程式碼群組成員資格條件,必須指定雜湊值 (Hash Value) 或組件檔。 如需這個成員資格條件的詳細資訊,請參閱 HashMembershipCondition 類別

-pub { -cert cert_檔案_名稱 |

-file signed_file_name |-hex 十六進位_字串 }

指定具有指定軟體發行者 (Publisher) 的程式碼,表示憑證檔、檔案上的簽章或 X509 憑證的十六進位表示。 如需這個成員資格條件的詳細資訊,請參閱 PublisherMembershipCondition 類別

-site website

指定具有指定 Site of Origin (SoO) 檔的程式碼。 例如:

-site www.proseware.com

如需這個成員資格條件的詳細資訊,請參閱 SiteMembershipCondition 類別

-strong -file file_name {name |-noname} {version |-noversion}

指定具有特定強式名稱的程式碼,指定檔案名稱、組件名稱為字串和格式為 major.minor.build.revision 的組件版本。 例如:

-strong -file myAssembly.exe myAssembly 1.2.3.4

如需這個成員資格條件的詳細資訊,請參閱 StrongNameMembershipCondition 類別

-urlURL

指定源自於指定 URL 的程式碼。 這個 URL 必須包括通訊協定,例如 http:// 或 ftp://。 此外,可以使用萬用字元 (*) 指定來自特定 URL 的多個組件。

注意事項注意事項
因為 URL 可以使用多個名稱來識別,所以將 URL 當做成員資格條件使用並不是確定程式碼識別的安全方法。請盡可能使用強式名稱 (Strong Name) 成員資格條件、發行者成員資格條件或雜湊成員資格條件。

如需這個成員資格條件的詳細資訊,請參閱 UrlMembershipCondition 類別

-zonezonename

指定具有指定原始區域的程式碼。 zonename 引數可以是下列的值:MyComputerIntranetTrustedInternetUntrusted。 如需這個成員資格條件的詳細資訊,請參閱 ZoneMembershipCondition 類別。

使用下列其中一個選項指定可以與 -addgroup-chggroup 選項一起使用的 flags 引數。

引數

描述

-description "description"

如果與 –addgroup 選項一起使用,會指定要加入之程式碼群組的描述。 如果與 –chggroup 選項一起使用,則指定要編輯之程式碼群組的描述。 description 引數必須括在雙引號中。

-exclusive {on|off}|關閉}

設為 on 時,表示當部分程式碼符合程式碼群組的成員資格條件時,只會考量與您所要加入或修改的程式碼群組關聯的使用權限集合。 這個選項設為 off 時,Caspol.exe 會考量在原則層級中所有相符程式碼群組的使用權限集合。

-levelfinal {on|關閉}

設為 on 時,表示不考量發生在已加入或已修改的程式碼群組中的層級下的原則層級。 這個選項通常用於電腦原則層級。 例如,如果在電腦層級為程式碼群組設定這個旗標,並且部分程式碼符合這個程式碼群組的成員資格條件,Caspol.exe 將不會為這個程式碼計算或套用使用者層級原則。

-name "name"

如果與 –addgroup 選項一起使用,會指定要加入之程式碼群組的指令碼名稱。 如果與 -chggroup 選項一起使用,則指定要編輯之程式碼群組的指令碼名稱。 name 引數必須括在雙引號中。 name 引數不能以數字為開頭,而且只能包含 A-Z、0-9 和底線字元。 以這個 name 來參考程式碼群組,而非以它們的數值標籤來參考。 這個 name 對編寫用途也非常有用。

備註

安全性原則是使用三個原則層級表示的:電腦原則、使用者原則和企業原則。 組件所接收的一組使用權限是由這三種原則層級允許的使用權限集合的交集所決定的。 程式碼群組的階層式結構表示每個原則層級。 每個程式碼群組具有成員資格條件,判斷哪一個程式碼是該群組的成員。 具名使用權限集合也與每個程式碼群組關聯。 這個使用權限集合指定了執行階段允許符合成員資格條件的程式碼具備的使用權限。 程式碼群組階層架構和與其關聯的具名使用權限集合一起定義並維護安全性原則的每一個層級。 您可以使用 -user-customuser-machine-enterprise 選項來設定安全性原則的層級。

如需安全性原則和執行階段如何判斷授與程式碼的使用權限之詳細資訊,請參閱安全性原則管理

參考程式碼群組和使用權限集合

若要簡化階層架構中程式碼群組的參考,-list 選項顯示程式碼群組的縮排清單與它們數字標籤 (1、1.1、1.1.1 等等)。 其他目標程式碼群組的命令列作業也使用數字標籤來參考特定的程式碼群組。

具名使用權限集合是由它們的名稱所參考。 -list 選項顯示程式碼群組清單,其後面接著該原則中可用的具名使用權限集合清單。 如需清單和執行階段所提供的內建使用權限集合的描述的詳細資訊,請參閱具名使用權限集合

Caspol.exe 行為

-s[ecurity] {on 除外的所有選項 |off} 使用與 Caspol.exe 搭配安裝的 .NET Framework 版本。 如果執行與執行階段的 X 版本一起安裝 Caspol.exe,則變更只會套用到該版本。 如果有執行階段一起安裝的其他功能,將不會被影響。 如果從命令列執行 Caspol.exe,而不是在特定版本的執行階段目錄中開始的話,該工具會從路徑中的第一個執行階段版本目錄執行 (通常是最新安裝的執行階段版本)。

-s[ecurity] {on |off} 選項是整個電腦的作業。 關閉程式碼存取安全性會結束電腦上所有 Managed 程式碼和所有使用者的安全性檢查。 如果已安裝 .NET Framework 的並存版本,這個命令會關閉電腦上安裝之所有版本的安全性。 雖然 -list 選項會顯示安全性已關閉,但沒有別的選項會向其他使用者明白指示安全性已經關閉。

當不具有管理權限的使用者執行 Caspol.exe 時,除非指定 -machine 選項,否則所有選項都將參考使用者層級原則。 當系統管理員執行 Caspol.exe 時,除非指定 -user 選項,否則所有選項都將參考電腦原則。

必須授與 Caspol.exe 對等的 Everything 使用權限集合才能運作。 該工具有可防止原則被修改的保護機制,可能會導致 Caspol.exe 無法被授與執行所需要的使用權限。 如果試圖進行這類變更,Caspol.exe 會告知您要求的原則變更將中斷工具,並且拒絕原則變更。 您可以使用 -force 選項為指定的命令關閉這個保護機制。

手動編輯安全組態檔

三個安全性組態檔對應到 Caspol.exe 所支援的三個原則層級:一個對應到電腦原則、一個對應到指定的使用者原則、還有一個對應到企業原則。 只有在使用 Caspol.exe 變更電腦、使用者或企業原則時,才會在磁碟上建立這些檔案。 如果需要,您可以使用 Caspol.exe 中的 –reset 選項,將預設的安全性原則儲存到磁碟中。

在大部分的狀況下,不建議手動編輯安全組態檔。 不過,可能會有需要修改這些檔案的案例,例如系統管理員想要為特定使用者編輯安全組態檔。

範例

-addfulltrust

假設已將含有自訂使用權限的使用權限集合加入電腦原則。 這個自訂使用權限是實作於 MyPerm.exe 中,而 MyPerm.exe 則是參考 MyOther.exe 中的類別。 這兩個組件都必須加入到完全信任組件清單。 下列命令會將 MyPerm.exe 組件加入電腦原則的完全信任清單。

caspol -machine -addfulltrust MyPerm.exe

下列命令會將 MyOther.exe 組件加入電腦原則的完全信任清單。

caspol -machine -addfulltrust MyOther.exe

-addgroup

下列命令會將子程式碼群組加入電腦原則程式碼群組階層架構的根 (Root)。 新程式碼群組是網際網路區域的成員,並且與 Execution 使用權限集合產生關聯。

caspol -machine -addgroup 1.  -zone Internet Execution

下列命令會加入可提供 \\netserver\netshare 近端內部網路權限共用的子節點群組。

caspol -machine -addgroup 1. -url \\netserver\netshare\* LocalIntranet

-addpset

下列命令會將 Mypset 使用權限集合加入使用者原則。

caspol -user -addpset Mypset.xml Mypset

-chggroup

下列命令會變更在程式碼群組 1.2 的使用者原則中設定的權限。 至 [執行] 權限集合。

caspol -user -chggroup 1.2. Execution

下列的命令會變更程式碼群組 1.2.1 預設原則中的成員資格條件 。 並變更 exclusive 旗標的設定。 成員資格條件被定義成源自於網際網路區域的程式碼,且 exclusive 旗標是開啟的。

caspol -chggroup 1.2.1. -zone Internet -exclusive on

-chgpset

下列命令會將使用名稱為 Mypset 的使用權限集合變更為 newpset.xml 中所包含的使用權限集合。 請注意,目前的版本不支援變更正由程式碼群組階層架構使用中的使用權限集合。

caspol -chgpset Mypset newpset.xml

-force

下列命令會使得使用者原則的根程式碼群組 (標記為 1) 與 Nothing 具名使用權限集合產生關聯。 這會妨礙 Caspol.exe 執行。

caspol -force -user -chggroup 1 Nothing

-recover

下列命令會將最近儲存的電腦原則復原。

caspol -machine -recover

-remgroup

下列命令會將標記為 1.1 的程式碼群組移除。 如果這個程式碼群組有任何子程式碼群組,也會刪除這些群組。

caspol -remgroup 1.1.

-rempset

下列命令會將 Execution 使用權限集合從使用者原則中移除。

caspol -user -rempset Execution

下列命令會將 Mypset 從使用者原則層級中移除。

caspol -rempset MyPset

-resolvegroup

下列命令會顯示 myassembly 所屬之電腦原則的所有程式碼群組。

caspol -machine -resolvegroup myassembly

下列命令會顯示 myassembly 所屬之電腦、企業和指定的自訂使用者原則的所有程式碼群組。

caspol -customall "c:\config_test\security.config" -resolvegroup myassembly

-resolveperm

下列命令會依據電腦和使用者原則層級計算 testassembly 的使用權限。

caspol -all -resolveperm testassembly

請參閱

參考

Visual Studio 和 Windows SDK 命令提示字元

其他資源

.NET Framework 工具

使用程式碼存取安全性原則工具 (Caspol.exe) 設定安全性原則

安全性原則管理

變更記錄

日期

記錄

原因

2011 年 4 月

加入使用 Visual Studio 和 Windows SDK 命令提示字元的相關資訊。

資訊加強。

2010 年 8 月

新增關於 64 位元版 Caspol.exe 的資訊。

資訊加強。

2010 年 8 月

已更正最後一個範例中的語法。

客戶回函。