Seguridad en la Plataforma Java 2 JDK 1.2

Cuando se ejecuta una aplicacin no se instala automticamente un controlador de seguridad. En el siguiente paso, veremos como aplicar las mismas polticaa de seguridad a una aplicacin encontrada en el sistema local de ficheros que a un applet de la red. Primero, demostraremos que no se instala ningn controlador de seguridad para las aplicaciones, y as las aplicaciones tienen acceso total a los recursos, como fue siempre en el caso del JDK 1.1.

Creamos un fichero llamado GetProps.java copiando o descargando el cdigo fuente GetProps.java.

Los ejemplos de esta leccin asumen que lo hemos puesto en el directorio C:\Test si estamos usando un sistema Windows o en el directorio ~/test para UNIX.

Como podrs ver si examinas el cdigo fuente, este programa trata de leer valores de varias propiedades cuyos nombres son: "os.name" , "java.version", "user.home", y "java.home".

Ahora compila y ejecuta GetProps.java. Deberas ver una salida como esta.

C:\TEST>java GetProps
    About to get os.name property value
      The name of your operating system is: Windows 95
    About to get java.version property value
      The version of the JVM you are running is: 1.2.2
    About to get user.home property value
      Your user home directory is: C:\WINDOWS
    About to get java.home property value
      Your JRE installation directory is: C:\JDK1.2.2\JRE

Como se puede ver, las aplicaciones tienen acceso total a los valores de las propiedades, como se ve en la siguiente figura.

.Ver cmo Restringir las Aplicaciones

Como hemos visto en el paso anterior, cuando se ejecuta una aplicacin no se instala automticamente un controlador de seguridad. Para aplicar la misma poltica de seguridad a una aplciacin encontrada en el sistema local de ficheros que a los applets descargados de la red, llamamos al intrprete con el nuevo argumento de la lnea de comandos -Djava.security.manager.

Para ejecutar la aplicacin GetProps con el controlador de seguridad por defecto, tecleamos lo siguiente.

java -Djava.security.manager GetProps

Aqu podemos ver la salida del programa.

C:\TEST>java -Djava.security.manager GetProps
    About to get os.name property value
      The name of your operating system is: Windows 95
    About to get java.version property value
      The version of the JVM you are running is: JDK 1.2.2
    About to get user.home property value
    Caught exception java.security.AccessControlException.
    access denied (java.util.PropertyPermission user.home read)

El proceso se puede ver la siguiente figura.

.Propiedades Sensibles a la Seguridad

El fichero de poltica del sistema, cargado por defecto, concede a todo cdigo permiso para acceder a algunas de las propiedades ms comunes como "os.name" y "java.version". Estas propiedades no son sensibles a la seguridad, por eso la concesin de dichos permisos no supone un problema.

Las otras propiedades a las que GetProps intenta acceder, "user.home" y "java.home", no estn en la lista de propiedades para las que el fichero de poltica del sistemas concede permiso de lectura. As, tan pronto como GetProps intenta acceder a la primera de estas propiedades ("user.home"), el controlador de seguridad evita el acceso y reporta una AccessControlException. Esta excepcin indica que la poltica actualmente activo, que consiste en entradas de uno o ms ficheros de poltica, no conceden permiso para leer la propiedad."user.home".

.El Fichero de Poltica del Sistema

El fichero de poltica del sistema se encuentra por defecto en.

  Windows.
    java.home\lib\security\java.policy  
  UNIX.
    java.home/lib/security/java.policy  

Observa que java.home representa el valor de la propiedad "java.home", que es una propiedad del sistema que especifica el directorio en que se instal el JRE. As si el JRE fue instalado en el directorio llamado C:\jdk1.2.2\jre sobre Windows y /jdk1.2.2/jre sobre UNIX, el fichero de poltica del sistema estar en

  Windows.
    C:\jdk1.2.2\jre\lib\security\java.policy  
  UNIX.
    /jdk1.2.2/jre/lib/security/java.policy  

Aqu hay una copia del fichero de poltica del sistema.

.Configurar el Fichero de Poltica para Conceder los Permisos Requeridos

