Seguridad en la Plataforma Java 2 JDK 1.2

Una forma en que la Plataforma Java proporciona proteccin contra ataques de un virus, por ejemplo, es a travs del uso de un controlador de seguridad. Actualmente los cdigos del sistema del JDK llaman a los mtodos del controlador de seguridad para realizar chequeos del control de accesos a recursos.

La mayora de los navegadores instalan un controlador de seguridad, por eso los applets se ejecutan para el escrutinio de un controlador de seguridad. Ningn applet tiene permitido el acceso a recursos a menos que explcitamente se lo concedamos, mediante un permiso en la poltica de seguridad. En las plataformas Java que son compatibles con el JDK 1.2, los permisos deben ser concecidos mediante una entrada en un fichero de poltica.

Aqu est el cdigo fuente de un applet llamado WriteFile que intenta crear y escribir en un fichero llamado writetest en el directorio actual. El applet no podr crear el fichero a menos que tenga un permiso explcito en el fichero de poltica.

Teclea este comando en tu ventana de comandos.

appletviewer http://java.sun.com/docs/books/tutorial/
security1.2/tour1/example-tour1/WriteFile.html

Teclealo en un sola lnea, sin espacios en la URL.

Deberas ver un mensaje sobre una excepcin de seguridad, como se muestra en la siguiene figura. Este es el comportamiento esperado; el sistema captura al applet intentando acceder al recurso para el que no tiene permiso de acceso.

.Configurar un Fichero de poltica para Conceder los Permisos Requeridos

Un fichero de poltica es un fichero de texto ASCII y puede ser editado por un editor de texto o la utilidad grfica Policy Toll demostrada en esta seccin. La utilidad Policy Tool graba lo que hayamos tecleado y nos evita tener que aprendernos la sntaxis necesaria para los ficheros de poltica, as se reducen los herrores.

Usaremos esta herramienta para crear un fichero de poltica, llamado myPolicy, en el que aadiremos entradas de poltica que concedan al cdigo al cdigo del directorio donde se encuentra almacenado WriteFile.class permiso para escribir el fichero writetest. Estos pasos son los siguientes:

Nota para usuarios de UNIX: Los pasos muestran la creaccin de un fichero de poltica para un sistema Windows. Los pasos son exactamente los mismos si trabajas en un sistema UNIX. Donde el texto indica que almacene el fichero de poltica en el directorio C:\Test, tu puedes poner que lo almacene en otro directorio. Los ejemplos del paso "Ver los Efectos del Fichero de poltica" y de la leccin "Visin Rpida para Controlar Aplicaciones" asumen que has utilizado el directorio ~/test.

.Arrancar la Utilidad Policy Tool

Para arrancar la utilidad Policy Tool, simplemente tenemos que teclear esto en la lnea de comandos.

Policytool

Esto muestra la ventana de Policy Tool.

Siempre que arranca Policy Tool, intenta rellenar esta ventana con informacin de poltica proveniente de algo algunas veces referido como "el fichero de poltica del usuario". Ese fichero es por defecto uno llamado .java.Policy que se encuentra en nuestro directorio raz. Si Policy Tool no puede encontrar este fichero, reporta la situacin y muestra una ventana en blanco (es decir, una ventana con cabecera y botones pero sin datos), como se ve en la siguiente figura.

Entonces podemos proceder abriendo otro fichero de poltica o crear uno nuevo.

La primera vez que ejecutemos esta utilidad, veremos la ventana en blanco, ya que no existe el fichero de poltica del usuario. Podemos inmediatamente proceder a crear un nuevo fichero de poltica, como se describe en el siguiente paso.

.Conceder los Permisos Requeridos

Para conceder permisos al applet WriteFile para que cree y escriba el fichero writetest, debemos crear una entrada de poltica concediendo este permiso. Para hacer esto, elegimos el botn Add Policy Entry en la pantalla principal de Policy Tool. Esto nos trae la caja de dilogo Policy Entry, como se muestra en la figura siguiente.

Una entrada de poltica especifca uno o ms permisos para el cdigo de una fuente de cdigo - cdigo de una localizacin (URL= particular, cdigo firmado por una entidad particular, o ambos).

