[Résolu]Tomcat: Security Manager configuration

Configuration de Tomcat et ses différents fichiers XML.

Modérateur : Modérateurs

kramp
Nouveau membre
Messages : 3
Inscription : mer. 03 déc. 2008, 21:35

[Résolu]Tomcat: Security Manager configuration

Messagepar kramp » mer. 03 déc. 2008, 21:47

J'ai développé une appli qui utilise Tomcat5.5 (paquet .deb) comme server web. Pour la mettre en production (1ère fois que je vais utiliser tomcat en prod), j'ai donc configuré le Security Manager. Toutes mes fonctionnalités sont ok sauf une erreur: j'ai une exception après un redémarrage de tomcat. Elle est du à la première compilation des pages JSP qui utilisent la JSTL et donc des tags custom (je pense que ca peut être l'erreur mais je ne suis pas sur). Et à partir du second accès à une page elle ne réapparait plus (sauf si je redémarre le server, bien sur).

Code : Tout sélectionner

org.apache.jasper.JasperException: access denied (java.lang.RuntimePermission accessClassInPackage.org.apache.coyote)
....


J'ai donc ajouté ceci au fichier /etc/tomcat5.5/policy.d/04webapps.policy dans la section grant

Code : Tout sélectionner

permission java.lang.RuntimePermission "accessClassInPackage.org.apache.jasper.runtime";
permission java.lang.RuntimePermission "accessClassInPackage.org.apache.jasper.runtime.*" ;
permission java.lang.RuntimePermission "defineClassInPackage.org.apache.jasper.runtime";
permission java.lang.RuntimePermission "defineClassInPackage.org.apache.jasper.runtime.*" ;


mon répertoire de compilation à toutes les permissions

Code : Tout sélectionner

grant codeBase "file:/my/webapps/directory/WEB-INF/work/-" {
        permission java.security.AllPermission;
};


Les permissions sont alouées pour toutes les librairies que j'utilise ainsi que le répertoire de binaire (WEB-INF/classes).
Mais rien n'y fait. Apparement cette erreur est récurente (j'ai lu ca dans un forum) et ni google ni les forums m'ont donné une solution.
Si comme moi tu as eu ce problème et que tu as trouvé une solution, alors tu es mon sauveur.

Ma config:
Ubuntu Hardy
tomcat5.5 (des dépots)
tomcat5.5-admin
jvm de chez sun: /usr/lib/jvm/java-6-sun
L'appli en soi utilise spring-mvc, ibatis, etc. (je ne pense pas que ca ait d'impact)

Voici l'exception complète:

Code : Tout sélectionner

org.apache.jasper.JasperException: access denied (java.lang.RuntimePermission accessClassInPackage.org.apache.coyote)
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:460)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244)
    java.security.AccessController.doPrivileged(Native Method)
    javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
    org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276)
    org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162)
    java.security.AccessController.doPrivileged(Native Method)
    java.security.AccessController.doPrivileged(Native Method)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:142)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:239)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1142)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:879)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:792)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:476)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:431)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244)
    java.security.AccessController.doPrivileged(Native Method)
    javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
    org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276)
    org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162)
    java.security.AccessController.doPrivileged(Native Method)
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244)
    java.security.AccessController.doPrivileged(Native Method)
    javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
    org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276)
    org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:218)

cause mère

