Como hemos comentado anteriormente, en las aplicaciones que se ejecutan localmente, el Security Manager se encuentra deshabilitado. A continuación, vamos a ver cómo aplicar las políticas de seguridad a las aplicaciones para poder controlar los recursos a los que pueden acceder.
Para comprobar que, por defecto, una aplicación local se ejecuta "libremente", vamos a descargar la siguiente aplicación que obtiene y muestra las propiedades del sistema y de java.
Descargar código fuente GetProps.java
GetProps.java
// Download from
http://docs.oracle.com/javase/tutorial/security/tour2/examples/GetProps.java
import java.lang.*;
import java.security.*;
class GetProps {
public static void main(String[] args) {
/* Test reading properties w & w/out security manager */
String s;
try {
System.out.println("About to get os.name property value");
s = System.getProperty("os.name", "not specified");
System.out.println(" The name of your operating system is: " + s);
System.out.println("About to get java.version property value");
s = System.getProperty("java.version", "not specified");
System.out.println(" The version of the JVM you are running is: " + s);
System.out.println("About to get user.home property value");
s = System.getProperty("user.home", "not specified");
System.out.println(" Your user home directory is: " + s);
System.out.println("About to get java.home property value");
s = System.getProperty("java.home", "not specified");
System.out.println(" Your JRE installation directory is: " + s);
} catch (Exception e) {
System.err.println("Caught exception " + e.toString());
}
}
}
Compila y ejecuta el código:
javac GetProps.java
java GetProps
Como puedes ver en la figura anterior, la aplicación tiene acceso a las propiedades del sistema.
Para poder aplicar las políticas de seguridad, en una aplicación local, debemos activar el Security Manager utilizando la opción –Djava.security.manager
, por lo que ejecutaremos:
java –Djava.security.manager GetProps
Las políticas de seguridad que se cargan por defecto, permiten al código a acceder a datos que no son sensibles y no son un riesgo de seguridad como la versión del sistema operativo (os.name
) y la versión de java (java.version
). En cambio, en los datos más sensibles como el directorio home del usuario (user.home
) o el directorio de trabajo de java (java.home
) el gestor de seguridad no permite el acceso de lectura y por eso se produce la excepción de que no tiene permisos (AccessControlException
).
Tal y como podemos ver en la siguiente figura, se ha denegado el acceso a ("java.util.PropertyPermission
" "user.home
" "read
"). Estos datos son necesarios para poder establecer correctamente las políticas de acceso.