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 中的許可權
許可權是藉由 permissions.xml 檔新增至應用程式,所列出之許可權相關聯的程式碼庫,則取決於檔案的位置。 若為獨立式 .war 應用程式,permissions.xml 檔隨附在 META-INF 目錄之下,且所有指定的許可權會套用至 .war 檔所包含的所有模組。 若為 .ear 應用程式,permissions.xml 直接隨附在 .ear 本身的 META-INF 目錄之下,指定的許可權會套用至 .ear 檔所包含的所有模組。
附註: 如果是 .ear 應用程式,則會忽略 .ear 以外任何模組的 META-INF 目錄下所組合的 permissions.xml 檔。

如果您使用的 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 的許可權。
受限許可權是在 server.xmlclient.xml 檔中指定。 下列範例顯示如何限制用來寫入系統內容 os.namePropertyPermission。 此語法在 server.xmlclient.xml 檔中是相同的:

<javaPermission className="java.security.PropertyPermission" name="os.name" actions="write" restriction="true" />

授與許可權

如果是透過 permissions.perm 檔,將許可權授與軟體組內的程式庫/類別,OSGi 軟體組可以自我調節這些許可權。

應用程式也可以自我調節透過 permissions.xml 檔來授與的許可權,或是藉由在 server.xmlclient.xml 檔中指定授與 (grants) 許可權來自我調節。

OSGi 軟體組許可權

OSGi 規格提供一種機制,可讓您透過軟體組 OSGI-INF 目錄中的 permissions.perm 檔,來指定軟體組的許可權。 此機制容許對軟體組的許可權進行精細存取控制。
permissions.perm 檔指定軟體組所需的許可權數目上限。
重要事項: 空的 permissions.perm 檔案不等於沒有 permissions.perm 檔案。 如果您想要取得受限許可權,請確定您的 permissions.perm 檔不是空白。

server.xmlclient.xml 中宣告應用程式的許可權

沒有指定程式碼庫的許可權 (定義在 server.xmlclient.xml 檔中) 適用於該 Liberty 伺服器上的所有應用程式。
您可以依照下列範例所示,在 server.xmlclient.xml 檔中指定要授與的許可權。 本例是授與 PropertyPermission,以便能夠讀取所有的系統內容:

<javaPermission className="java.util.PropertyPermission"  name="*" actions="read" />
您可以在 server.xmlclient.xml 檔中指定要限制的許可權。 下列範例顯示如何限制用來寫入系統內容 os.namePropertyPermission。 此語法在 server.xmlclient.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.logmessages.log 中,而不會造成應用程式失敗。 在 bootstrap.properties 檔案中指定 websphere.java.security.norethrow=true ,即可啟用 no-rethrow 選項。 依預設,不會啟用 no-rethrow 選項,因此如果要啟用這個內容,請在 bootstrap.properties 檔中指定它。
附註: 因為此內容不容許「安全管理程式」擲出異常狀況,所以「安全管理程式」在技術上不會強制執行「Java 2 安全」。 不得在正式作業環境中使用 no-rethrow 內容。

動態更新

不支援對 permissions.permpermissions.xmlserver.xmlclient.xml 之類的許可權檔案進行動態更新。 更新許可權需要重新啟動 Liberty 伺服器。