Projektstudium SS98 - distributed computing


vorherige SeiteInhaltnächste Seite

Zugriffskontrollen

Wir werden uns nun dem Bereich der Zugriffskontrollen widmen und diesen etwas näher erläutern, wobei uns mehr die Erfüllung der Sicherheitsanforderungen als der dahinter stehende Algorithmus interessiert.

 

Die java.security.ProtectionDomain Klasse steht für Schutz in der Java runtime. Diese Klasse orientiert sich nach dem schon bekannten Konzept von Prinzipals.

 

Eine Domain enthält konzeptionell eine Menge von Klassen, die die gleichen Permissions haben. Bisher wird eine Domain durch die Codequelle identifiziert, welches zwei Charakteristika enthält:

 

 

Das heißt alle Klassen die mit demselben Schlüssel signiert wurden und dieselbe URL haben, werden in ein und derselben Domain platziert. Eine Domain enthält die Permissions, die an seinen Code weitergegeben wird.

 

Klassen, die die gleiche Permissions haben aber von verschiedenen Quellen kommen, haben auch verschiedene Domains. Eine Klasse gehört zu einer und nur einer ProtectionDomain.

 

In JDK 1.2 werden protection domains "on demand" erzeugt. Das heißt beim laden einer Klasse. Die getProtectionDomain() und setProtectionDomain() Methode in java.lang.Class kann benutzt werden, um die protection domain zu verändern. Um dieses tun zu können, müssen die RuntimePermissions "Class.getProtectionDomain" and "Class.setProtectionDomain" vergeben sein.

 

java.security.AccessController

Die AccessController Klasse wird in dreierlei hinsicht benutzt.

 

Jeder Code, der Zugang zu Systemresourcen hat, sollte AccesController Methoden beinhalten, wenn er wünscht, die speziellen Sicherheits- und Zugriffsalgorithmen zu nutzen. Wenn die Anwendung hingegen wünscht, das Sicherheitsmodell zu verschieben, dann sollte es entsprechende Methoden in die Klasse SecurityManager unterbringen.

 

Als Beispiel, der typische Weg um Zugriffskontrollen einzubauen, war das folgend

 

(eine frühe Version von JDK):

 

ClassLoader loader = this.getClass().getClassLoader();

if (loader != null) {

SecurityManager security = System.getSecurityManager();

if (security != null) {

security.checkRead("path/file");

}

}

 

Unter der neuen Sicherheitsarchitektur ist es egal ob ein Test enthalten ist oder nicht, ein ClassLoader ist immer mit einer rufenden Klasse verbunden. Ein Beispiel:

 

FilePermission perm = new FilePermission("path/file", "read");

 

AccessController.checkPermission(perm);

 

Die AccessController checkPermission() Method untersucht den aktuellen Ausführungskontext und macht die richtige Entscheidung, ob der ZUgriff erlaubt wird oder nicht. Wenn er erlaubt wird, dann tut der Test nichts, sonst wird eine AccessControlException (a subclass of java.lang.SecurityException) ausgelöst.

 

Für rückwirkende Tests kann die checkPermission Method vom SecurityManager benutzt werden:

 

 

SecurityManager security = System.getSecurityManager();

if (security != null) {

FilePermission perm = new FilePermission("path/file", "read");

security.checkPermission(perm);

}

 

Die normale Eigenschaft der checkPermission() Methode des SecurityManager ist es den AccessController aufzurufen.

vorherige SeiteInhaltnach obennächste Seite 


© Copyright 1998 André Möller, Oliver Mentz & Magnus Wiencke