Usar el SecurityManager de Java con tomcat
¿Por qué usar un SecurityManager
El SecurityManager de Java es el que permite a un navegador ejecutar un applet en su propia caja para
evitar que código no firmado acceda a ficheros del sistema local, conectar con un host distinto de donde se
cargó el applet, etc.
De la misma forma que el SecurityManager nos protege de que se ejecute un applet no firmado en
nuestro navegador, el uso de un SecurityManager mientras se ejecuta Tomcat puede protejer nuestro servidor de servelts, JSP's, beans JSP, y librerías de etiquetas troyanos. O incluso de errores inadvertidos.
Imagina que alguien que está autorizado a publicar un JSP en nuestro site inadvertidamente incluye esto en su JSP:
<% System.exit(1); %>
Cada vez que el JSP sea ejecutado por Tomcat, Tomcat se cerrará.
Usar el SecurityManager de Java es sólo una línea más de defensa que un administrador de sistemas puede usar para mantener el servidor seguro y fiable.
Requirimientos del Sistema
El uso del SecurityManager requiere una JVM que soporte JDK 1.2.
Precacuciones
La implementación de un SecurityManager en Tomcat no ha sido completamente probada para asegurar la seguridad de Tomcat. No se han creado Permissions especiales para evitar accesos a clases internas de Tomcat por parte de JSPs, aplicaciones web, beans o librerías de etiquetas. Debemos asegurarnos de que estamoa satisfechos con nuestra configuración de SecurityManager antes de permitir que los usuarios
no creibles publiquen aplicacions web, JSPs, servlets, beans o librerías de etiquetas en nuestra site.
Aún así, ejecutarlo con un SecurityManager definitivamente es mejor que hacerlo sin ninguno.
Tipos de Permisos
Las clases Permission se usan para definir que clases de Permisos tendrán las clases cargadas por Tomcat. Hay varias clases de Permission como parte del JDK e incluso podemos crear las nuestras propias para usarlar en nuestras aplicaciones web.
Este es sólo un pequeño sumario de las clases de System SecurityManager Permission aplicables a Tomcat. Puedes encontrar más documentación sobre el uso de las clases siguientes en la documentación del JDK.
java.util.PropertyPermission
Controla los accesos de lectura/escritura a las propiedades de JVM como
java.home.
java.lang.RuntimePermission
Controla el uso de algunas funciones de sistema/ejecución como exit()
y exec().
java.io.FilePermission
Controla los aceeso de lectura/escritura/ejecución a ficheros y directorios.
java.net.SocketPermission
Controla el uso de sockets de red.
java.net.NetPermission
Controla el uso de conexiones de red multicast.
java.lang.reflect.ReflectPermission
Controla el uso de reflection para hacer introspection de clase.
java.security.SecurityPermission
Controla el acceso a los métodos de Security.
java.security.AllPermission
Permite acceder a todos los permisos, como si se estuviera ejecutando Tomcat sin un SecurityManager.
¿Qué sucede cuando el SecurityManager detecta una Violación de Seguridad
La JVM lanzará una AccessControlException o una SecurityException cuando el
SecurityManager detecte una violación dela política de seguridad.