Liberty:Java 2 安全
WebSphere® Application Server Liberty 中支援「Java™ 2 安全」功能。Java 2 安全提供原則型的精細存取控制機制,此機制會在容許存取某些受保護的系統資源之前先檢查許可權,來提高整體系統完整性。
「Java 2 安全」與 Java Platform Enterprise Edition 角色型授權無關。「Java 2 安全」會保護對系統資源 (例如,檔案輸入和輸出、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 中的許可權。許可權是藉由 permissions.xml 檔新增至應用程式,所列出之許可權相關聯的程式碼庫,則取決於檔案的位置。若為獨立式 .war 應用程式,permissions.xml 檔隨附在 META-INF 目錄之下,且所有指定的許可權會套用至 .war 檔所包含的所有模組。若為 .ear 應用程式,permissions.xml 直接隨附在 .ear 本身的 META-INF 目錄之下,指定的許可權會套用至 .ear 檔所包含的所有模組。
註: 就 .ear 應用程式來說,如果 permissions.xml 檔隨附在 .ear 以外之任何模組的 META-INF 目錄之下,則會被忽略。
啟用 Java 2 安全
「Java 2 安全」功能是核心延伸的一部分,您可以使用 websphere.java.security 內容來更新 bootstrap.properties 檔,以便在引導期間啟用其功能。如果在 bootstrap.properties 檔中指定 websphere.java.security 內容,就會施行 Java 2 安全;否則,不會檢查許可權。
指定受限許可權
Liberty 提供一種機制來指定執行 Web 或 EJB 應用程式元件時的受限許可權。受限許可權可確保不將該許可權的任何實例授與軟體組或應用程式。它們提供一種機制,用以阻止應用程式授與自己超乎容許範圍的許可權,例如,結束 VM 的許可權。受限許可權是在 server.xml 和 client.xml 檔中指定。下列範例顯示如何限制用來寫入系統內容 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 檔,來指定軟體組的許可權。此機制容許對軟體組的許可權進行精細存取控制。permissions.perm 檔指定軟體組所需的許可權數目上限。
重要: 空白的 permissions.perm 檔不等於沒有 permissions.perm 檔。如果您想要取得受限許可權,請確定您的 permissions.perm 檔不是空白。
在 server.xml 和 client.xml 中宣告應用程式的許可權
沒有指定程式碼庫且定義在 server.xml 和 client.xml 檔中的許可權,會套用至 Liberty 伺服器上的所有應用程式。您可以依照下列範例所示,在 server.xml 和 client.xml 檔中指定要授與的許可權。本例是授與 PropertyPermission,以便能夠讀取所有的系統內容:
<javaPermission className="java.util.PropertyPermission" name="*" actions="read" />
您可以在 server.xml 和 client.xml 檔中指定要限制的許可權。下列範例顯示如何限制用來寫入系統內容 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 中,而不會造成應用程式失敗。如果要啟用 no-rethrow 選項,請在 bootstrap.properties 檔中指定 websphere.java.security.norethrow=true。依預設,不會啟用 no-rethrow 選項,因此如果要啟用這個內容,請在 bootstrap.properties 檔中指定它。註: 由於這個內容不容許「安全管理程式」擲出異常狀況,從技術上來說,「安全管理程式」不會施行「Java 2 安全」。不得在正式作業環境中使用 no-rethrow 內容。