Programación en castellano
Inicio > Tutoriales > Lenguajes orientados a objeto > J2SE > Seguridad en la Plataforma Java 2 JDK 1.2
-Tutoriales

Seguridad en la Plataforma Java 2 JDK 1.2


Guía Rápida para Controlar un Applet

. Observar las Restricciones de los Applets

Una forma en que la Plataforma Java proporciona protección contra ataques de un virus, por ejemplo, es a través del uso de un controlador de seguridad. Actualmente los códigos del sistema del JDK llaman a los métodos del controlador de seguridad para realizar chequeos del control de accesos a recursos.

La mayoría de los navegadores instalan un controlador de seguridad, por eso los applets se ejecutan para el escrutinio de un controlador de seguridad. Ningún applet tiene permitido el acceso a recursos a menos que explícitamente se lo concedamos, mediante un permiso en la política 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 política.

Aquí está el código 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 explícito en el fichero de política.

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 línea, sin espacios en la URL.

Deberías ver un mensaje sobre una excepción 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 política para Conceder los Permisos Requeridos

Un fichero de política es un fichero de texto ASCII y puede ser editado por un editor de texto o la utilidad gráfica Policy Toll demostrada en esta sección. La utilidad Policy Tool graba lo que hayamos tecleado y nos evita tener que aprendernos la síntaxis necesaria para los ficheros de política, así se reducen los herrores.

Usaremos esta herramienta para crear un fichero de política, llamado myPolicy, en el que añadiremos entradas de política que concedan al código al código 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 creacción de un fichero de política 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 política en el directorio C:\Test, tu puedes poner que lo almacene en otro directorio. Los ejemplos del paso "Ver los Efectos del Fichero de política" y de la lección "Visión Rápida 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 línea de comandos.

Policytool

Esto muestra la ventana de Policy Tool.

Siempre que arranca Policy Tool, intenta rellenar esta ventana con información de política proveniente de algo algunas veces referido como "el fichero de política del usuario". Ese fichero es por defecto uno llamado .java.Policy que se encuentra en nuestro directorio raíz. Si Policy Tool no puede encontrar este fichero, reporta la situación 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 política o crear uno nuevo.

La primera vez que ejecutemos esta utilidad, veremos la ventana en blanco, ya que no existe el fichero de política del usuario. Podemos inmediatamente proceder a crear un nuevo fichero de política, 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 política concediendo este permiso. Para hacer esto, elegimos el botón Add Policy Entry en la pantalla principal de Policy Tool. Esto nos trae la caja de diálogo Policy Entry, como se muestra en la figura siguiente.

Una entrada de política especifíca uno o más permisos para el código de una fuente de código - código de una localización (URL= particular, código firmado por una entidad particular, o ambos).

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

  • Un valor CodeBase indica la localización del código fuente; concedemos el permiso a todo el código proveniente de esa localización. Un entrada CodeBase vacía significa "cualquier código" -- no importa de donde venga.
  • Un valor SignedBy indica el alias para un certificado almacenado en un keystore. La clave pública dentro del certificado es utilizada para verificar la firma digital del código, concedemos el permiso al código firmado con la clave privada correspondiente a la clave pública de la entrad del keystore especificada por el alias. La entrada SignedBy es opcional; omitirla significa "cualquier firmante" -- no importa si el código está firmado ni por quíen.

Si tenemos ambas, una entrada CodeBase y otra SignedBy, los permisos sólo serán concedidos al código que venga de esa localización y esté firmado por el alias correspondiente.

Para conceder el permiso que necesita WriteFile, podemos concedérselo a todo el código de la localización (URL) donde se encuentra WriteFile.class.

Teclea la siguiente URL en la caja de texto CodeBase en la caja de diálogo 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 código esté firmado.

Nota:  Si queremos conceder el permiso a cualquier código (fichero .class) no sólo del subdirectorio específicado préviamente sino del directorio security1.2 y todos sus subdirectorios, podríamos teclear la siguiente URL en la caja CodeBase.

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

Hemos especificado de dónde viene el código (el CodeBase), y que el código no tiene porqué estar firmado (ya que no hay valor en SignedBy). Ahora estamos listos para concederle permisos al código:

