La política de seguridad se configura a través de al menos dos ficheros del sistema:
$JAVA_HOME/lib/security/java.policy
$JAVA_HOME/lib/security/java.security
donde $JAVA_HOME
es el directorio raíz del jdk1.2.
A continuación describiremos el formato de los dos ficheros, comenzando por sus características comunes. Si se desea una discusión ampliada se puede consultar la sección de seguridad de la documentación del jdk1.2 en el URL http://java.sun.com/products/jdk/1.2/docs/guide/security/PolicyFiles.html o directamente consultando los ficheros instalados en su sistema.
Tanto el fichero java.policy
como el fichero
java.security
pueden incorporar variables que les
permiten hacer más dinámica la configuración de la política
de seguridad. Las variables de extensión son similares a las
variables del shell de Unix, por ejemplo la línea
permission java.io.FilePermission "${user.home}", "read"
permite que cualquier usuario disponga de permiso de lectura
sobre su directorio home
. La propiedad
${user.home}
tomará el valor del directorio del
usuario.
Otra variable muy útil es ${/}
, cuyo valor será el
carácter de separación de directorios propio del sistema
operativo, es decir, en Unix equivale a / y en DOS a
\.
Nota: No se pueden anidar propiedades, por ejemplo
${user.${foo}}
, no funcionaría bien incluso si
foo
tuviera el valor home
.
java.policy
La política de seguridad del sistema se configura a partir de uno o más ficheros de configuración. Estos ficheros indican que permisos se conceden a que código y para que recursos específicos.
El fichero de configuración de la política de seguridad esencialmente contiene una lista de entradas. Puede contener una entrada keystore y una o más entradas grant.
El keystore es la base de datos de claves privadas y sus
certificados asociados. La entrada keystore
sirve
para indicar dónde consultar las claves públicas de las
entidades firmantes especificadas en las entradas
grant
del fichero. La entrada keystore
debe
aparecer en el fichero si cualquier entrada grant
especifica el alias de una entidad que firma.
El fichero sólo puede contener una entrada keystore
en el fichero (cualquier otra después de la primera será
ignorada), y de ubicarse independientemente de cualquier otra
entrada. Su sintaxis es:
keystore "url_fichero_keystore"
donde url_fichero_keystore
especifica la localización
URL de la base de datos. El URL es relativo a la localización
del fichero de configuración, es decir, si el fichero de
configuración se encuentra en el URL
http://case.iti.upv.es/seguridad/iti.policy y la
entrada del keystore es keystore
".keystore"
el keystore se encontrará en el URL
http://case.iti.upv.es/seguridad/.keystore. También
puede especificarse un URL absoluto.
Cada entrada grant
consiste básicamente en un la
especificación del origen de una clase y sus permisos. Cada
entrada grant
del fichero sigue el siguiente formato,
donde la palabra reservada grant indica el comienzo de una
nueva entrada. Dentro de cada entrada, la palabra reservada
permission marca el comienzo de un nuevo permiso en la
entrada.
grant [SignedBy "lista_alias_entidades_firmantes"] [, CodeBase "URL"] {
permission clase_permiso ["recurso"][, "acción"][, SignedBy "lista_alias"];
permission ...
...
};
Se permiten espacios en blanco inmediatamente antes o después
de las comas. La clase_permiso
debe ser el nombre de
una clase de permisos, por ejemplo
java.io.FilePermission
y no puede abreviarse
escribiendo únicamente FilePermission
.
El campo acción
es opcional y puede omitirse si la
clase del permiso no lo necesita. El campo CodeBase
también es opcional si se omite significa cualquier
código.
java.security
En este fichero se almacena las propiedades necesarias para configurar la seguridad del sistema. En el se almacenan propiedades tan necesarias como los proveedores de seguridad instalados en el sistema, la ubicación de los ficheros de configuración, nombre de la clase que implementa la política de seguridad, etc.
Los proveedores instalados se registran añadiendo al fichero una línea con el formato:
security.provider.n=nombre_clase_provider
donde n
indica el número de proveedor. Veremos como
se usa en el apartado dedicado a la arquitectura criptográfica
de Java.
La localización de los ficheros de configuración se
especifica como valores de propiedades cuyos nombres son de la
forma policy.url.n
donde n
es un número. Por
defecto el sistema tiene definidas las siguientes ubicaciones:
policy.url.1=${java.home}${/}lib${/}security${/}java.policy
policy.url.2=${user.home}${/}.java.policy
El sistema establece la política de seguridad primero
leyendo policy.url.1
, e incrementa el número hasta
que no encuentra otra entrada. La evaluación es incremental,
es decir, el sistema configura su política en base a los
tres ficheros de configuración.
Nota: Si se dispone de policy.url.1
y
policy.url.3
, el fichero 3 no se leerá, los números
de ficheros han de ser correlativos.