Índice

Comprender el Modelo de Seguridad de Java y el Java Service Wrapper

El Java Service Wrapper implementa una serie de permisos que pueden utilizarse para controlar completamente el acceso al API del Wrapper utilizando el Modelo estándar de Seguridad Java.

Como se explica en la sección siguiente, el usuario puede definir los permisos deseados en un archivo de política sin ningún código Java. A continuación, el Java Service Wrapper utiliza este archivo de política a través de la clase Security Manager.

ADVERTENCIA

Java 17 ha desfasado el Security Manager. Ya no se recomienda el uso de este modelo de seguridad.

Controlar otro Servicio desde una Aplicación Java

El Wrapper permite iniciar, detener, interrogar y realizar otras operaciones en cualquier otro servicio en un sistema mediante el envío de los códigos de control adecuados. Esto puede ser de gran ayuda, pero si se usa incorrectamente también pueden surgir graves problemas de seguridad en un servidor. Por esta razón, el acceso al método WrapperManager.sendServiceControlCode(...) está desabilitado por defecto. Para hacer uso de esta opción se requiere que un Administrador de Seguridad (Security Manager) sea instalado en la máquina JVM y que permisos específicos sean concedidos.

Tenga en cuenta que el hecho de establecer un Security Manager probablemente hará que muchas cosas en la aplicación empiecen a fallar con errores de seguridad. Es necesario entrar y conceder los permisos adecuados para su aplicación. Consulte el siguiente tutorial de Oracle para obtener más información sobre los administradores de seguridad: http://docs.oracle.com/javase/tutorial/essential/environment/security.html

Configurar un Administrador de Seguridad (Security Manager):

La manera más simple de configurar un administrador de seguridad en la máquina JVM es agregar las siguientes propiedades a su archivo wrapper.conf:

Ejemplo de Configuración:
wrapper.java.additional.1=-Djava.security.manager
wrapper.java.additional.2=-Djava.security.policy=../conf/java.policy

java.security.manager:

La primera propiedad del sistema, java.security.manager (J2SE 5.0) (JavaSE6), le notifica a Java que el administrador de seguridad debe crearse cuando la máquina JVM también sea creada.

java.security.policy:

La segunda propiedad del sistema, java.security.policy (J2SE 5.0) (JavaSE6), luego indica la ubicación de un archivo que describirá los permisos que se deben otorgar dentro de su aplicación.

El archivo de políticas es un archivo de texto simple.

Ejemplo del archivo de políticas:
// Give Wrapper classes full permissions
grant codeBase "file:../lib/wrapper.jar" {
        permission java.security.AllPermission;
};

// Grant various permissions to a specific service.
grant codeBase "file:../lib/-" {
        permission org.tanukisoftware.wrapper.security.WrapperServicePermission
"myservice", "interrogate,start,stop";
};

El primer bloque permite a las clases wrapper.jar tener todos los permisos para hacer lo que deseen. Esto se recomienda, puesto que el Wrapper debe ser capaz de poner en marcha la aplicación completa esto significa que cualquier cosa que su aplicación haga se origina desde el Wrapper. Esto se recomienda, ya que el Wrapper debe poder iniciar toda la aplicación, lo que significa que todo lo que haga su aplicación se origina en el Wrapper.

El segundo bloque significa que cualquier otra clase en jars en su directorio lib son capaces de hacer llamadas para interrogar, iniciar y detener el servicio "myservice" a través del Wrapper. Si no se encuentran ahí, las llamadas darán como resultado que se lancen Excepciones de Seguridad (SecurityExceptions).

API WrapperManager.fireUserEvent

En la versión del Wrapper 3.5.8, se ha agregado la posibilidad de llamar a los eventos definidos del usuario a través del API WrapperManager. Si bien esta es una característica de gran alcance para facilitar el uso de eventos del usuario para los desarrolladores, también puede causar problemas de seguridad si se le permite a un programa llamar a todos los eventos desde sí mismo.

Para proporcionar una solución a esto, el API hace uso de la clase WrapperUserEventPermission, que puede ser establecida en el archivo de políticas del administrador de seguridad (SecurityManager).

Ejemplo del Archivo de Políticas:
grant codeBase "file:../lib/some.jar" {
        permission org.tanukisoftware.wrapper.security.WrapperUserEventPermission "fireUserEvent", "-10, 50, 100-200, 555-";
}

El ejemplo anterior suministra a la biblioteca "../lib/some.jar" con el permiso para llamar a los siguientes Eventos del Usuario (userEvents):

  • "-10" : si el número de inicio de un intervalo no se especifica, significa que la secuencia inicia con su primer valor, por ejemplo "1"

  • "50" : números se pueden definir individualmente

  • "100-200" : todos los números entre 100 y 200 (incluye 100 y 200)

  • "555-" : todos los números entre 555 en adelante hasta un límite alto de eventos disponibles, por ejemplo 32767.

NOTA

Para mantener consistencia, los números deben ser ordenados, lo que significa que lo siguiente no sería válido: "5, -4", "1, 8-10, 7", "9-, 7", etc. Cualquier configuración incorrecta provocará un error de acceso denegado.