Seguridad en la Plataforma Java 2 JDK 1.2

Cuando se ejecuta una aplicaci�n no se instala autom�ticamente un controlador de seguridad. En el siguiente paso, veremos como aplicar las mismas pol�ticaa de seguridad a una aplicaci�n encontrada en el sistema local de ficheros que a un applet de la red. Primero, demostraremos que no se instala ning�n 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 c�digo fuente GetProps.java.

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

Como podr�s ver si examinas el c�digo 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. Deber�as 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 c�mo Restringir las Aplicaciones

Como hemos visto en el paso anterior, cuando se ejecuta una aplicaci�n no se instala autom�ticamente un controlador de seguridad. Para aplicar la misma pol�tica de seguridad a una aplciaci�n encontrada en el sistema local de ficheros que a los applets descargados de la red, llamamos al int�rprete con el nuevo argumento de la l�nea de comandos -Djava.security.manager.

Para ejecutar la aplicaci�n 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 pol�tica del sistema, cargado por defecto, concede a todo c�digo permiso para acceder a algunas de las propiedades m�s comunes como "os.name" y "java.version". Estas propiedades no son sensibles a la seguridad, por eso la concesi�n de dichos permisos no supone un problema.

Las otras propiedades a las que GetProps intenta acceder, "user.home" y "java.home", no est�n en la lista de propiedades para las que el fichero de pol�tica 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 excepci�n indica que la pol�tica actualmente activo, que consiste en entradas de uno o m�s ficheros de pol�tica, no conceden permiso para leer la propiedad."user.home".

.�El Fichero de Pol�tica del Sistema

El fichero de pol�tica 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 pol�tica 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 pol�tica del sistema.

.�Configurar el Fichero de Pol�tica para Conceder los Permisos Requeridos

Podr�amos usar Policy Tool para abrir el fichero de pol�tica lllamado mypolicy creado en "Visi�n R�pida para Controlar Applets. A�adiremos una nueva entrada de pol�tica concediendo permiso para el c�digo 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 creacci�n del fichero de pol�tica 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 Pol�tica

Arrancamos Policy Tool tecleando lo siguiente en la l�nea de comandos.

policytool

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

Elegimos el fichero mypolicy en ese directorio y pulsamos el bot�n Open.

Esto rellener� la ventana de Policy Tool con la informaci�n del fichero de pol�tica mypolicy, incluyendo el nombre del fichero de pol�tica y la parte CodeBase de la entrada de pol�tica creada en la lecci�n "Visi�n R�pida para Controlar Applets".

.�Conceder los Permisos Requeridos

Para conceder a la aplicaci�n GetProps permiso para leer los valores de las propiedades "user.home" y "java.home", debemos crear una entrada de pol�tica que conceda esos permisos. Elegimos el bot�n Add Policy Entry en la ventana principal de Policy Tool. Esto nos muestra la caja de di�logo 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 c�digo 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 c�digo est� firmado.

Para a�adir el permiso para leer el valor de la propiedad "user.home", elegimos el bot�n Add Permission. Esto nos trae la caja de di�logo 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 opci�n read en la lista desplegable Actions.

Ahora la caja de di�logo Permissions se parecer� a esto.

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

Para a�adir permiso para leer el valor de la propiedad "java.home", elegimos de nuevo el bot�n Add Permission. Y en la caja de di�logo 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 opci�n read en la lista desplegable Actions.

Ahora la caja de di�logo Permisi�n se parecer� a esto:.

Pulsamos de buevo el bot�n OK. Los nuevos permisos aparecer�n en l�neas en la ventana de policy entry, como se muestra en la siguiente figura.

Ya hemos especificado las entrada de pol�tica, por eso elegimos el bot�n Done en la caja de di�logo Policy Entry. Ahora la ventana Policy Tool incluye una l�nea representando la nueva entrada de pol�tica, mostrando el valor CodeBase.

.�Grabar el Fichero de Pol�tica

Para grabar el fichero de pol�tica, 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 Pol�tica

Ahora que hemos creado el fichero de pol�tica mypolicy deber�amos poder ejecutar con �xito la aplicaci�n 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 lecci�n Visi�n R�pida para Controlar Applets, siempre que ejecutemos un applet o una aplicaci�n con un controlador se seguridad, los ficheros de pol�tica 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 pol�tica general, adem�s de los ficheros de pol�tica especificados en el fichero de propiedades de seguridad. Podemos especificar el fichero de pol�tica adicional en una propiedad pasada al sistema de ejecuci�n, como se describe en Aproximaci�n 1, o a�adir una nueva l�nea al fichero de propiedades de seguridad, como se describe en Aproximaci�n 2.

.�Aproximaci�n 1

Podemos usar un argumento de la l�nea de comandos para el int�rprete, -J-Djava.security.policy, para especificar un fichero de pol�tica que deber�a ser usado adem�s 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 aplicaci�n GetProps y pasarle el fichero de pol�tica mypolicy al int�rprete tecleando lo siguiente en la l�nea de comandos.

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

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

El programa deber�a reportar los valores de las propiedades "user.home" y "java.home".

Si la aplicaci�n todav�a reporta un error, es que hay algo err�neo en el fichero de pol�tica. Debemos usar de nuevo la herramienta Policy Tool para corregir los posibles errores.

.�Aproximaci�n 2

Podemos especificar un n�mero de URLs en las propiedades policy.url.n en el fichero de propiedades de seguridad y se cargar�n todos los ficheros de pol�tica designados. Por eso una forma de hacer que el fichero mypolicy se aconsiderado por el int�rprete Java es a�adir una entrada especificando este fichero de pol�tica en el fichero de propiedades de seguridad.

Ya hemos creado una entrada en el �ltima parte de la lecci�n Visi�n R�pida para Controlar Applets. Si nuestro fichero de propiedades de seguridad todav�a tiene esta entrada, estamos listos para ejecutar la aplicaci�n. De otra forma necesitamos a�adir la entrada. Para hacerlo, abrimos el fichero de propiedades de seguridad en un editor que soporte ficheros de texto ASCII. Luego a�ade la siguiente l�nea despu�s de la l�nea 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 tambi�n puedes especificar tu directorio home como

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

.�Ejecutar la Aplicaci�n

Ahora deber�amos poder ejecutar la aplicaci�n con �xito.

java -Djava.security.manager GetProps

Al igual que con la aproximaci�n 1, si todav�a obtenemos una excepci�n de seguridad, es que hay algo err�neo en el fichero de pol�tica.

Importante: Antes de continuar probablemente querr�s borrar la l�nea que acabamos de a�adir al fichero de propiedades de seguridad, ya que no querr�s que el fichero mypolicy sea incluido cuando no est�s ejecutando las lecciones del tutor.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR