David.Turing's blog

           

          JVM是怎樣進行授權控制的

          原文見諸于http://www.matrix.org.cn/thread.shtml?topicId=41625&forumId=55
          有網(wǎng)友提出疑問,

          假設JVM已開啟了SecurityManager,并且JASS的登陸模塊等也正常運作,且授權策略文件醒置正確,用戶也已正確地成功地被驗証。如果不執(zhí)行Subject.doAs()或Subject.doAsPrivileged()方法,JVM會對其它任何方法調(diào)用執(zhí)行權限檢查嗎?如果會,其具的實現(xiàn)過程又是怎樣的? 

          JAAS授權模型中對下面的情況講得好清楚:
            JVM由一個名為 SecurityManager 的類負責實施系統(tǒng)安全策略。在默認情況下不安裝安全管理器,必須通過一個在啟動時傳遞給 JVM 的一個名為 java.security.manager 的環(huán)境變量顯式地指定。任何應用程序都可找到安裝的 SecurityManager 并調(diào)用它相應的 check<XXX> 方法。
            對 SecurityManager 類進行的所有 check<XXX> 方法調(diào)用都解釋為相應的 Permission 對象,并將它作為輸入?yún)?shù)傳遞給 AccessController 類的 checkPermission() 方法。 AccessController 類有一個名為 doPrivileged 的方法。doPrivileged 方法以一個類型為 PrivilegedAction 的對象作為輸入。PrivilegedAction 的對象有一個名為 run() 的方法,如果想實現(xiàn)一個執(zhí)行權限檢查的操作,需從PirvilegedAction中擴展,並在run()方法中實現(xiàn)自己的業(yè)務邏輯即可。但問題是,如果不是從PirvilegedAction中擴展的類,那麼調(diào)用其中的方法JVM還會不會執(zhí)行權限檢查?

          從java API中可以看到,Subject.doAs()或Subject.doAsPrivileged()方法都以PrivilegedAction作為參數(shù)輸入的。

          我做了一個小的形象總結(jié):
          通常來說,所有在JVM中執(zhí)行的方法都回進行權限檢查,except 那些由JVM引導的類,比如FileOutputStream和FileInputStream,你也明白你能夠利用FileOuptStream做點什么壞事了,呵呵,于是你寫了一個干壞事的類叫做EsunPirvilegedAction Class,這個類往用戶的user.home寫入n個1G的文件,這個類調(diào)用JVM不經(jīng)過權限檢查的FileOuptStream類。
          問題在于,JVM雖然不檢查FileOuptStream類,但會檢查所有在JVM運行中未被授權的類,包括你的
          EsunPirvilegedAction類,是否具有權限(判別標準就是C:\yourjdk\jre\lib\security\java.policy)。

          1,Permission對象如何Load入,可以看看SecurityManager機制
          2,AccessController 類執(zhí)行checkPermission() 方法,所有不信任的類都不能逃過次"劫",當然,你可以叫所有Client都在其java.policy為你的創(chuàng)建一個Permission。
          3,PrivilegedAction是你的EsunPirvilegedAction類所必需實現(xiàn)的方法,否則SecurityManager不理你。

          總結(jié)性——Java有自己的信任體系,它引導的類以及它的擴展類都不需要checkPermission,你寫的要checkPermission。

          posted on 2006-04-02 11:53 david.turing 閱讀(1599) 評論(0)  編輯  收藏 所屬分類: Security領域

          導航

          統(tǒng)計

          常用鏈接

          留言簿(110)

          我參與的團隊

          隨筆分類(126)

          隨筆檔案(155)

          文章分類(9)

          文章檔案(19)

          相冊

          搜索

          積分與排名

          最新隨筆

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 长宁县| 寿阳县| 中西区| 乡城县| 宾阳县| 寿光市| 平乐县| 麻阳| 济阳县| 安阳县| 翁牛特旗| 衡东县| 日喀则市| 酒泉市| 禹州市| 登封市| 岳阳市| 嘉祥县| 阳东县| 武城县| 普兰店市| 锡林浩特市| 巴青县| 嘉黎县| 博爱县| 甘孜| 龙山县| 舒兰市| 榕江县| 北宁市| 连南| 无锡市| 邓州市| 华池县| 金秀| 凉城县| 商水县| 镇坪县| 波密县| 二连浩特市| 荥阳市|