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.
![](/cursos_descargas/security1dot2/images/step2.gif)
�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.
![](/cursos_descargas/security1dot2/images/step3.gif)
�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.
![](/cursos_descargas/security1dot2/images/step4.gif)
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".
![](/cursos_descargas/security1dot2/images/WQ1ptWithFilename1.gif)
�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.
![](/cursos_descargas/security1dot2/images/AddEntryBlank1.gif)
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.
![](/cursos_descargas/security1dot2/images/AddPermBlank.gif)
Hacemos los siguiente.
- 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.
- 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
- 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.
![](/cursos_descargas/security1dot2/images/WQ2addPropPerm1.gif)
Pulsamos el bot�n OK. El nuevo permiso aparecer� en una lista en la ventana de policy entry.
![](/cursos_descargas/security1dot2/images/WQ2addEntry1.gif)
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.
- 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.
- 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
- 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:.
![](/cursos_descargas/security1dot2/images/WQ2addPropPerm2.gif)
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.
![](/cursos_descargas/security1dot2/images/WQ2addEntry2.gif)
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.
![](/cursos_descargas/security1dot2/images/WQ2ptTwoCBandFilename1.gif)
�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..
![](/cursos_descargas/security1dot2/images/step6.gif)
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.