Java 2 보안 정책 마이그레이션
Java™ 2 보안 정책 마이그레이션과 관련된 안내는 이 주제를 사용하십시오.
이 태스크 정보
이전 WebSphere® Application Server 릴리스
WebSphere Application Server은 서버 런타임에서 Java 2 보안 관리자를 사용하여 엔터프라이즈 애플리케이션이 System.exit 및 System.setSecurityManager 메소드를 호출하는 것을 막습니다. 이러한 두 개의 Java API(Application Programming Interfaces)는 엔터프라이즈 애플리케이션에 의해 호출되면 원치 않는 결과가 나옵니다. 예를 들어, System.exit API는 JVM(Java Virtual Machine)(애플리케이션 서버 프로세스)이 영구적으로 종료되게 합니다. 이는 Application Server에는 바람직한 오퍼레이션이 아닙니다.
Java 2 보안 특성을 지원하려면 모든 서버 런타임은 privileged(doPrivileged API 호출이 올바른 장소에 삽입된 상태로)로 표시되어야 하고 기본 권한 세트 또는 정책을 식별해야 합니다. 애플리케이션 코드는 권한이 없고 정책 파일에 정의된 권한에 종속되지 않습니다. doPrivileged 인스트루먼테이션은 Java 2 보안을 지원하는 데 중요하고 필요합니다. 이것이 없으면 애플리케이션 코드에는 서버 런타임이 필요로 하는 권한이 부여되어야 합니다. 이 상황은 권한 확인을 수행하기 위해 Java 2 보안이 사용하는 디자인과 알고리즘으로 인한 것입니다. Java 2 보안 검사 권한 알고리즘을 참조하십시오.
- java.lang.RuntimePermission(exitVM)
- java.lang.RuntimePermission(setSecurityManager)
애플리케이션 코드는 Java 2 보안 정책에 무엇이 있는지와 관계 없이 이러한 권한에 대한 액세스를 거부합니다. 그러나 서버 런타임에는 이러한 권한이 부여됩니다. 다른 모든 권한 검사는 실행되지 않습니다.
- java.net.SocketPermission
- java.net.NetPermission
그러나 모든 제품 서버 런타임이 권한이 있는 것으로 적절하게 표시되지는 않습니다. 애플리케이션 코드에 앞서 나열된 두 개의 권한 이외의 모든 권한을 부여해야 합니다. 그렇지 않으면 애플리케이션이 잠재적으로 실행에 실패할 수 있습니다. 엔터프라이즈 애플리케이션의 이 Java 2 보안 정책은 자유롭습니다.
변경된 사항
Java 2 보안은 WebSphere Application Server에서 완전히 지원되고 이는 모든 권한이 강제 실행됨을 의미합니다. 엔터프라이즈 애플리케이션의 기본 Java 2 보안 정책은 Java Platform, Enterprise Edition(Java EE) 버전 1.4 명세에 의해 정의된 권장되는 권한 세트입니다. 엔터프라이즈 애플리케이션에 부여된 기본 Java 2 보안 정책에 대해서는 profile_root/config/cells/cell_name/nodes/node_name/app.policy 파일을 참조하십시오. 이 정책은 이전 릴리스보다 훨씬 엄격합니다.
모든 정책은 선언적입니다. 제품 보안 관리자는 정책 파일에 선언된 모든 정책을 존중합니다. 이 규칙에는 예외가 있습니다. 엔터프라이즈 애플리케이션은 profile_root/config/cells/cell_name/filter.policy 파일에 선언된 권한에 대한 액세스가 거부됩니다.
애플리케이션 코드에서 보안 관리자를 설정하기 위해 setSecurityManager 권한을 사용하지 마십시오. 애플리케이션이 setSecurityManager 권한을 사용할 때, WebSphere Application Server 내에 내부 보안 관리자와의 충돌이 있습니다. RMI 목적을 위해 애플리케이션에 보안 관리자를 설정해야 하는 경우에는, 또한 WebSphere Application Server 관리 콘솔 내에 글로벌 보안 페이지에 로컬 자원에 대한 애플리케이션 액세스를 제한하기 위해 Java 2 보안 사용 옵션을 사용으로 설정해야 합니다. WebSphere Application Server은 그런 다음 보안 관리자를 등록합니다. 애플리케이션 코드는 이 보안 관리자가 System.getSecurityManager() API(Application Programming Interface)를 사용하여 등록되는지를 확인할 수 있습니다.
시스템 특성 마이그레이션
- java.security.policy. 정책 파일의 절대 경로(조치 필수). 이 시스템 특성에는 시스템 권한(JVM(Java Virtual Machine) 및 제품 서버 런타임에 부여된 권한) 및 엔터프라이즈 애플리케이션 권한 둘 모두가 포함됩니다. 엔터프라이즈 애플리케이션의 Java 2 보안 정책을 버전 9.0으로 마이그레이션하십시오. Java 2 보안 정책 마이그레이션에 대해서는 for migrating Java 2 보안 정책 마이그레이션 단계를 참조하십시오.
- enableJava2Security. Java 2 보안 실행을 사용 가능으로 설정하는 데 사용됩니다(조치 필요 없음). 이 시스템 특성은 더 이상 사용되지 않습니다. WebSphere 구성 API(Application Programming Interface)에서 플래그는 Java 2 보안을 사용 가능으로 설정해야 하는지 여부를 제어하는 데 사용됩니다. 관리 콘솔을 통해 이 옵션을 사용 가능으로 설정하십시오.
- was.home. WebSphere Application Server의 설치 디렉토리로 확장됩니다(조치가 필요할 수도 있음). 이 시스템 특성은 더 이상 사용되지 않습니다. ${user.install.root} 및 ${was.install.root} 특성으로 대체되었습니다. 디렉토리에 인스턴스 특정 데이터가 포함된 경우에는 ${user.install.root}가 사용됩니다. 그렇지 않으면 ${was.install.root}가 사용됩니다. WebSphere Application Server 또는 WebSphere Application Server, Network Deployment 환경에 이러한 특성을 상호 교환적으로 사용하십시오. Java 2 보안 정책 마이그레이션을 위한 단계를 참조하십시오.
Java 2 보안 정책 마이그레이션
동일 정책 파일에 시스템 권한과 애플리케이션이 혼합되어 있으므로 Java 정책 파일을 버전 9.0로 자동으로 마이그레이션하기 위한 쉬운 방법이 존재하지 않습니다. 엔터프라이즈 애플리케이션의 Java 2 보안 정책을 was.policy 또는 app.policy 파일로 수동으로 복사하십시오. 그러나 절대 코드 베이스 대신에 기호 또는 상대 코드 베이스가 사용되므로 Java 2 보안 정책을 was.policy 파일로 마이그레이션하는 것이 선호됩니다. 이 프로세스는 여러 가지 장점을 가지고 있습니다. was.policy에 정의된 권한을 특정 엔터프라이즈 애플리케이션에만 부여하는 반면, app.policy 파일의 권한은 app.policy 파일이 속하는 노드에서 실행되는 모든 엔터프라이즈 애플리케이션에 적용하십시오.
정책 관리에 대한 자세한 정보는 Java 2 보안 정책 파일 주제를 참조하십시오.
다음 예제는 Java 2 보안 정책을 이전 릴리스로부터 마이그레이션하는 것을 설명합니다. 컨텐츠에는 app1.ear 엔터프라이즈 애플리케이션 및 시스템 권한의 Java 2 보안 정책 파일이 포함되고, 이는 JVM(Java Virtual Machine) 및 제품 서버 런타임에 부여되는 권한입니다.
Java 2 보안 정책 파일의 기본 위치는 profile_root/properties/java.policy입니다.
기본 권한은 명료성을 위해 생략됩니다.
Java 2 보안 정책 파일의 기본 위치는 profile_root/properties/java.policy입니다.
기본 권한은 명료성을 위해 생략됩니다.
// For product Samples
grant codeBase "file:${app_server_root}/installedApps/app1.ear/-" {
permission java.security.SecurityPermission "printIdentity";
permission java.io.FilePermission "${app_server_root}${/}temp${/}somefile.txt",
"read";
};
설명의 명료성을 위해 모든 권한은 이 예에서 애플리케이션 레벨 권한으로서 마이그레이션됩니다. 그러나 컴포넌트 레벨(웹, 엔터프라이즈 Bean, 커넥터 또는 유틸리티 Java 아카이브(JAR) 컴포넌트 레벨)에서 보다 세부 단위의 레벨에서 권한을 부여하거나 특정 컴포넌트에 권한을 부여할 수 있습니다.