2009-02-23 9 views
5

Tenemos una tienda triple localmente desarrollada basada en b-trees que quiero usar para el almacenamiento persistente en una serie de aplicaciones servlet. En lugar de incrustar los archivos de índice b-tree en el servlet .war, me gustaría almacenarlos en una ubicación conocida y hacer que los servlets accedan a ellos directamente. Todo esto funciona en Jetty, pero genera una excepción de seguridad cuando lo pruebo en Tomcat. Me dijeron que el modelo de seguridad de Tomcat requiere permisos explícitos para que un servlet acceda a los archivos fuera del árbol de directorios donde se descomprime .war. Si he entendido la documentación de Tomcat (versión 5.5) correctamente, los siguientes añadidos a catalina.policy debe permitir que el servlet para acceder a los directorios donde los archivos de índice son:Configuración de catalina.policy para permitir el acceso a archivos por servlets

grant codeBase "jar:file:${catalina.home}/webapps/mytestapp/-" 
{ 
    permission java.io.FilePermission "/var/data/tdb/-", "read, write, delete"; 
} 

Sin embargo, sigo teniendo una excepción de seguridad:

java.io.FileNotFoundException: 
        /var/data/tdb/kb/node2id.idn (Permission denied) 
    at java.io.RandomAccessFile.open(Native Method) 
    ... 

Para marcar los obvios errores tontos: he comprobado que los archivos de índice están en la ubicación correcta, con los permisos correctos y no están dañados. Cualquier sugerencia o sugerencia sobre lo que tengo mal en la configuración de seguridad sería recibida con gratitud.

+0

¿Puedes publicar cómo estás abriendo el archivo/qué código estás utilizando para hacerlo? –

+0

¿Estás ejecutando selinux? Si es así, puede que necesite configurar selinux para que permita el acceso a ese directorio por parte de Java. – Eddie

Respuesta

4
java.io.FileNotFoundException: 
       /var/data/tdb/kb/node2id.idn (Permission denied) 

Este es su sistema operativo que niega el acceso, no la seguridad de Java. Si fuera la seguridad de Java, obtendría un AccessControlException (o alguna otra forma de SecurityException). El usuario en el que está ejecutando el proceso Tomcat probablemente no tenga acceso a ese archivo.

+0

Hola Tom, Gracias por la información. Eso fue lo primero que pensé, pero ya seleccioné y arreglé los archivos y el directorio en el que están, para el mismo usuario y grupo que el proceso de Tomcat. Aún así, me da un puntero para investigar. Gracias. –

+1

Tom tenía razón, era un problema de permisos de archivos del sistema operativo, no Tomcat. Todavía no he llegado al fondo del asunto, pero al abrir temporalmente los permisos de archivo en el servidor de prueba a + rw se elimina la excepción. ¡Ahora solo tengo que encontrar una configuración más restrictiva que no deje la tienda abierta de par en par! –

Cuestiones relacionadas