国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

企業內部網中使用Policy文件來設置Java的安全策略

2019-11-18 12:22:18
字體:
來源:轉載
供稿:網友

  ---- 眾所周知,java語言具有完善的安全框架,從編程語言,編譯器、解釋程序到Java虛擬機,都能確保Java系統不被無效的代碼或敵對的編譯器暗中破壞,基本上,它們保證了Java代碼按預定的規則運作。但是,當我們需要逾越這些限制時,例如,讀寫文件,監聽和讀寫Socket,退出Java系統等,就必須使用數字簽名或安全策略文件(*.Policy)。
  
  ---- 在企業內部網中,本文提出了使用安全策略文件來設置java程序權限的一種簡單的方法。由于企業內部網中各臺計算機的位置、用途和安全性明確,更適于使用安全策略文件來設置java的權限,軟件的安裝、設置、升級和遷移都非常的方便,并且,還可以和數字簽名配合使用,更重要的是,可以細分每個java程序的權限,使用起來靈活方便。
  
  一. Java中安全策略的概念
  ---- Java應用程序環境的安全策略,具體說明了對于不同的代碼所擁有的不同資源的許可,它由一個Policy對象來表達。為了讓applet(或者運行在SecurityManager下的一個應用程序)能夠執行受保護的行為,例如讀寫文件,applet(或Java應用程序)必須獲得那項操作的許可,安全策略文件就是用來實現這些許可。
  
  ---- Policy對象可能有多個實體,雖然任何時候只能有一個起作用。當前安裝的Policy對象,在程序中可以通過調用getPolicy方法得到,也可以通過調用setPolicy方法改變。Policy對象評估整個策略,返回一個適當的Permissions對象,具體說明那些代碼可以訪問那些資源。
  
  ---- 策略文件可以儲存在無格式的ASCII文件,或Policy類的二進制文件,或數據庫中。本文僅討論無格式的ASCII文件的形式。
  
  二. Policy文件的格式
  ---- 為了能夠更好地理解下面的內容,建議在閱讀時參照/jdk1.2/jre/lib/security/java.policy文件和/jdk1.2/jre/lib/security/java.security文件的內容。
  
  ---- 1. Policy文件的語法格式與說明
  
  ---- 一個Policy文件實質上是一個記錄列表,它可能含有一個“keystore”記錄,以及含有零個或多個“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.1"keystore"記錄
  
  ---- 一個keystore是一個私有密鑰(PRivate keys)數據庫和相應的數字簽名,例如X.509證書。Policy文件中可能只有一條keystore記錄(也可能不含有該記錄),它可以出現在文件中grant記錄以外的任何地方。Policy配置文件中指定的keystores用于尋找grant記錄中指定的、簽名者的公共密鑰(public keys),假如任何grant記錄指定簽名者(signer_names),那么,keystore記錄必須出現在policy配置文件中。
  
  ---- "some_keystore_url"是指keystore的URL位置,"keystore_type"是指keystore的類型。第二個選項是可選項,假如沒有指定,該類型則假定由安全屬性文件(java.security)中的"keystore.type"屬性來確定。keystore類型定義了keystore信息的存儲和數據格式,用于保護keystore中的私有密鑰和keystore完整性的算法。Sun Microsystems支持的缺省類型為“JKS”。
  
  ---- 1.2"grant"記錄
  
  ---- 在Policy文件中的每一個grant記錄含有一個CodeSource(一個指定的代碼)及其permission(許可)。
  
  ---- Policy文件中的每一條grant記錄遵循下面的格式,以保留字“grant”開頭,表示一條新的記錄的開始,“Permission”是另一個保留字,在記錄中用來標記一個新的許可的開始。每一個grant記錄授予一個指定的代碼(CodeBase)一套許可(Permissions)。
  
  ---- permission_class_name必須是一個合格并存在的類名,例如java.io.FilePermission,不能使用縮寫(例如,FilePermission)。
  
  ---- target_name用來指定目標類的位置,action用于指定目標類擁有的權限。
  
  ---- target_name可以直接指定類名(可以是絕對或相對路徑),目錄名,也可以是下面的通配符:
  
  Directory/* 目錄下的所有文件
  *當前目錄的所有文件
  directory/-目錄下的所有文件,包括子目錄
  - 當前目錄下的所有文件,包括子目錄
  《ALL FILES》文件系統中的所有文件
  對于java.io.FilePermission,action可以是:
  read, write, delete和execute。
  對于java.net.SocketPermission,action可以是:
  listen,accept,connect,read,write。
  ---- 1.3 Policy文件中的屬性擴展(Property EXPansion)
  
  ---- 屬性擴展與shell中使用的變量擴展類似,它的格式為:
  
  "${some.property}"
  實際使用的例子為:
  permission java.io.FilePermission
  "${user.home}", "read";
  "${user.home}"的值為"d:/Project",
  因此,下面的語句和上面的語句是一樣的:
  permission java.io.FilePermission "
   d:/Project ", "read";
  三. 實例
  ---- 當初始化Policy時,首先裝載系統Policy,然后再增加用戶Policy,假如兩者都不存在,則使用缺省的Policy,即原始的沙箱模型。
  
  ---- 系統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)
  ---- 其實,在實際使用中,我們可能不會象上面介紹的那么復雜,非凡是在不使用數字簽名時。這時,我們完全可以借鑒JDK 1.2提供給我們的現成的/jdk1.2/jre/lib/security/java.policy文件,根據我們的需要作相應的修改,本文就針對不使用數字簽名情況具體說明安全策略文件的用法。
  
  ---- 下面,是一個完整的在Windows 95/98/NT下使用的.java.policy文件。在文件中,分別使用注釋的形式說明了每個“permission”記錄的用途。
  
  // For LanServerTalk.java and LanClientTalk.java
  
  grant {
  //對系統和用戶目錄“讀”的權限
  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";
  
  //對線程和線程組的操作權限
  permission java.lang.RuntimePermission
   "modifyThread";
  permission java.lang.RuntimePermission
   "modifyThreadGroup";
  
   //操作Socket端口的各種權限
   permission java.net.SocketPermission
   "-", "listen";
   permission java.net.SocketPermission
   "-", "accept";
   permission java.net.SocketPermission
  "-", "connect";
   permission java.net.SocketPermission "-", "read";
   permission java.net.SocketPermission "-", "write";
  
   //讀寫文件的權限
   permission java.io.FilePermission "-", "read";
   permission java.io.FilePermission "-", "write";
  
   //退出系統的權限,例如System.exit(0)
   permission java.lang.RuntimePermission "exitVM";
  };
  四. java.policy文件的使用
  ---- 對于windows 95/98/NT,使用.java.policy文件的方法主要有下面兩種。
  
  ---- 1. 使用缺省目錄
  
  ---- 我們可以簡單地將編輯好的.java.policy文件拷貝到windows 95/98/NT的HOME目錄,這時,所有的applet(或Java應用程序)可能都擁有某些相同的權限,使用起來簡單,但不靈活(例如:對于java.io.FilePermission ,其目標類的target_name必須使用絕對路徑),假如不是在企業內部網中使用,還可能存在一定安全隱患。
  
  ---- 2. 在命令行中指定
  
  ---- 在命令行,假如我們希望傳遞一個Policy文件給appletviewer,還可以使用"-J-Djava.security.policy"參數來指定policy的位置:
  
  appletviewer -J-Djava.security.
  policy=pURL myApplet
  ---- pURL為Policy文件的位置。下面,是一個實際的例子,以當前目錄的.java.policy文件所指定的安全策略運行當前目錄的LanServerTalk.Html(文件中裝載并運行LanServerTalk.java):
  
  appletviewer -J-Djava.security.policy
  =.java.policy LanServerTalk.html
  ---- 這種方法使用靈活,非凡是作為一個軟件包在企業內部網中發布時,安裝、設置和遷移軟件,基本無須修改Policy文件的內容,使用起來相當簡單,而且,安全許可的范圍控制較精細。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 晋城| 延寿县| 香港 | 天长市| 开封市| 海城市| 山东| 民县| 灵山县| 延边| 威远县| 潞城市| 上饶市| 濮阳县| 博兴县| 馆陶县| 金塔县| 民勤县| 石景山区| 萨迦县| 乌鲁木齐市| 蒙城县| 常山县| 新兴县| 平舆县| 太仆寺旗| 安化县| 巴楚县| 宁远县| 洛扎县| 永泰县| 绍兴县| 衡南县| 调兵山市| 孝义市| 河北区| 都兰县| 休宁县| 泰和县| 佛坪县| 陵水|