Hadoop安全管理-java安全介紹

Java安全的基本功能

l  可配置的安全策略可以防止Java程序非法讀取文件, 或非法建立與其他主機的網絡連接, 或在未經允許的情況下訪問打印機等等. 此策略建立在Java的存取控制機制上, 相應的存取控制器則依賴於Java的類裝載器, 安全管理器和語言保護等安全機制.

l  要判定程序所讀取的數據是否被修改過, 可以簡單地利用生成消息摘要的方式來實現, 但這種方式安全性並不很高.

l  如果對完事性要求很高, 那麼可以生成數字簽名來檢測程序所讀取的數據是否被修改過.

l  密鑰管理系統可以管理數字簽名時用到的密鑰.

l  爲了支持以上技術, 需要一個擴展的基礎設施.



Java加密擴展包(JCE)

JCE的作用是提供以下的安全操作:

l  加密(密碼)

l  安全密鑰交換

l  安全消息摘要

l  提供另一種密鑰管理系統

JCE包括一組文檔以及4 個jar文件

1.        $JAVA_HOME\jre\lib\security\US_export_policy.jar

2.        $JAVA_HOME\jre\lib\jce.jar

3.        $JAVA_HOME\jre\lib\local_policy.jar

4.        $JAVA_HOME\jre\lib\ext\sunjce_provider.jar

 

Java安全套接字擴展包(JSSE)

JSSE提供了SSL(Secure Sockets Layer, 安全套接字層)的加密功能. 如果需要與SSL服務器或SSL客戶通信, 可以使用此擴展包中的API. 如果服務器和客戶的實現中都需要增加加密功能, 則不僅可以使用JSSE, 也可以使用JCE的密碼功能.

JSSE包括文檔及3個jar文件:

1.        $JAVA_HOME/jre/lib/jsse.jar(java後期版本已經將jcert.jar和jnet.jar整合到jsse.jar中)

 

java鑑別與授權服務(JAAS)

         JAAS可以在Java平臺上提供用戶身份鑑別. 在Java平臺上, 其功能是獨一無二的. Java安全設計的所有核心功能都是爲了保護終端用戶不受程序開發者的影響, 由於終端用戶爲了使用開發者提供的程序,不得不滿足其對本地資源的存取需求, 這就要示必須保證用戶不受到程序的影響. 另一方面, JAAS允許開發者根據用戶提供的鑑別信任狀(credential)准許(或拒絕)用戶對程序的訪問.

 

         JAAS主要由認證和授權兩大部分構成. 認證就是簡單地對一個實體的身份進行判斷;而授權是向實體授予對數據資源和信息訪問權限的決策過程. 從1.4版本開始, JDK已經開始集成JAAS.

 

         JAAS本身包括文檔和一個lib (jaas.jar)

         在windows系統中, 這些類庫被命名爲 $JAVA_HOME\jre\bin\jaas_nt.dll

 

JAVA沙箱

         安全模型的關鍵在於沙箱(sandbox)的概念. 其思想是, 若在你的主機上允許駐留一個程序, 你就必須爲該程序提供一個場所(即運行環境), 但是你還希望爲這個程序限定一個範圍, 例如, 你想限制程序所能存取的系統資源等. 一般情況下, 必須保證程序限制在沙箱中.

 

         Java沙箱負責保護一些系統資源, 而且保護級別是不同的.

         沙箱的模式並非一種, 沙箱範圍的擴展往往建立在信任的基礎上. 有些情況下, 我相信這些程序, 因此允許它們訪問我的文件系統, 但有些情況下, 我只允許它們訪問部分文件, 也有可能這些程序根本不值得我信任, 因此我將禁止它們訪問我的文件系統.

 

Java的安全策略包括:

l  字節碼校驗器(bytecode verifier)
字節碼校驗器可以確保java類文件遵循java語言規則. 從資源的角度來看, 字節碼校驗器可以幫助所有 java程序實現內存保護. 並非所有 的類都要通過字節碼校驗.

l  類裝載器(class loader)
所有java類都是通過一個或多個類裝載器實現載入的. 類裝載器可以程序你給的設置其載入的類的權限.

l  存取控制器(access controller)
存取控制器有句話(或禁止)核心API對操作系統的存取權限.這是基於策略面定的, 而策略則由終端用戶或系統管理員設置.

l  安全管理器(security manager)
安全管理器是核心API和操作系統間的主要接口.它是對系統資源存取控制的最後一道防線.

l  安全軟件包(security package)
java.security包相關的安全擴展包中的類允許你爲自己的應用增加新的安全特性. 在此基礎上, 可以實現 java類的簽名.具體包括:

n  安全提供者(security provider)接口, 通過此接口, 可以把不同的安全實現直接插入到安全軟件包中.

n  消息摘要

n  密鑰與證書

n  數字簽名

n  加密(通過JCE和JSSE)

n  鑑別(通過JAAS)

l  密鑰數據庫.

密鑰數據庫管理的是在安全基礎設施中所用到的密鑰. 可以用它們創建或驗證數字簽名. 在java體系結構中. 它屬於安全軟件包的一部分. 但只可以表示爲一個外部文件或數據庫.

