小程序員之歌
java先(我應該為它寫點什么了?。?/div>
Intranet中用Policy文件設置Java的安全策略
Intranet中用Policy文件設置Java的安全策略
建設銀行云南省保山地區分行 楊紹方
--------------------------------------------------------------------------------
本文提出了使用安全策略文件來設置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文件的內容。?
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)“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”。?
(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。?
(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文件的內容,使用起來相當簡單,而且,安全許可的范圍控制較精細。
posted on 2007-01-24 10:43
liujg
閱讀(433)
評論(0)
編輯
收藏
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
Powered by:
BlogJava
Copyright © liujg
<
2025年5月
>
日
一
二
三
四
五
六
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
導航
BlogJava
首頁
新隨筆
聯系
聚合
管理
統計
隨筆 - 10
文章 - 40
評論 - 6
引用 - 0
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
(1)
給我留言
查看公開留言
查看私人留言
隨筆分類
js
(rss)
linux(1)
(rss)
strus2
(rss)
Struts2 Tag語法(轉)
(rss)
隨筆檔案
2014年12月 (1)
2011年9月 (1)
2011年5月 (2)
2011年1月 (1)
2007年11月 (1)
2007年10月 (1)
2007年5月 (1)
2006年12月 (1)
文章分類
Java基礎(10)
(rss)
JDBC(1)
(rss)
js(1)
(rss)
portlet(1)
(rss)
Tapestry(1)
(rss)
數據庫(9)
(rss)
算法(1)
(rss)
文章檔案
2011年10月 (1)
2011年5月 (2)
2011年1月 (1)
2010年12月 (1)
2010年8月 (1)
2010年7月 (1)
2010年5月 (2)
2010年4月 (1)
2009年7月 (1)
2009年4月 (1)
2009年3月 (2)
2009年1月 (2)
2008年12月 (1)
2008年11月 (1)
2008年7月 (3)
2008年4月 (2)
2008年3月 (2)
2008年1月 (2)
2007年11月 (3)
2007年7月 (1)
2007年6月 (4)
2007年1月 (1)
2006年7月 (4)
相冊
me
收藏夾
rmi(5)
(rss)
boddiy
boddi's blog
搜索
最新評論
1.?re: oracle 取子串(轉)
@aaa
別處轉來的,具體的不懂。
--liujg
2.?re: oracle 取子串(轉)[未登錄]
樓主,你說的substring是在oracle哪個版本的???能用嗎???
charindex又是哪里的函數,能用嗎????搞笑
--aaa
3.?re: oracle 取子串(轉)[未登錄]
kao
--aaa
4.?re: prototype詳解(轉)
郁悶,.NET的!,JAVA里面有MemberwiseClone這個方法么。怎么用JAVA搞原型模式呢?
--hehei
5.?re: 轉載一篇jms的文章
Thanks for you kind to share the article~~
--lingruoxu
閱讀排行榜
1.?java程序員的5個好習慣()(805)
2.?java 關閉IE(585)
3.?OERR: ORA-12519(563)
4.?doGet()和doPost()的區別(轉)(481)
5.?看了下java核心技術中的代理,還是很暈(398)
評論排行榜
1.?執行./startup.sh,或者./shutdown.sh的時候,爆出了Permission denied(0)
2.?submit()和onsubmit()的區別(轉)(0)
3.?doGet()和doPost()的區別(轉)(0)
4.?轉載 Vim 基本用法(0)
5.?OERR: ORA-12519(0)
主站蜘蛛池模板:
无码精品人妻一区二区三区免费
|
在线91精品亚洲网站精品成人
|
亚洲午夜在线一区
|
亚洲人成网国产最新在线
|
国产成人亚洲精品蜜芽影院
|
丁香六月婷婷精品免费观看
|
久久免费看少妇高潮V片特黄
|
日本最新免费网站
|
国产一级淫片a视频免费观看
|
亚洲午夜福利在线观看
|
亚洲性猛交xx乱
|
爱情岛论坛亚洲品质自拍视频网站
|
国产高潮久久免费观看
|
国产在线jyzzjyzz免费麻豆
|
国产免费一区二区三区VR
|
亚洲国产精品SSS在线观看AV
|
亚洲乱码卡三乱码新区
|
黄色免费网址在线观看
|
久久精品成人免费观看
|
国产精品无码免费播放
|
精品亚洲一区二区三区在线观看
|
7777久久亚洲中文字幕蜜桃
|
亚洲av午夜国产精品无码中文字
|
最近国语视频在线观看免费播放
|
希望影院高清免费观看视频
|
亚洲国产精品日韩
|
亚洲日本国产乱码va在线观看
|
美女18毛片免费视频
|
日韩av无码久久精品免费
|
日本免费一区二区三区最新
|
亚洲国产精品乱码一区二区
|
一个人看的免费视频www在线高清动漫
|
日本视频免费高清一本18
|
色www永久免费视频
|
亚洲国产成人久久综合碰碰动漫3d
|
亚洲人成色在线观看
|
国产精品视频白浆免费视频
|
国产大片91精品免费观看男同
|
亚洲综合久久1区2区3区
|
成人特级毛片69免费观看
|
亚洲免费网站在线观看
|