Java 2 보안 정책 파일

J2EE(Java™ 2 Platform, Enterprise Edition) 버전 1.3 이상 스펙에는 컨테이너 제공자와 애플리케이션 코드 간 책임이 잘 정의된 프로그래밍 모델이 있습니다. Java 2 보안 관리자를 사용하여 이 프로그래밍 모델을 시행하는 것이 권장됩니다. 특정 조작은 컨테이너의 동작과 조작에 지장을 주기 때문에 이 애플리케이션 코드에서 지원되지 않습니다. Java 2 보안 관리자는 컨테이너 및 애플리케이션의 책임을 시행하기 위해 제품에서 사용됩니다.

문제점 방지 문제점 방지: 애플리케이션 서버는 사용자 정의 Java 보안 관리자 구현을 지원하지 않습니다. gotcha

이 제품은 정책 파일 관리에 대한 지원을 제공합니다. 제품에서 다수의 정책 파일은 정적이거나 동적입니다. 동적 정책은 특정 자원 유형에 대한 권한 템플리트입니다. 상대 코드 베이스는 동적 정책 템플리트에서 정의되지 않습니다. 코드 베이스는 배치 및 런타임 데이터에서 동적으로 계산됩니다.

정적 정책 파일

표 1. 정적 정책 파일.

이 테이블은 정적 정책 파일의 위치를 나열합니다.

정책 파일 위치
java.policy

[AIX Solaris HP-UX Linux Windows][z/OS]app_server_root/java/jre/lib/security/java.policy. 기본 권한은 모든 클래스에 부여됩니다. 이 파일의 정책은 WebSphere Application Server에 의해 실행된 모든 프로세스에 적용됩니다.

server.policy profile_root/properties/server.policy. 기본 권한은 모든 제품 서버에 부여됩니다.
client.policy profile_root/properties/client.policy. 기본 권한은 모든 제품 클라이언트 컨테이너 및 노드의 애플릿에 대해 부여됩니다.
정적 정책 파일은 구성 및 파일 복제 서비스에서 관리되지 않습니다. 이러한 파일에 대한 변경사항은 로컬이고 WebSphere Application Server, Network Deployment 셀의 다른 노드에 복제되지 않습니다.

동적 정책 파일

표 2. 동적 정책 파일.

이 테이블은 동적 정책 파일의 위치를 나열합니다.

정책 파일 위치
spi.policy

profile_root/config/cells/cell_name
/nodes/node_name/spi.policy

이 템플리트는 SPI(Service Provider Interface) 및 제품에 임베드되는 써드파티 자원을 위한 것입니다. SPI의 예는 MQ Series의 JMS(Java Message Service) 및 JDBC(Java database connectivity) 드라이버입니다. 임베디드 자원의 코드 베이스는 구성(resources.xml 파일) 및 런타임 데이터에서 동적으로 판별되고 spi.policy 파일에서 정의되는 권한은 자원 어댑터의 클래스 경로에서 지정되는 이러한 자원 및 JAR 파일에 자동으로 적용됩니다. spi.policy 파일의 기본 권한은 java.security.AllPermissions입니다.

library.policy

profile_root/config/cells/cell_name/nodes
/node_name/library.policy

이 템플리트는 라이브러리(Java 라이브러리 클래스)를 위한 것입니다. 여러 제품 애플리케이션에서 사용할 공유 라이브러리를 정의할 수 있습니다. library.policy 파일의 기본 권한은 비어 있음입니다.

app.policy

profile_root/config/cells/cell_name
/nodes/node_name/app.policy

app.policy 파일은 cell_namenode_name에서 실행되는 모든 엔터프라이즈 애플리케이션에 부여되는 기본 권한을 정의합니다.
참고: app.policy 파일에 대한 업데이트는 app.policy 파일이 속한 노드의 엔터프라이즈 애플리케이션에만 적용됩니다.
was.policy

profile_root/config/cells/cell_name
/applications/ear_file_name/deployments/
application_name/META-INF/was.policy

이 템플리트는 애플리케이션별 권한을 위한 것입니다. was.policy 파일은 EAR(Enterprise Archive) 파일에 임베드됩니다.

ra.xml rar_file_name/META-INF/was.policy.RAR.

이 파일에는 ra.xml 파일에서 정의되는 권한 스펙이 있을 수 있습니다. ra.xml 파일은 RAR 파일에 임베드됩니다.