以上最後的兩項的應用面很廣, 並不侷限於沙箱應用. 對於沙箱而言, 數字簽名是作用相當重要, 因爲數字簽名可以作爲鑑別依據, 以證實是誰提供的java類.

 

安全調試

Java安全軟件包中包含有高度代碼, 通過 設置系統屬性可以使之處於調試狀態下

         屬性Java.security.debug

         選項:

l  all             打開所有調試選項.

l  Access      跟蹤所有對存取控制器checkPermission()方法的調用, 從而可以查看代碼中需要哪些權限. 即那些調用成功了, 那些調用失敗了.
此選項還可以繼續分爲以下幾個子選項(如果未專門指定, 則所有子選項均有效):

n  Stack       一旦檢查到一項權限, 即置空棧.

n  Failure     只有在權限遭到拒絕時才置空棧.

n  Domain    檢查到一項保護時即置保護域爲空

l  Jar             當處理一個簽名的jar文件時在文件, 證書及所應用的類中分別寫入簽名.

l  Policy        在解析時打印關於策略文件的信息,

l  Scl              打印直接由安全類裝載器(而不是策略文件)授權的權限信息.

選項間可以用逗號間隔

例如 要查看由安全類裝載器授權的權限, 同時還要跟蹤權限檢查失敗情況下棧的變化情況, 就要在命令行中將選項參數指定爲–Djava.security.dcbug=scl,access,failure

 

JSSE通過訪問javax.net.debug屬性擴展了此功能, 其選項包括:

l  All   打開所有選項及子選項.

l  Ssl    打開ssl調試. 該選項可進一步分爲以下子選項(若示指定, 則均有效):

n  Record     打印對每個ssl記錄的跟蹤情況(在SSL協議層)

n  Handshake       打印爲私有密鑰交換而建立的密鑰生成數據.

n  Session     打印SSL會話行爲信息.

n  Defaultctx        打印默認的SSL初始化信息

n  Sslctx        打印SSL上下文信息.

n  Sessioncache   打印關於SSL會話緩衝的信息.

n  Keymanager    打印關於對密鑰管理器的調用情況信息.

n  Trustmanager 打印對可信管理器的調用情況信息.

n  Data                   爲了實現對握手的跟蹤, 打印所有消息的十六進制轉儲信息.

n  Verbose   打印握手的詳細跟蹤情況信息.

n  Plaintext  爲了跟蹤記錄, 打印記錄的十六進制轉儲信息.


Java沙箱的要素

沙箱包括5個要素:

l  權限(permission)
指允許代碼執行的具體操作. 權限本身包括三個要素: 權限類型, 權限名及允許的操作. 儘管管理默認沙箱不需要再編寫程序, 但管理員不是有必要了解不同的權限所對應的java類名, 這樣才能正確地調用代碼以實現操作.
權限類型實際上是一個實現權限的Java類名.一般情況下, 需要基於權限類型設置相應的權限名. 權限操作指定了對目標可以執行的操作行爲, 如文件權限可以指定對某個文件可讀, 可寫或可刪除.
例:
permission java.security.AllPermission;
permission java.lang.RuntimePermission “stopThread”;
permission java.io.FilePermission “/tmp/foo”, “read”;

l  代碼源(code source)
代碼源是類所在的位置, 若對類做了簽名, 則簽名者的信息也在代碼源處保存. 該位置被指定爲URL地址,代碼可以基於文件的URL從文件系統獲得, 也可以通過基於網絡的URL從網絡上獲得.簽名不是必須的, 一般稱代碼源中的URL爲代碼基(codebase).

l  保護域(protection domain)
將代碼源的權限進行組合而建立的.保護域是默認沙箱中的基本概念, 例如: 由某個保護域我們可知道:由www.oreilly.com得到的代碼可以讀軟盤上的文件,由www.klflote.com得到並由scott簽名的代碼可以做任何工作.

l  策略文件(policy file)
策略文件是控制沙箱的管理要素. 策略文件包括一個或多個定義保護域的項. 通常我們認爲是策略文件中的項完成了代碼權限的指定任務, 這裏往往需要指出代碼裝載的地址或者代碼簽名者的信息.
在程序中定義特事特辦文件的方式有多種, 但通常使用的只有兩類策略文件: 全局策略文件和用戶專用的策略文件, 其中全局策略文件作用於虛擬機中使用的所有實例. 策略文件可以用文本編輯器對其進行創建各修改, 同時 JRE還提供 了一個工具policytool去維護策略文件.

l  密鑰庫(keystore)
代碼簽名只是實現授權的一種方式, 通過這種方式可以完成多層次的授權. 代碼簽名需要基於公開密鑰證書(publickey certificate)證書本身通常保存在文件中, 保存證書的位置被稱爲密鑰庫. 作爲開發人員, 如果想對代碼簽名, 就要有相應的證書, 而要獲得證書就需要訪問密鑰庫.如果是終端用戶或系統管理員, 運行簽名的代碼時, 則需要查找密鑰庫從而獲知相應的簽名者的情況.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章