Podramos usar Policy Tool para abrir el fichero de poltica lllamado mypolicy creado en "Visin Rpida para Controlar Applets. Aadiremos una nueva entrada de poltica concediendo permiso para el cdigo del directorio donde se almacena GetProps.class para leer los valores de las propiedades "user.home" y "java.home", como se muestra en la siguiente figura.

Nota para usuarios de UNIX: Las instrucciones ilustran la creaccin del fichero de poltica para un sistema Windows. Los pasos son exactamente iguales si trabajas sobre un sistema UNIX, con las siguientes diferencias.

  • Se recupera el fichero mypolicy desde el directorio test en el directorio home.
  • Para el CodeBase URL en el paso para conceder los permisos requeridos, se puede sustituir file:${user.home}/test/ por file:/C:/Test/. De forma alternativa se puede especificar directamente el directorio home en vez de referirse a la propiedad "user.home", como file:/home/susanj/test/.

.Abrir el Fichero de Poltica

Arrancamos Policy Tool tecleando lo siguiente en la lnea de comandos.

policytool

Esto trae la ventana de Policy Tool. Para abrir el fichero de poltica, usamos el comando Open en el men File. Esto nos presentar un dilogo Open, que podemos usar para navegar por la estructura de directorios hasta obtener el dicheros que contiene el fichero de poltica (es decir, el directorio C:\Test\).

Elegimos el fichero mypolicy en ese directorio y pulsamos el botn Open.

Esto rellener la ventana de Policy Tool con la informacin del fichero de poltica mypolicy, incluyendo el nombre del fichero de poltica y la parte CodeBase de la entrada de poltica creada en la leccin "Visin Rpida para Controlar Applets".

.Conceder los Permisos Requeridos

Para conceder a la aplicacin GetProps permiso para leer los valores de las propiedades "user.home" y "java.home", debemos crear una entrada de poltica que conceda esos permisos. Elegimos el botn Add Policy Entry en la ventana principal de Policy Tool. Esto nos muestra la caja de dilogo Policy Entry, como se muestra en la siguiente figura.

Tecleamos la siguiente URL de fichero dentro de la caja de texto CodeBase para indicar que vamos a conceder permiso al cdigo que venga del directorio especificado, que es el directorio en el que se encuentra GetProps.class.

file:/C:/Test/

(Nota, esto es una URL y siempre se deben poner barras inclinidas, no barras inclinadas invertidas.)

Dejamos en blanco la caja de texto SignedBy, ya que no necesitamos que el cdigo est firmado.

Para aadir el permiso para leer el valor de la propiedad "user.home", elegimos el botn Add Permission. Esto nos trae la caja de dilogo Permissions.

Hacemos los siguiente.

  1. Elegimos Property Permission en la lista desplegable Permission. El nombre completo del tipo de permiso (java.util.PropertyPermission) aparecer en la caja de texto que hay a la derecha de la lista desplegable.
  2. Teclamos el siguiente texto en la caja de texto que hay a la derecha de la lista etiquetada Target Name para especificar la propiedad "user.home".
    user.home
    
  3. Especificamos el permiso para leer esta propiedad seleccionando la opcin read en la lista desplegable Actions.

Ahora la caja de dilogo Permissions se parecer a esto.

Pulsamos el botn OK. El nuevo permiso aparecer en una lista en la ventana de policy entry.

Para aadir permiso para leer el valor de la propiedad "java.home", elegimos de nuevo el botn Add Permission. Y en la caja de dilogo Permissions hacemos lo siguiente.

  1. Elegimos Property Permission en la lista desplegable Permission. El nombre completo del tipo de permiso (java.util.PropertyPermission) aparecer en la caja de texto que hay a la derecha de la lista desplegable.
  2. Teclamos el siguiente texto en la caja de texto que hay a la derecha de la lista etiquetada Target Name para especificar la propiedad "java.home".
    java.home
    
  3. Especificamos el permiso para leer esta propiedad seleccionando la opcin read en la lista desplegable Actions.

Ahora la caja de dilogo Permisin se parecer a esto:.

Pulsamos de buevo el botn OK. Los nuevos permisos aparecern en lneas en la ventana de policy entry, como se muestra en la siguiente figura.

Ya hemos especificado las entrada de poltica, por eso elegimos el botn Done en la caja de dilogo Policy Entry. Ahora la ventana Policy Tool incluye una lnea representando la nueva entrada de poltica, mostrando el valor CodeBase.