Las cajas de texto CodeBase y SignedBy se usan para especificar el cdigo al que queremos conceder los permisos.

  • Un valor CodeBase indica la localizacin del cdigo fuente; concedemos el permiso a todo el cdigo proveniente de esa localizacin. Un entrada CodeBase vaca significa "cualquier cdigo" -- no importa de donde venga.
  • Un valor SignedBy indica el alias para un certificado almacenado en un keystore. La clave pblica dentro del certificado es utilizada para verificar la firma digital del cdigo, concedemos el permiso al cdigo firmado con la clave privada correspondiente a la clave pblica de la entrad del keystore especificada por el alias. La entrada SignedBy es opcional; omitirla significa "cualquier firmante" -- no importa si el cdigo est firmado ni por quen.

Si tenemos ambas, una entrada CodeBase y otra SignedBy, los permisos slo sern concedidos al cdigo que venga de esa localizacin y est firmado por el alias correspondiente.

Para conceder el permiso que necesita WriteFile, podemos concedrselo a todo el cdigo de la localizacin (URL) donde se encuentra WriteFile.class.

Teclea la siguiente URL en la caja de texto CodeBase en la caja de dilogo Policy Entry.

http://java.sun.com/docs/books/tutorial/security1.2/tour1/example-tour1/

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

Nota: Si queremos conceder el permiso a cualquier cdigo (fichero .class) no slo del subdirectorio especficado prviamente sino del directorio security1.2 y todos sus subdirectorios, podramos teclear la siguiente URL en la caja CodeBase.

http://java.sun.com/docs/books/tutorial/security1.2/-

Hemos especificado de dnde viene el cdigo (el CodeBase), y que el cdigo no tiene porqu estar firmado (ya que no hay valor en SignedBy). Ahora estamos listos para concederle permisos al cdigo:

Pulsamos el botn Add Permission para traer la caja de dilogo Permissions.

Hacemos lo siguiente para conceder al cdigo del CodeBase especificado el permiso para escribir (y por lo tanto crear) el fichero llamado writetest.

  1. Elegimos File Permission de la lista desplegable Permission. Aparecer el nombre completo del tipo de permiso (java.io.FilePermission) en la caja de texto a la derecha de la lista desplegable.
  2. Tecleamos lo siguiente en el caja de texto a la derecha de la lista etiquetada Target Name para especificar el fichero writetest.
    writetest
    
  3. Especificamos acceso de escritura eligiendo la opcin write de la lista desplegable Actions.

Ahora el dilogo Permissions se parecer a esto:

Elegimos el botn OK. El nuevo permiso aparece en una lnea en el digolo Policy Entry. Por eso ahora el dilogo Policy Entry se parecer a esto.

Ya hemos especificado la entrada de poltica, por eso elegimos el botn Done en el dilogo Policy Entry. Ahora la ventana de Policy Tool contiene una lnea que representa la entrada de poltica, mostrando el valor CodeBase:.

.Grabar el Fichero de poltica

Para grabar el fichero de poltica que hemos creado, elegimos el comando Save As del men File. Esto muestra el dilogoSave As.

Los ejemplos de esta leccin y de "Visin Rpida para Controlar Aplicaciones" asumen que hemos almacenado el fichero de poltica en el directorio Test del disco C:.

Navegamos por la estructura de directorios hasta obtener ste. Luego tecleamos el nombre del fichero myPolicy y pulsamos el botn Save. Entonces se graba el fichero de poltica y su nombre y path se muestran en la caja de texto etiquetada Policy File.

Salimos de Policy Tool eligiendo el comando Exit del men File.

.Ver los Efectos del Fichero de poltica

Ahora que hemos creado el fichero de poltica myPolicy deberamos poder ejecutar con xito el applet WriteFile para crear y escribir el fichero writetest, como se ve en la siguiente figura..

Siempre que ejecutemos un applet o una aplicacin con un controlador de seguridad, los ficheros de poltica que se cargan y se usan por defecto son los especificados en el fichero "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.

Las localizaciones de los ficheros de poltica se especifican como valores de propiedades cuyos nombres tienen la forma.

Policy.url.n

Donde n indica un nmero. Especificamos cada uno de los valores en una lnea con la siguiente forma.

Policy.url.n=URL

Donde URL es una especificacin de URL. Por ejemplo, los ficheros de poltica por defecto, algunas veces referidos como los ficheros de poltica del sistema y de usuario, respectivamente estn definidos en el fichero de propiedades de seguridad como.

