Java 2 보안

Java™ 2 보안 기능은 WebSphere® Application Server Liberty에서 지원됩니다. Java 2 보안은 특정 보호되는 시스템 자원에 대한 액세스를 허용하기 전에 권한을 확인함으로써 전체 시스템 무결성을 향상시키는 정책 기반의 미세 조정된 액세스 제어 메커니즘을 제공합니다.

Java 2 보안는 Java Platform, Enterprise Edition 역할 기반 권한 부여와는 무관합니다. Java 2 보안은 시스템 자원(예: 파일 입력 및 출력, 소켓 및 특성)에 대한 액세스를 보호하는 반면, Java Platform, Enterprise Edition 보안은 웹 자원(예: 서블릿 및 JSP 파일)에 대한 액세스를 보호합니다.

배치자 및 관리자를 위한 Java 2 보안

Java 2 보안를 사용하기 전에, 모든 애플리케이션이 필수 권한을 부여받았는지 확인해야 합니다. 그렇지 않으면, 애플리케이션이 실행에 실패할 수 있습니다. 기본적으로, 애플리케이션은 Java Platform, Enterprise Edition 7.0 스펙에 따라 권한이 부여됩니다. 애플리케이션이 Java 2 보안에 준비되지 않은 경우 또는 애플리케이션 제공자가 애플리케이션의 일부로서 permissions.xml 파일을 제공하지 않는 경우, 애플리케이션은 Java 2 보안이 사용될 때 런타임에 Java 2 보안 액세스 제어 예외를 발생할 수 있습니다. 애플리케이션이 실행 중인 경우에도 이는 올바르게 실행되지 않을 수 있습니다.

애플리케이션 개발자를 위한 Java 2 보안

애플리케이션 개발자는 Java SDK API의 기본 WebSphere 정책 및 권한 요구사항에서 부여된 권한을 이해해야 합니다. 사용자는 애플리케이션이 호출하는 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 파일은 무시됩니다.

[17.0.0.2 and later]웹 애플리케이션 번들(WAB)이 포함된 OSGi 애플리케이션에 대해 작업할 때 권한은 permissions.perm 파일을 통해 추가됩니다. WAB에 permissions.perm 파일이 없는 경우 정책은 기본적으로 java.security.AllPermission입니다.

Java 2 보안 사용

Java 2 보안 기능은 커널 확장기능의 일부이며, websphere.java.security 특성으로 bootstrap.properties 파일을 업데이트하여 부트스트랩 시간에 사용됩니다.

websphere.java.security 특성이 bootstrap.properties 파일에 지정된 경우, Java 2 보안가 강제 실행됩니다. 그렇지 않으면, 권한 확인이 발생하지 않습니다.

제한된 권한 지정

Liberty는 웹 또는 EJB 애플리케이션 컴포넌트를 실행할 때 제한된 권한을 지정하는 메커니즘을 제공합니다. 제한된 권한은 번들 또는 애플리케이션에 대해 해당 권한의 인스턴스가 부여되지 않도록 보장합니다. 이는 애플리케이션이 허용되어야 하는 권한을 넘어 추가적인 권한을 자신에게 부여하지 못하도록 방지하는 메커니즘을 제공합니다(예: VM 종료 권한).
제한된 권한은 server.xmlclient.xml 파일에 지정됩니다. 다음 예는 시스템 특성 os.name 쓰기에 사용되는 PropertyPermission이 제한되는 방법을 보여줍니다. 이 구문은 server.xmlclient.xml 파일 모두에서 동일합니다.
<javaPermission className="java.security.PropertyPermission" name="os.name" actions="write" restriction="true" />

권한 부여

OSGi 번들은 permissions.perm 파일을 통해 번들 내의 라이브러리/클래스에 대해 부여된 권한을 자체 조정할 수 있습니다.

애플리케이션 또한 permissions.xml 파일을 통해 또는 server.xmlclient.xml 파일에 권한 부여를 지정함으로써 부여된 권한을 자체 조정할 수 있습니다.

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.name 쓰기에 사용되는 PropertyPermission이 제한되는 방법을 보여줍니다. 이 구문은 server.xmlclient.xml 파일 모두에서 동일합니다.
<javaPermission className="java.security.PropertyPermission" name="os.name" actions="write" restriction="true" />
참고:
  • 제한된 권한에서는 restrictiontrue로 설정됩니다.
  • 애플리케이션이 제한된 권한으로 정의된 권한을 자신에게 부여하고자 시도하는 경우, 제한된 권한은 권한 부여에 우선하며 권한 부여를 허용하지 않습니다.

애플리케이션에 대해 permissions.xml의 권한 선언

permissions.xml 파일은 Java EE7 스펙에 의해 도입된 새 파일입니다. 이는 애플리케이션에 대해 META-INF 디렉토리 아래에 패키징되어 있습니다.

독립형 .war 파일로서 패키징된 애플리케이션의 경우, META-INF WAR 레벨에서 지정된 권한이 .war 파일 내에 패키징된 모든 모듈 및 라이브러리에 적용됩니다.

.ear 파일에 패키징된 애플리케이션의 경우, 권한의 선언은 .ear 파일 레벨에 있어야 합니다. 이 권한 세트는 .ear 파일 내에 또는 해당 포함된 모듈 내에 패키징된 모든 모듈 및 라이브러리에 적용됩니다. .ear 파일 자체에 대해 permissions.xml 파일이 제공되는지 여부와는 무관하게, 해당 패키징된 모듈 내의 permissions.xml 파일은 무시됩니다.

.rar 파일에 패키징된 애플리케이션의 경우, 권한의 선언은 META-INF RAR 레벨에 있어야 합니다.

No-rethrow 옵션

Java 2 보안을 사용하는 경우, JDK 보안 관리자는 권한 위반이 발생할 때 기본적으로 java.security.AccessControl 예외를 발생합니다. 예외가 처리되지 않는 경우, 이는 런타임 장애를 유발할 수 있습니다. Java 2 보안에 대해 자체 애플리케이션을 준비할 때 개발자에게 도움이 될 수 있도록 no-rethrow 옵션이 사용 가능합니다. no-rethrow 옵션은 AccessControl 예외가 console.logmessages.log에 로깅될 수 있도록 허용하지만, 애플리케이션의 실패를 유발하지 않습니다. no-rethrow 옵션은 bootstrap.properties 파일에서 websphere.java.security.norethrow=true를 지정하여 사용으로 설정됩니다. no-rethrow 옵션이 기본적으로 사용되지 않으므로, 사용자는 bootstrap.properties 파일에 이를 지정하여 이 특성을 사용으로 설정해야 합니다.
참고: 이 특성이 보안 관리자의 예외 발생을 허용하지 않으므로, 보안 관리자는 기술적으로 Java 2 보안을 강제 실행하지 않습니다. no-rethrow 특성은 프로덕션 환경에서는 절대 사용하지 마십시오.

동적 업데이트

permissions.perm, permissions.xml, server.xmlclient.xml 등의 권한 파일에 대한 동적 업데이트는 지원되지 않습니다. 권한을 업데이트하려면 Liberty 서버를 다시 시작해야 합니다.

주제의 유형을 표시하는 아이콘 개념 주제

파일 이름: cwlp_java2security.html