JavaMail API 보안 권한 우수 사례

다수의 활동에서 JavaMail API는 특정 구성 파일에 액세스해야 합니다. JavaMail 및 JavaBeans Activation Framework 2진 패키지 자체에 이미 필요한 구성 파일이 있습니다. 그러나 JavaMail API를 사용하면 사용자가 사용자별 및 설치별 구성 파일을 특수 요구사항에 맞게 정의할 수 있습니다.

이러한 구성 파일을 배치할 수 있는 두 위치는 <user.home><java.home>/lib 디렉토리입니다. 예를 들어, JavaMail API가 메시지를 전송할 때 mailcap이라는 이름의 파일에 액세스해야 하는 경우 API는 다음을 수행합니다.
  1. <user.home>/mailcap에 액세스하려고 시도합니다.
  2. 보안 권한 부족 또는 존재하지 않는 파일로 인해 첫 번째 시도가 실패하는 경우 API가 <java.home>/lib/mailcap에서 검색합니다.
  3. 두 번째 시도도 실패하면 API가 클래스 경로에 있는 META-INF/mailcap 위치에서 검색합니다. 이 위치는 실제로 mail-impl.jar 및 activation-impl.jar 파일에 포함된 구성 파일로 이어집니다.
애플리케이션 서버는 mail-impl.jar 및 activation-impl.jar 파일에 포함된 JavaMail API 구성 파일을 사용하고 <user.home><java.home>/lib 디렉토리에는 어떠한 구성 파일도 없습니다. JavaMail API의 정상적인 작동을 보장하기 위해 애플리케이션 서버는 mail-impl.jar 및 activation-impl.jar 파일 둘 다에 설치된 모든 애플리케이션에 대한 파일 읽기 권한을 부여합니다.
JavaMail 코드가 <user.home><java.home>/lib에서 구성 파일에 액세스하려고 시도하면 기본 구성은 기본적으로 이 두 위치에 파일 읽기 권한을 부여하지 않기 때문에 이로 인해 액세스 제어 예외가 처리될 수 있습니다. 이 활동은 JavaMail API의 정상적인 작동에 영향을 주지 않지만 시스템 로그에 보고된 다량의 메일 관련 보안 예외를 볼 수 있고 이러한 오류는 찾고 있는 유해한 오류를 찾기 어렵게 할 수 있습니다. 다음은 보안 메시지 SECJ0314W의 샘플입니다.
[02/31/08 12:55:38:188 PDT] 00000058 SecurityManag W   SECJ0314W: Current Java 2 Security policy reported a 
potential violation of Java 2 Security Permission. 
자세한 정보는 문제점 판별 안내서를 참조하십시오.

Permission: 

      D:\o063919\java\jre\lib\javamail.providers : access denied (java.io.FilePermission 
D:\o063919\java\jre\lib\javamail.providers read)


Code: 

     com.ibm.ws.mail.SessionFactory  in  {file:/D:/o063919/lib/runtime.jar}



Stack Trace: 