Pulsamos el botón Add Permission para traer la caja de diálogo Permissions.

Hacemos lo siguiente para conceder al código 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 opción write de la lista desplegable Actions.

Ahora el diálogo Permissions se parecerá a esto:

Elegimos el botón OK. El nuevo permiso aparece en una línea en el diágolo Policy Entry. Por eso ahora el diálogo Policy Entry se parecerá a esto.

Ya hemos especificado la entrada de política, por eso elegimos el botón Done en el diálogo Policy Entry. Ahora la ventana de Policy Tool contiene una línea que representa la entrada de política, mostrando el valor CodeBase:.

. Grabar el Fichero de política

Para grabar el fichero de política que hemos creado, elegimos el comando Save As del menú File. Esto muestra el diálogoSave As.

Los ejemplos de esta lección y de "Visión Rápida para Controlar Aplicaciones" asumen que hemos almacenado el fichero de política 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 botón Save. Entonces se graba el fichero de política 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 política

Ahora que hemos creado el fichero de política myPolicy deberíamos 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 aplicación con un controlador de seguridad, los ficheros de política 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 política se especifican como valores de propiedades cuyos nombres tienen la forma.

Policy.url.n

Donde n indica un número. Especificamos cada uno de los valores en una línea con la siguiente forma.

Policy.url.n=URL

Donde URL es una especificación de URL. Por ejemplo, los ficheros de política por defecto, algunas veces referidos como los ficheros de política del sistema y de usuario, respectivamente están 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 notación ${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 ejecución 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 política. Creamos uno nuevo llamado myPolicy. Aquí 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".

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

    hosts:    dns files nis

También necesitaremos un fichero /etc/resolv.conf con una lista de nombres de servidores. Consulta con tu administrador de sistemas para más información.

. Aproximación 1

Podemos usar un argumento de la línea de comandos para el appletviewer, -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. Para ejecutar el applet WriteFile con el fichero de política 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 sóla línea, con un espacio entre myPolicy y la URL y sin espacios en la URL. Aquí hemos usado múltiples líneas para facilitar su lectura.
  • Si esta línea de comandos es mayor que el máximo número de caracteres que tienes permitidos, haz lo siguiente. Crea un fichero de texto que contenga el comando completo, y llamado con una extensión .bat, por ejemplo, wf.bat. Luego, en tu ventana de comandos sólo tienes que teclear el nombre del fichero .bat. Esto resulta en la ejecución del comando completo.

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

Para ver o editar una entrada de política existente, se selecciona la línea para esa entrada en el ventana principal de Policy Tool, y se pulsa el botón Edit Policy Entry. También se puede hacer doble click sobre la línea de esa entrada.

Esto muestra el mismo diálogo de Polciy Entry que apareció cuando añadimos una nueva entrada, excepto en que ahora está lleno con la información de la entrada existente. Para cambiar la información, simplemente tecleamos el valor correcto en el campo de texto adecuado.

. Aproximación 2

Podemos especificar un número 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 cargarán.

Por eso una forma de hacer que nuestro fichero de política myPolicy sea considerado por el appletviewer es añadir una entrada especificando el fichero de política al fichero de propiedades de seguridad.

Importante:  Si estas ejecutando tu propia copia del JDK, puedes fácilmente editar tu fichero de propiedades de seguridad. Si estás ejecutando una versión compartida con otros, sólo podrás 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 sólo para probar este tutorial. Te sugerimos que leas los pasos siguiente para ver cómo se hace o que te instales tu propia versión 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 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

Ahora deberías poder ejecutar esto con éxito.

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

Importante: El fichero myPolicy también se utiliza en la lección Visión Rápida para Controlar Aplicaciones. Si no vas a seguir esa lección, 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.

 
Patrocinados
 

Copyright © 1999-2007 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad
Mantenida por: Claudio y Dani.

Hospedaje web y servidores dedicados linux por Ferca Network

red internet: jugar gratis | amor | navidad 2009 | registro de dominios | servidores dedicados
más internet: comprar | gratis | posicionamiento en buscadores | decoración libre | gifs animados