<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Intranet中用Policy文件設(shè)置Java的安全策略

    Intranet中用Policy文件設(shè)置Java的安全策略

    建設(shè)銀行云南省保山地區(qū)分行 楊紹方


    --------------------------------------------------------------------------------

      本文提出了使用安全策略文件來(lái)設(shè)置Java程序權(quán)限的一種簡(jiǎn)單的方法。由于企業(yè)內(nèi)部網(wǎng)中各臺(tái)計(jì)算機(jī)的位置、用途和安全性明確,更適于使用安全策略文件來(lái)設(shè)置Java的權(quán)限,軟件的安裝、設(shè)置、升級(jí)和遷移都非常方便,并且,還可以和數(shù)字簽名配合使用,更重要的是,可以細(xì)分每個(gè)Java程序的權(quán)限,使用起來(lái)靈活方便。?

    一、Java中安全策略的概念
      Java應(yīng)用程序環(huán)境的安全策略,詳細(xì)說(shuō)明了對(duì)于不同的代碼所擁有的不同資源的許可,它由一個(gè)Policy對(duì)象來(lái)表達(dá)。為了讓applet(或者運(yùn)行在?SecurityManager下的一個(gè)應(yīng)用程序)能夠執(zhí)行受保護(hù)的行為,例如讀寫文件,applet(或?Java應(yīng)用程序)必須獲得那項(xiàng)操作的許可,安全策略文件就是用來(lái)實(shí)現(xiàn)這些許可。?
      Policy對(duì)象可能有多個(gè)實(shí)體,雖然任何時(shí)候只能有一個(gè)起作用。當(dāng)前安裝的Policy對(duì)象,在程序中可以通過(guò)調(diào)用getPolicy方法得到,也可以通過(guò)調(diào)用setPolicy方法改變。Policy對(duì)象評(píng)估整個(gè)策略,返回一個(gè)適當(dāng)?shù)腜ermissions對(duì)象,詳細(xì)說(shuō)明哪些代碼可以訪問(wèn)哪些資源。?
      策略文件可以儲(chǔ)存在無(wú)格式的ASCII文件或Policy類的二進(jìn)制文件或數(shù)據(jù)庫(kù)中。本文僅討論無(wú)格式的ASCII文件的形式。?

    二、Policy文件的格式
      為了能夠更好地理解下面的內(nèi)容,建議在閱讀時(shí)參照?\jdk1.2\jre\lib\security\java.policy文件和\jdk1.2\jre\lib\security\java.security文件的內(nèi)容。?
      Policy文件的語(yǔ)法格式與說(shuō)明?
      一個(gè)Policy文件實(shí)質(zhì)上是一個(gè)記錄列表,它可能含有一個(gè)?“keystore”記錄,以及含有零個(gè)或多個(gè)“grant”記錄。其格式如下:?
    keystore?“some_keystore_url",?“keystore_type";
    grant?[?SignedBy?“signer_names"?]?[?,?CodeBase?“URL"?]?{
    Permission?permission_class_name?[?“target_name"?]?
    [?,?“action"]?[,?SignedBy?“signer_names"?];
    Permission?...
    };
      (1)“keystore"記錄?
      一個(gè)keystore是一個(gè)私有密鑰(private?keys)數(shù)據(jù)庫(kù)和相應(yīng)的數(shù)字簽名,例如X.509證書。Policy文件中可能只有一條keystore記錄(也可能不含有該記錄),它可以出現(xiàn)在文件中g(shù)rant記錄以外的任何地方。Policy配置文件中指定的?keystores用于尋找grant記錄中指定的、簽名者的公共密鑰(public?keys),如果任何grant?記錄指定簽名者(signer_names),那么,keystore記錄必須出現(xiàn)在policy配置文件中。?
      “some_keystore_url"是指keystore的URL位置,?“keystore_type"是指keystore的類型。第二個(gè)選項(xiàng)是可選項(xiàng),如果沒(méi)有指定,該類型則假定由安全屬性文件(java.security)中的“keystore.type"屬性來(lái)確定。keystore類型定義了?keystore信息的存儲(chǔ)和數(shù)據(jù)格式,用于保護(hù)keystore中的私有密鑰和keystore完整性的算法。?Sun?Microsystems支持的缺省類型為“JKS”。?
      (2)“grant"記錄?
      在Policy文件中的每一個(gè)grant記錄含有一個(gè)CodeSource?(一個(gè)指定的代碼)及其permission(許可)。?
      Policy文件中的每一條grant記錄遵循下面的格式,以保留字“grant”開(kāi)頭,表示一條新的記錄的開(kāi)始,“Permission”是另一個(gè)保留字,在記錄中用來(lái)標(biāo)記一個(gè)新的許可的開(kāi)始。每一個(gè)grant記錄授予一個(gè)指定的代碼(CodeBase)、一套許可(Permissions)。?
      permission_class_name必須是一個(gè)合格并存在的類名,例如java.io.FilePermission,不能使用縮寫(例如,F(xiàn)ilePermission)。?
      target_name用來(lái)指定目標(biāo)類的位置,action用于指定目標(biāo)類擁有的權(quán)限。?
      target_name可以直接指定類名(可以是絕對(duì)或相對(duì)路徑)、目錄名,也可以是下面的通配符:?
    directory/*?目錄下的所有文件
    *?當(dāng)前目錄的所有文件
    directory/-?目錄下的所有文件,包括子目錄
    -?當(dāng)前目錄下的所有文件,包括子目錄
    <<?ALL?FILES?>>文件系統(tǒng)中的所有文件
      對(duì)于java.io.FilePermission,action可以是:read,?write,?delete和execute。?
      對(duì)于java.net.SocketPermission,action可以是:listen,?accept,connect,read,write。?
      (3)Policy文件中的屬性擴(kuò)展(Property?Expansion)屬性擴(kuò)展與shell中使用的變量擴(kuò)展類似,它的格式為:
    “${some.property}"?
      實(shí)際使用的例子為:
    permission?java.io.FilePermission
    “${user.home}",?“read";?
      “${user.home}"的值為“d:\Project",因此,下面的語(yǔ)句和上面的語(yǔ)句是一樣的:
    permission?java.io.FilePermission?“d:\Project?",?“read";?

    三、實(shí)?例
      當(dāng)初始化Policy時(shí),首先裝載系統(tǒng)Policy,然后再增加用戶Policy,如果兩者都不存在,則使用缺省的Policy,即原始的沙箱模型。?
      系統(tǒng)Policy文件的缺省位置為:
    {java.home}/lib/security/java.policy?(Solaris)
    {java.home}\lib\security\java.policy?(Windows)?
      用戶Policy文件的缺省位置為:
    {user.home}/.java.policy?(Solaris)
    {user.home}\.java.policy?(Windows)?
      其實(shí),在實(shí)際使用中,我們可能不會(huì)像上面介紹的那么復(fù)雜,特別是在不使用數(shù)字簽名時(shí)。這時(shí),我們完全可以借鑒JDK?1.2提供給我們的現(xiàn)成的?\jdk1.2\jre\lib\security\java.policy文件,根據(jù)我們的需要做相應(yīng)的修改,本文就針對(duì)不使用數(shù)字簽名情況詳細(xì)說(shuō)明安全策略文件的用法。?
      下面,是一個(gè)完整的在Windows?95/98/NT下使用的.java.policy文件。在文件中,分別使用注釋的形式說(shuō)明了每個(gè)“permission”記錄的用途。?
    //?For?LanServerTalk.java?and?LanClientTalk.java

    grant?{?
    //對(duì)系統(tǒng)和用戶目錄“讀”的權(quán)限
    permission?java.util.PropertyPermission?“user.dir",?“read";
    permission?java.util.PropertyPermission?“user.home",?“read";
    permission?java.util.PropertyPermission?“java.home",?“read";
    permission?java.util.PropertyPermission?“java.class.path",?“read";
    permission?java.util.PropertyPermission?“user.name",?“read";?

    //對(duì)線程和線程組的操作權(quán)限
    permission?java.lang.RuntimePermission?“modifyThread";
    permission?java.lang.RuntimePermission?“modifyThreadGroup";

    //操作Socket端口的各種權(quán)限
    permission?java.net.SocketPermission?“-",?“l(fā)isten";
    permission?java.net.SocketPermission?“-",?“accept";
    permission?java.net.SocketPermission?“-",?“connect";
    permission?java.net.SocketPermission?“-",?“read";
    permission?java.net.SocketPermission?“-",?“write";

    //讀寫文件的權(quán)限
    permission?java.io.FilePermission?“-",?“read";
    permission?java.io.FilePermission?“-",?“write";

    //退出系統(tǒng)的權(quán)限,例如System.exit(0)
    permission?java.lang.RuntimePermission?“exitVM";
    };

    四、.Java.policy文件的使用
      對(duì)于Windows?95/98/NT,使用.Java.policy文件的方法主要有下面兩種。?
      1.?使用缺省目錄?
      我們可以簡(jiǎn)單地將編輯好的.Java.policy文件拷貝到?Windows?95/98/NT的HOME目錄,這時(shí),所有的applet(或Java應(yīng)用程序)可能都擁有某些相同的權(quán)限,使用起來(lái)簡(jiǎn)單,但不靈活(例如:對(duì)于Java.io.FilePermission?,其目標(biāo)類的?target_name必須使用絕對(duì)路徑),如果不是在企業(yè)內(nèi)部網(wǎng)中使用,還可能存在一定安全隱患。?
      2.?在命令行中指定?
      在命令行,如果我們希望傳遞一個(gè)Policy文件給?appletviewer,還可以使用“-J-Djava.security.policy"參數(shù)來(lái)指定policy的位置:?
    appletviewer?-J-Djava.security.policy=pURL?myApplet
      pURL為Policy文件的位置。下面,是一個(gè)實(shí)際的例子,以當(dāng)前目錄的.java.policy文件所指定的安全策略運(yùn)行當(dāng)前目錄的LanServerTalk.html(文件中裝載并運(yùn)行LanServerTalk.Java):?
    appletviewer?-J-Djava.security.policy
    =.Java.policy?LanServerTalk.html?
      這種方法使用靈活,特別是作為一個(gè)軟件包在企業(yè)內(nèi)部網(wǎng)中發(fā)布時(shí),安裝、設(shè)置和遷移軟件,基本無(wú)須修改Policy文件的內(nèi)容,使用起來(lái)相當(dāng)簡(jiǎn)單,而且,安全許可的范圍控制較精細(xì)。

    posted on 2007-01-24 10:43 liujg 閱讀(433) 評(píng)論(0)  編輯  收藏


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    相冊(cè)

    收藏夾

    boddiy

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 国产AV无码专区亚洲AV毛网站 | 久久久久亚洲AV成人网| 黄色网页在线免费观看| 午夜亚洲国产理论秋霞| 我要看免费的毛片| eeuss免费天堂影院| 亚洲国产精品久久网午夜| 免费h黄肉动漫在线观看| 久久国产精品免费网站| 亚洲中文字幕久久无码| 国产亚洲3p无码一区二区| 国产精品免费观看久久| 国产在线精品免费aaa片| 亚洲精华液一二三产区| 亚洲国产精品人久久| 国产精品久久免费视频| 在线a免费观看最新网站| 成在线人直播免费视频| 亚洲国产最大av| 亚洲精品无码专区在线在线播放| 国产日本一线在线观看免费| A级毛片成人网站免费看| 亚洲码欧美码一区二区三区| 久久亚洲成a人片| 亚洲A丁香五香天堂网| 国产免费看JIZZ视频| 九九美女网站免费| 日韩精品免费一线在线观看| 亚洲免费视频观看| 亚洲国产精品一区第二页 | 国产电影午夜成年免费视频| 国产视频精品免费视频| 亚洲1区2区3区精华液| 亚洲午夜精品国产电影在线观看| 国产精品亚洲二区在线观看| 好爽…又高潮了免费毛片| 亚洲美女免费视频| 国产精品区免费视频| 精品熟女少妇aⅴ免费久久| 亚洲av无码成人精品区一本二本| 亚洲中文无码a∨在线观看|