java.security.AccessControlException: access denied (java.lang.RuntimePermission accessClassInPackage.org.apache.coyote)
    java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
    java.security.AccessController.checkPermission(AccessController.java:546)
    java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
    java.lang.SecurityManager.checkPackageAccess(SecurityManager.java:1512)
    sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:298)
    java.lang.ClassLoader.loadClass(ClassLoader.java:300)
    java.lang.ClassLoader.loadClass(ClassLoader.java:300)
    java.lang.ClassLoader.loadClass(ClassLoader.java:252)
    java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
    org.apache.coyote.http11.InternalOutputBuffer.sendStatus(InternalOutputBuffer.java:452)
    org.apache.coyote.http11.Http11Processor.prepareResponse(Http11Processor.java:1617)
    org.apache.coyote.http11.Http11Processor.action(Http11Processor.java:967)
    org.apache.coyote.Response.action(Response.java:181)
    org.apache.coyote.http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.java:576)
    org.apache.coyote.Response.doWrite(Response.java:560)
    org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:361)
    org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:323)
    org.apache.tomcat.util.buf.IntermediateOutputStream.write(C2BConverter.java:236)
    sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:202)
    sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:263)
    sun.nio.cs.StreamEncoder.write(StreamEncoder.java:106)
    java.io.OutputStreamWriter.write(OutputStreamWriter.java:190)
    org.apache.tomcat.util.buf.WriteConvertor.write(C2BConverter.java:190)
    org.apache.tomcat.util.buf.C2BConverter.convert(C2BConverter.java:81)
    org.apache.catalina.connector.OutputBuffer.realWriteChars(OutputBuffer.java:535)
    org.apache.tomcat.util.buf.CharChunk.append(CharChunk.java:255)
    org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:456)
    org.apache.catalina.connector.CoyoteWriter.write(CoyoteWriter.java:143)
    org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:119)
    org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java:326)
    org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java:342)
    org.apache.jasper.runtime.JspWriterImpl.print(JspWriterImpl.java:468)
    com.avocats.ui.tag.GoToTag.doTag(GoToTag.java:247)
    org.apache.jsp.WEB_002dINF.views.public_.home_jsp._jspx_meth_av_005ffurl_005f3(home_jsp.java:715)
    org.apache.jsp.WEB_002dINF.views.public_.home_jsp._jspx_meth_c_005fif_005f3(home_jsp.java:617)
    org.apache.jsp.WEB_002dINF.views.public_.home_jsp._jspService(home_jsp.java:236)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244)
    java.security.AccessController.doPrivileged(Native Method)
    javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
    org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276)
    org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162)
    java.security.AccessController.doPrivileged(Native Method)
    java.security.AccessController.doPrivileged(Native Method)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:142)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:239)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1142)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:879)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:792)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:476)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:431)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244)
    java.security.AccessController.doPrivileged(Native Method)
    javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
    org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276)
    org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162)
    java.security.AccessController.doPrivileged(Native Method)
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244)
    java.security.AccessController.doPrivileged(Native Method)
    javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
    org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276)
    org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:218)


Peut-être que ca n'a rien à voir mais dans le fichier /etc/default/tomcat5.5 il y a la variable JSP_COMPILER=jikes. J'ai testé avec JSP_COMPILER=jikes et JSP_COMPILER=jasper mais ca ne change rien

Merci d'avance
Dernière édition par kramp le lun. 04 mai 2009, 20:37, édité 1 fois.

mystery_inter
Nouveau membre
Messages : 1
Inscription : lun. 04 mai 2009, 8:35

Re: Tomcat: Security Manager configuration

Messagepar mystery_inter » lun. 04 mai 2009, 8:39

Les droits sur le contenu du fichier -> x-laptop:~$ ls /usr/lib/jvm/ java-6-sun java-6-sun-1.6.0.07
ne sont pas suffisant tu dois faire un chmod -R 755 /usr/lib/jvm en super user

kramp
Nouveau membre
Messages : 3
Inscription : mer. 03 déc. 2008, 21:35

Re: Tomcat: Security Manager configuration

Messagepar kramp » lun. 04 mai 2009, 20:37

Merci pour ta réponse mais j'ai trouvé la soltution, mais en fait il me manquait une permission sur une propriété de la TagLib:

Code : Tout sélectionner

    grant {
      permission java.util.PropertyPermission "org.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER", "read,write";
    }



Au début j'ai bien galéré, mais j'ai finalement réussit à utiliser le Security Manager avec des droits fins.


Revenir vers « Configuration »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité