The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

CasPol.exe 程式碼存取安全性原則工具幾個常用的指令

程式碼存取安全性(CAS, Code Access Security)是 .NET Framework 中非常重要的一部份,不過我發現大部分的 ASP.NET 開發人員並不清楚 CAS 是什麼,因為在開發 ASP.NET 的時候很少有機會去碰觸到這一塊,最近我們工程師在用 .NET 寫一個 COM 元件時就發生了 CAS 的權限問題,導致程式無法正常執行的情況。

我這篇不會多講有關於 CAS 的觀念,請各位到 MSDN 的 .NET Framework 中的安全性 單元學習相關知識,或是購買書籍來看,例如:Microsoft .NET Framework 2.0 應用程式開發基礎 Ⅱ

底下是我整理的一些程式碼存取安全性原則工具 (Caspol.exe)常用的參數與使用的情境:

1. 查詢某個組件所屬的程式碼群祖(Code Group)

caspol -resolvegroup "C:\Program Files\MyApplication\MyApplication.exe"

2. 查詢某個組件所擁有的使用權限(Permission)

caspol -resolveperm "C:\Program Files\MyApplication\MyApplication.exe"

3. 設定某個組件為「完全信任」

caspol -addfulltrust "C:\Program Files\MyApplication\MyApplication.exe"

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

4. 新增一個程式碼群祖(Code Group)到本機電腦原則(Machine)

caspol -machine -addgroup All_Code -url \\myserver\sharefolder\* LocalIntranet 
       -name "My_Code_Group"

注意事項:執行這行的時候會出現以下提示訊息:

Microsoft (R) .NET Framework CasPol 2.0.50727.1433
Copyright (c) Microsoft Corporation.  All rights reserved.

執行的作業將會變更安全性原則。
您確定要執行這項作業嗎? (yes/no)
不過,你要輸入 y 才能過關喔!如果你輸入的是 yes 就會出現 "儲存原則已中止" 的錯誤訊息!

5. 列出本機電腦原則(Machine)所有的程式碼群組

caspol -machine -lg

    這行指令會列出所有本機電腦原則(Machine)中的所有程式碼群組,並以編號的方式呈現,如下:

Microsoft (R) .NET Framework CasPol 2.0.50727.1433
Copyright (c) Microsoft Corporation.  All rights reserved.

安全性為 ON
執行檢查為 ON
原則變更提示為 ON

層級 = Machine

程式碼群組:

1.  (等位) All Code: Nothing
   1.1.  (等位) 區域 - MyComputer: FullTrust
      1.1.1.  (等位) StrongName - 0024000004800000940000000602000000240000525341
31000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C9992
1EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05
ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC496
3D261C8A12436518206DC093344D5AD293: FullTrust
      1.1.2.  (等位) StrongName - 00000000000000000400000000000000: FullTrust
   1.2.  (等位) 區域 - Intranet: LocalIntranet
      1.2.1.  (等位) All Code: 相同的 Web 網站
      1.2.2.  (等位) All Code: 相同的目錄 FileIO - 'Read, PathDiscovery'
   1.3.  (等位) 區域 - Internet: Internet
      1.3.1.  (等位) All Code: 相同的 Web 網站
   1.4.  (等位) 區域 - Untrusted: Nothing
   1.5.  (等位) 區域 - Trusted: Internet
      1.5.1.  (等位) All Code: 相同的 Web 網站
   1.6.  (等位) URL - \\myserver\sharefolder\*: LocalIntranet
成功

6. 刪除第 4 點所新增的程式碼群組

    如同第5點所示,1.6 就是我們剛剛在第4點新增的程式碼群組,所以刪除的語法如下:

caspol -rg 1.6

7. 將最近儲存的本機電腦原則(Machine)原則復原。

caspol -machine -recover

這個程式碼存取安全性原則工具 (Caspol.exe)真的很複雜,上列的那些指令只是我認為比較有可能會用到的,其他更進階的設定除了上 MSDN 查看之外,可能也要 Try 一下才知道怎麼使用。

相關連結