.Grabar el Fichero de Poltica

Para grabar el fichero de poltica, simplemente elegimos el comando Save en el men File.

Luego salimos de Polcy Tool eligiendo el comando Exit en el men File.

.Ver los Efectos del Fichero de Poltica

Ahora que hemos creado el fichero de poltica mypolicy deberamos poder ejecutar con xito la aplicacin GetProps para leer las propiedades especificadas con un controlador de seguridad, como se ve en la siguiente figura..

Como se mencion al final de la leccin Visin Rpida para Controlar Applets, siempre que ejecutemos un applet o una aplicacin con un controlador se seguridad, los ficheros de poltica que son cargados y usados por defecto son los especificados en el "security properties file", que est localizado en uno de los siguientes directorios.

  Windows.
    java.home\lib\security\java.security 
  UNIX.
    java.home/lib/security/java.security

Observa que java.home indica el directorio en el que se instal el JRE.

Tenemos dos posibles formas de hacer que el fichero mypolicy sea considerado como parte de la poltica general, adems de los ficheros de poltica especificados en el fichero de propiedades de seguridad. Podemos especificar el fichero de poltica adicional en una propiedad pasada al sistema de ejecucin, como se describe en Aproximacin 1, o aadir una nueva lnea al fichero de propiedades de seguridad, como se describe en Aproximacin 2.

.Aproximacin 1

Podemos usar un argumento de la lnea de comandos para el intrprete, -J-Djava.security.policy, para especificar un fichero de poltica que debera ser usado adems de los especificados en el fichero de propiedades de seguridad.

Debemos asegurarnos de que estamos en el directorio que contiene GetProps.class y mypolicy.Luego podemos ejecutar la aplicacin GetProps y pasarle el fichero de poltica mypolicy al intrprete tecleando lo siguiente en la lnea de comandos.

java -Djava.security.manager
     -Djava.security.policy=mypolicy GetProps

(Recuerda que -Djava.security.manager es necesario para poder ejecutar una aplicacin con un controlador de seguridad, como se vi en el paso "Ver Cmo Restringir las Aplicaciones".)

El programa debera reportar los valores de las propiedades "user.home" y "java.home".

Si la aplicacin todava reporta un error, es que hay algo errneo en el fichero de poltica. Debemos usar de nuevo la herramienta Policy Tool para corregir los posibles errores.

.Aproximacin 2

Podemos especificar un nmero de URLs en las propiedades policy.url.n en el fichero de propiedades de seguridad y se cargarn todos los ficheros de poltica designados. Por eso una forma de hacer que el fichero mypolicy se aconsiderado por el intrprete Java es aadir una entrada especificando este fichero de poltica en el fichero de propiedades de seguridad.

Ya hemos creado una entrada en el ltima parte de la leccin Visin Rpida para Controlar Applets. Si nuestro fichero de propiedades de seguridad todava tiene esta entrada, estamos listos para ejecutar la aplicacin. De otra forma necesitamos aadir la entrada. Para hacerlo, abrimos el fichero de propiedades de seguridad en un editor que soporte ficheros de texto ASCII. Luego aade la siguiente lnea despus de la lnea que empieza con policy.url.2.

  Windows.
    policy.url.3=file:/C:/Test/mypolicy
  UNIX.
    policy.url.3=file:${user.home}/test/mypolicy

En un sistema UNIX tambin puedes especificar tu directorio home como

policy.url.3=file:/home/susanj/test/mypolicy

.Ejecutar la Aplicacin

Ahora deberamos poder ejecutar la aplicacin con xito.

java -Djava.security.manager GetProps

Al igual que con la aproximacin 1, si todava obtenemos una excepcin de seguridad, es que hay algo errneo en el fichero de poltica.

Importante: Antes de continuar probablemente querrs borrar la lnea que acabamos de aadir al fichero de propiedades de seguridad, ya que no querrs que el fichero mypolicy sea incluido cuando no ests ejecutando las lecciones del tutor.

COMPARTE ESTE ARTÍCULO

ENVIAR A UN AMIGO
COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN GOOGLE +
ARTÍCULO ANTERIOR

¡SÉ EL PRIMERO EN COMENTAR!
Conéctate o Regístrate para dejar tu comentario.