Java 2 安全
WebSphere® Application Server Liberty中支援 Java™ 2 安全 功能。 Java 2 安全 提供原則型細部存取控制機制,在容許存取特定受保護系統資源之前,先檢查許可權,以增加整體系統完整性。
Java 2 安全 與 Java Platform, Enterprise Edition 角色型授權無關。 Java 2 Security 會保護系統資源 (例如檔案輸入及輸出、Socket 及內容) 的存取權; 而 Java Platform, Enterprise Edition 安全會保護 Web 資源 (例如 Servlet 及 JSP 檔) 的存取權。
適用於部署人員和管理者的 Java 2 安全
在啟用 Java 2 安全之前,您需要確定所有應用程式都已獲授與必要的許可權,否則應用程式可能無法執行。 依預設,會根據 Java Platform Enterprise Edition 7.0 規格,將許可權授與應用程式。 如果應用程式未準備好 Java 2 安全 ,或應用程式提供者未提供 permissions.xml 檔作為應用程式的一部分,當啟用 Java 2 安全 時,應用程式可能會在執行時期造成 Java 2 安全 存取控制異常狀況。 即使應用程式在執行中,它也可能未正常執行。適用於應用程式開發人員的 Java 2 安全
應用程式開發人員必須瞭解預設 WebSphere 原則中所授與的許可權,以及 Java SDK API 的許可權需求。 您需要知道應用程式所呼叫的 API 是否需要額外許可權。 如需哪些 Java API 需要許可權的相關資訊,請參閱 Java 2 SDK 中的許可權。如果您使用的 OSGi 應用程式含有「Web 應用程式軟體組 (WAB)」,會經由 permissions.perm 檔新增許可權。 如果 WAB 沒有 permissions.perm 檔案,則原則預設為 java.security.AllPermission.
啟用 Java 2 安全
Java 2 安全 功能是核心擴充的一部分,並在引導時透過使用websphere.java.security 內容更新 bootstrap.properties 檔案來啟用。如果在 bootstrap.properties 檔中指定 websphere.java.security 內容,則會施行 Java 2 安全 ; 否則,不會進行許可權檢查。
指定受限許可權
Liberty 提供一種機制,可在執行 Web 或 EJB 應用程式元件時指定受限許可權。 受限許可權可確保不將該許可權的任何實例授與軟體組或應用程式。 它們提供一種機制,用以阻止應用程式授與自己超乎容許範圍的許可權,例如,結束 VM 的許可權。os.name
的 PropertyPermission。 此語法在 server.xml 與 client.xml 檔中是相同的:
<javaPermission className="java.security.PropertyPermission" name="os.name" actions="write" restriction="true" />
授與許可權
如果是透過 permissions.perm 檔,將許可權授與軟體組內的程式庫/類別,OSGi 軟體組可以自我調節這些許可權。應用程式也可以自我調節透過 permissions.xml 檔來授與的許可權,或是藉由在 server.xml 和 client.xml 檔中指定授與 (grants) 許可權來自我調節。
OSGi 軟體組許可權
OSGi 規格提供一種機制,可讓您透過軟體組 OSGI-INF 目錄中的 permissions.perm 檔,來指定軟體組的許可權。 此機制容許對軟體組的許可權進行精細存取控制。在 server.xml 和 client.xml 中宣告應用程式的許可權
沒有指定程式碼庫的許可權 (定義在 server.xml 和 client.xml 檔中) 適用於該 Liberty 伺服器上的所有應用程式。PropertyPermission,以便能夠讀取所有的系統內容:
<javaPermission className="java.util.PropertyPermission" name="*" actions="read" />os.name
的 PropertyPermission。 此語法在 server.xml 與 client.xml 檔中是相同的:
<javaPermission className="java.security.PropertyPermission" name="os.name" actions="write" restriction="true" />
- 受限許可權會將 restriction 設定為 true。
- 如果應用程式嘗試將定義成受限許可權的許可權授與自己,則受限許可權的優先順序高於授與 (grant),且會停用授與 (grant)。
在 permissions.xml 中宣告應用程式的許可權
permissions.xml 檔是 Java EE7 規格推出的新檔案。 它包裝在應用程式的 META-INF 目錄之下。對於包裝成獨立式 .war 檔的應用程式,在 META-INF WAR 層次指定的許可權,會套用至包裝在 .war 檔內的所有模組和程式庫。
對於包裝在 .ear 檔中的應用程式,必須在 .ear 檔層次宣告許可權。 此許可權集會套用至包裝在 .ear 檔或其所含模組中的所有模組和程式庫。 不論是否提供 permissions.xml 檔給 .ear 檔本身,凡是位於這類包裝模組內的 permissions.xml 檔都會被忽略。
對於包裝在 .rar 檔中的應用程式,必須在 META-INF RAR 層次宣告許可權。
no-rethrow 選項
如果啟用「Java 2 安全」,一旦發生許可權違規,依預設,「JDK 安全管理程式」會擲出java.security.AccessControl 異常狀況。 如果不處理此異常狀況,可能造成執行時期失敗。 為了協助開發人員備妥其應用程式的「Java 2 安全」,系統提供 no-rethrow 選項。 no-rethrow 選項容許將 AccessControl 異常狀況記載在 console.log 和 messages.log 中,而不會造成應用程式失敗。 在 bootstrap.properties 檔案中指定 websphere.java.security.norethrow=true ,即可啟用 no-rethrow 選項。 依預設,不會啟用 no-rethrow 選項,因此如果要啟用這個內容,請在 bootstrap.properties 檔中指定它。