Policy.url.1=file:${java.home}/lib/security/java.Policy
Policy.url.2=file:${user.home}/.java.Policy

Nota: Usar la notacin ${propName} en el fichero de propiedades de seguridad es una forma de especificar el valor de una propiedad. As, ${java.home} ser reemplazado en el momento de la ejecucin por el valor real de la propiedad "java.home", que indica el directorio en el que se instal el JRE, y ${user.home} ser reemplazado por el valor de la propiedad "user.home", por ejemplo, C:\Windows.

En el paso anterior no modificamos ninguno de estos ficheros de poltica. Creamos uno nuevo llamado myPolicy. Aqu 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".

Nota: En un sistema UNIX , debemos tener DNS configurado para que el programas WriteFile sea descargado desde una site pblica como en los comandos de ejecucin mostrados abajo. Necesitamos tener dns en la lista de servicios para host en nuestro fichero /etc/nsswitch.conf, como.

    hosts:    dns files nis

Tambin necesitaremos un fichero /etc/resolv.conf con una lista de nombres de servidores. Consulta con tu administrador de sistemas para ms informacin.

.Aproximacin 1

Podemos usar un argumento de la lnea de comandos para el appletviewer, -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. Para ejecutar el applet WriteFile con el fichero de poltica myPolicy incluido, debemos teclear lo siguiente, en el directorio en el que tengamos almacenado a myPolicy.

appletviewer -J-Djava.security.Policy=myPolicy  
 http://java.sun.com/docs/books/tutorial/security1.2/tour1/
 example-tour1/WriteFile.html

Nota:

  • Esto debe ser tecleado como un sla lnea, con un espacio entre myPolicy y la URL y sin espacios en la URL. Aqu hemos usado mltiples lneas para facilitar su lectura.
  • Si esta lnea de comandos es mayor que el mximo nmero de caracteres que tienes permitidos, haz lo siguiente. Crea un fichero de texto que contenga el comando completo, y llamado con una extensin .bat, por ejemplo, wf.bat. Luego, en tu ventana de comandos slo tienes que teclear el nombre del fichero .bat. Esto resulta en la ejecucin del comando completo.

Si el applet muestra algn error, es que hay algo mal en el fichero de poltica. Usa la herramienta Policy Tool para abrir el fichero myPolicy y chequear las entradas de poltica que acabamos de crear en el paso anterior, "Configurar un Fichero de poltica para Conceder los Permisos Requeridos".

Para ver o editar una entrada de poltica existente, se selecciona la lnea para esa entrada en el ventana principal de Policy Tool, y se pulsa el botn Edit Policy Entry. Tambin se puede hacer doble click sobre la lnea de esa entrada.

Esto muestra el mismo dilogo de Polciy Entry que apareci cuando aadimos una nueva entrada, excepto en que ahora est lleno con la informacin de la entrada existente. Para cambiar la informacin, simplemente tecleamos el valor correcto en el campo de texto adecuado.

.Aproximacin 2

Podemos especificar un nmero de URLs (incluyendo de la forma "http://") en las propiedades Policy.url.n en el fichero de propiedades de seguridad, y todos los ficheros designados se cargarn.

Por eso una forma de hacer que nuestro fichero de poltica myPolicy sea considerado por el appletviewer es aadir una entrada especificando el fichero de poltica al fichero de propiedades de seguridad.

Importante: Si estas ejecutando tu propia copia del JDK, puedes fcilmente editar tu fichero de propiedades de seguridad. Si ests ejecutando una versin compartida con otros, slo podrs modificarlo si tienes acceso de escritura, o si pides al admistrador que modifique el fichero de la forma apropiada. Sin embargo, no es apropiado realizar modificaciones en un fichero de seguridad para todo el sistema slo para probar este tutorial. Te sugerimos que leas los pasos siguiente para ver cmo se hace o que te instales tu propia versin privada del JDK para usar con las lecciones del tutor.

Para modificar el fichero de propiedades de seguridad, brelo en un fichero capaz de editar ficheros 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

Ahora deberas poder ejecutar esto con xito.

appletviewer http://java.sun.com/docs/books/tutorial/
security1.2/tour1/example-tour1/WriteFile.html

Importante: El fichero myPolicy tambin se utiliza en la leccin Visin Rpida para Controlar Aplicaciones. Si no vas a seguir esa leccin, 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.