java.security.AccessControlException: access denied (java.io.FilePermission D:\o063919\java\jre\lib\javamail.providers read)
	at java.security.AccessControlContext.checkPermission(AccessControlContext.java(Compiled Code))
	at java.security.AccessController.checkPermission(AccessController.java(Compiled Code))
	at java.lang.SecurityManager.checkPermission(SecurityManager.java(Compiled Code))
	at com.ibm.ws.security.core.SecurityManager.checkPermission(SecurityManager.java(Compiled Code))
	at java.lang.SecurityManager.checkRead(SecurityManager.java(Compiled Code))
	at java.io.FileInputStream.<init>(FileInputStream.java(Compiled Code))
	at java.io.FileInputStream.<init>(FileInputStream.java:89)
	at javax.mail.Session.loadFile(Session.java:1004)
	at javax.mail.Session.loadProviders(Session.java:861)
	at javax.mail.Session.<init>(Session.java:191)
	at javax.mail.Session.getInstance(Session.java:213)
	at com.ibm.ws.mail.SessionFactory.getObjectInstance(SessionFactory.java:67)
	at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:314)
	at com.ibm.ws.naming.util.Helpers.processSerializedObjectForLookupExt(Helpers.java:894)
	at com.ibm.ws.naming.util.Helpers.processSerializedObjectForLookup(Helpers.java:701)
	at com.ibm.ws.naming.jndicos.CNContextImpl.processResolveResults(CNContextImpl.java:1937)
	at com.ibm.ws.naming.jndicos.CNContextImpl.doLookup(CNContextImpl.java:1792)
	at com.ibm.ws.naming.jndicos.CNContextImpl.doLookup(CNContextImpl.java:1707)
	at com.ibm.ws.naming.jndicos.CNContextImpl.lookupExt(CNContextImpl.java:1412)
	at com.ibm.ws.naming.jndicos.CNContextImpl.lookup(CNContextImpl.java:1290)
	at com.ibm.ws.naming.util.WsnInitCtx.lookup(WsnInitCtx.java:145)
	at javax.naming.InitialContext.lookup(InitialContext.java:361)
	at emailservice.com.onlinebank.bpel.EmailService20060907T224337EntityAbstractBase$JSE_6.
execute(EmailService20060907T224337EntityAbstractBase.java:32)
	at com.ibm.bpe.framework.ProcessBase6.executeJavaSnippet(ProcessBase6.java:256)
	at emailservice.com.onlinebank.bpel.EmailService20060907T224337EntityBase.invokeSnippet
(EmailService20060907T224337EntityBase.java:40)
참고: 이 상황이 문제점인 경우 더 많은 위치에 추가 읽기 액세스 권한을 추가하는 것을 고려하십시오. 이 경우 로그 파일에서 대부분의(그러나 전부는 아님) JavaMail 관련 무해한 보안 예외가 제거되어야 합니다.
JavaMail에 필요한 권한은 다음과 같습니다.
grant codeBase "file:${application}" {
  // Allow access to default configuration files
  permission java.io.FilePermission "${java.home}${/}jre${/}lib${/}javamail.address.map", "read";
  permission java.io.FilePermission "${java.home}${/}jre${/}lib${/}javamail.providers", "read";
  permission java.io.FilePermission "${java.home}${/}jre${/}lib${/}mailcap", "read";
  permission java.io.FilePermission "${java.home}${/}lib${/}javamail.address.map", "read";
  permission java.io.FilePermission "${java.home}${/}lib${/}javamail.providers", "read";
  permission java.io.FilePermission "${java.home}${/}lib${/}mailcap", "read";
  permission java.io.FilePermission "${user.home}${/}.mailcap", "read";
  permission java.io.FilePermission "${was.install.root}${/}lib${/}activation-impl.jar", "read";
  permission java.io.FilePermission "${was.install.root}${/}lib${/}mail-impl.jar", "read";
  permission java.io.FilePermission "${was.install.root}${/}plugins${/}com.ibm.ws.prereq.javamail.jar", "read";
  // If using an isolated mail provider, 
  // add additional file read permissions for each jar defined
  // for the isolated mail provider
  // permission java.io.FilePermission "path${/}mail.jar, "read";
  
  // Allow connection to mail server using SMTP
  permission java.net.SocketPermission "*:25", "connect,resolve";
  // Allow connection to mail server using SMTPS
  permission java.net.SocketPermission "*:465", "connect,resolve";
  
  // Allow connection to mail server using IMAP
  permission java.net.SocketPermission "*:143", "connect,resolve";
  // Allow connection to mail server using IMAPS
  permission java.net.SocketPermission "*:993", "connect,resolve";
  
  // Allow connection to mail server using POP3
  permission java.net.SocketPermission "*:110", "connect,resolve";
  // Allow connection to mail server using POP3S
  permission java.net.SocketPermission "*:995", "connect,resolve";
  
  // Allow System.getProperties() to be used
  // permission java.util.PropertyPermission "*", "read,write";
  // Otherwise use the following to allow system properties to be read
  permission java.util.PropertyPermission "*", "read";
};

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



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