app.policywas.policy 파일에서 지정되는 승인 항목에는 코드 베이스가 정의되어 있어야 합니다. 승인 항목이 코드 베이스 없이 지정되는 경우 정책 파일이 적절하게 로드되지 않고 애플리케이션은 실패할 수 있습니다. 모든 애플리케이션에 권한을 부여하려는 경우 승인 항목에서 코드 베이스로 file:${application}을 사용하십시오.

정책 파일의 구문

정책 파일은 여러 정책 항목을 포함합니다. 다음 예제는 각 정책 항목 형식을 보여줍니다.
grant [codebase <Codebase>] {
permission <Permission>;
 permission <Permission>;
permission <Permission>;
};

<CodeBase>: 	A URL.
			For example,  "file:${java.home}/lib/tools.jar"
						When [codebase <Codebase>] is not specified, listed 
               permissions are applied to everything.
						If URL ends with a JAR file name,  only the classes in the 
               JAR file belong to the codebase.
               If URL ends with "/", only the class files in the specified
               directory belong to the codebase.
               If URL ends with "*", all JAR and class files in the specified
               directory belong to the codebase.
               If URL ends with "-", all JAR and class files in the specified 
               directory and its subdirectories belong to the codebase.
<Permissions>: Consists from
							Permission Type  	: class name of the permission
     					Target Name      	: name specifying the target
     					Actions          	: actions allowed on target
			예를 들어, 다음과 같습니다.       			java.io.FilePermission "/tmp/xxx", "read,write"
각 권한의 세부사항은 개발자 킷 스펙의 내용을 참조하십시오.

동적 정책의 구문

엔터프라이즈 애플리케이션의 동적 정책 파일에서 특정 유형의 자원에 대한 권한을 정의할 수 있습니다. 이 조치는 제품 예약 기호를 사용하여 수행할 수 있습니다. 예약된 기호 범위는 정의되는 위치에 따라 다릅니다. app.policy 파일에서 권한을 정의하는 경우 기호는 node_name에서 실행되는 모든 엔터프라이즈 애플리케이션의 모든 자원에 적용됩니다. META-INF/was.policy 파일에서 권한을 정의하는 경우 기호는 특정 엔터프라이즈 애플리케이션에만 적용됩니다. 코드 베이스에 대해 유효한 기호는 다음 테이블에 나열됩니다.
표 3. 동적 정책 구문.

이 테이블은 동적 정책 파일의 코드 베이스에 대해 유효한 기호를 설명합니다.

기호 의미
file:${application} 권한이 애플리케이션 내 모든 자원에 적용됨
file:${jars} 권한이 애플리케이션 내 모든 유틸리티 JAR(Java archive) 파일에 적용됨
file:${ejbComponent} 권한이 애플리케이션 내 EJB(JavaBeans) 자원에 적용됨
file:${webComponent} 권한이 애플리케이션 내 웹 자원에 적용됨
file:${connectorComponent} 권한이 애플리케이션 내 커넥터 자원에 적용됨
코드 베이스 기호에 의해 지정되는 이러한 항목을 제외하고 세부 단위의 설정을 위한 모듈 이름을 지정할 수 있습니다. 예를 들어, 다음과 같습니다.
grant codeBase "file:DefaultWebApplication.war" {
   permission java.security.SecurityPermission "printIdentity";
 };

grant codeBase "file:IncCMP11.jar" {
permission java.io.FilePermission 
"${user.install.root}${/}bin${/}DefaultDB${/}-", 
"read,write,delete";
};
이전 코드 샘플에서 6번째 및 7번째 행은 한 개의 연속 행입니다. META-INF/was.policy 파일에서만 상대 코드 베이스를 사용할 수 있습니다. 권한 유형 목록을 특정 자원 유형에 연관시키기 위해 여러 제품 예약 기호가 정의됩니다.
표 4. 동적 정책 구문.

이 테이블은 권한 목록을 특정 자원 유형에 연관시키기 위해 정의되는 여러 제품 예약 기호를 설명합니다.

기호 의미
file:${application} 권한이 애플리케이션 내 모든 자원에 적용됨
file:${jars} 권한이 애플리케이션 내 모든 유틸리티 JAR 파일에 적용됨
file:${ejbComponent} 권한이 애플리케이션 내 엔터프라이즈 Bean 자원에 적용됨
file:${webComponent} 권한이 애플리케이션 내 웹 자원에 적용됨
file:${connectorComponent} 권한이 애플리케이션 및 독립형 커넥터에 있는 자원 둘 다의 커넥터 자원에 적용됨
다섯 개의 임베디드 기호가 제공되어 java.io.FilePermission 권한의 경로 및 이름을 지정합니다. 이러한 기호는 유연한 권한 스펙을 가능하게 합니다. 절대 파일 경로는 애플리케이션 설치 후 수정됩니다.
표 5. 동적 정책 구문.

이 테이블은 java.io.FilePermission 권한의 경로 및 이름을 지정하기 위해 제공되는 임베디드 기호를 설명합니다.

기호 의미
${app.installed.path} 애플리케이션이 설치되는 경로
${was.module.path} 모듈이 설치되는 경로
${current.cell.name} 현재 셀 이름
${current.node.name} 현재 노드 이름
${current.server.name} 현재 서버 이름
주의: ${application} 항목에서 ${was.module.path}를 사용하지 마십시오.

새 권한을 추가할 위치를 주의하여 판별하십시오. 잘못 지정된 권한은 AccessControlException 예외의 원인이 됩니다. 동적 정책은 런타임 시 코드 베이스를 분석하므로 문제점이 있는 정책 파일을 판별하는 것은 어렵습니다. 필요한 자원에만 권한을 추가하십시오. 예를 들어, 가능하면 ${application} 대신 ${ejbcomponent}etc를 사용하고 app.policy 파일 대신 was.policy 파일을 업데이트하십시오.

정적 정책 필터링

제한된 정적 정책 필터링 지원이 존재합니다. app.policy 파일 및 was.policy 파일에 thefilterMask 키워드로 filter.policy 파일에서 정의되는 권한이 있는 경우 런타임이 애플리케이션에서 이 권한을 제거하고 감사 메시지가 로그됩니다. 그러나 app.policywas.policy 파일에서 정의되는 권한이 복합 권한(예: java.security.AllPermission)인 경우 이 권한은 제거되지 않지만 로그 파일에 경고 메시지가 작성됩니다. 정책 필터링은 개발자 킷 권한만 지원하고 권한 패키지 이름은 java 또는 javax로 시작됩니다.

런타임 정책 필터링 지원은 더 엄격한 필터링을 강제 실행하기 위해 제공됩니다. app.policy 파일 및 was.policy 파일에 runtimeFilterMask 키워드로 filter.policy 파일에서 정의되는 권한이 있는 경우 런타임은 애플리케이션에 부여된 권한에 관계없이 애플리케이션에서 이 권한을 제거합니다. 예를 들어, was.policy 파일에 해당 모듈 중 하나에 부여된 java.security.AllPermission 권한이 있는 경우 runtimeFilterMask 권한과 같은 지정된 권한은 런타임 중에 부여된 권한에서 제거됩니다.

정책 파일 편집

개발자 킷(app_server_root/java/jre/bin/policytool)에서 제공되는 정책 도구를 사용하여 이전 정책 파일을 편집하도록 권장됩니다. WebSphere Application Server, Network Deployment의 경우 편집하기 전에 저장소에서 정책 파일을 추출하십시오. 정책 파일이 추출된 후 정책 도구를 사용하여 파일을 편집하십시오. 저장소에서 수정된 정책 파일을 확인하고 해당 파일을 다른 노드와 동기화하십시오.

문제점 해결

동적 정책을 디버그하려면 AccessControlException 예외의 세부사항 보고서를 생성하기 위한 세 가지 방식 중 하나를 선택하십시오.
  • 추적(RAS 추적에 의해 구성됨). 추적 스펙에서 추적으로 사용으로 설정합니다.
    주의: 다음 명령은 한 줄로 되어 있습니다.
    com.ibm.ws.security.policy.*=all=enabled:
    com.ibm.ws.security.core.SecurityManager=all=enabled
  • 추적(특성에 의해 구성됨). Java java.security.debug 특성을 지정합니다. java.security.debug 특성의 유효한 값은 다음과 같습니다.
    • 액세스. 필수 권한: 코드, 스택 및 코드 기본 위치 등의 모든 디버그 정보 인쇄
    • 스택. 필수 권한, 코드 및 스택을 포함한 디버그 정보를 인쇄합니다.
    • 실패. 필수 권한 및 코드를 포함하는 디버그 정보를 인쇄합니다.
  • ffdc. ffdc를 사용으로 설정하고 Level=4LAE=true를 변경하여 ffdcRun.properties 파일을 수정하십시오. 로그 파일에서 액세스 위반 키워드를 찾으십시오.

주제 유형을 표시하는 아이콘 참조 주제



시간소인 아이콘 마지막 업데이트 날짜: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rsec_rpolicydir
파일 이름:rsec_rpolicydir.html