O'Reilly logo

Die OSGi Service Platform: Eine Einführung mit Eclipse Equinox by Matthias Lübken, Bernd Kolb, Nils Hartmann, Gerd Wütherich

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

149
9 Security
Motivation
In den vergangenen Kapiteln haben wir Ihnen gezeigt, wie Sie Bundles
und Services für die OSGi Service Platform entwickeln. Dabei besaßen
die von Ihnen entwickelten Bundles immer volle Ausführungsrechte,
d.h., aus den Bundles kann auf alle Ressourcen der Java-Laufzeitum-
gebung zugegriffen werden.
In Anwendungsszenarien, in denen Bundles unterschiedlicher Ent-
wickler in einer zentral administrierten Instanz des OSGi Frameworks
ablaufen sollen, ist die Vergabe voller Ausführungsrechte für alle
Bundles u.U. nicht angemessen. So ist es bspw. denkbar, anwendungs-
fachlichen Bundles die Rechte zur Installation und Manipulation von
Bundles zu entziehen, während einem Management Bundle diese
Rechte durchaus zur Verfügung stehen müssen.
In diesem Kapitel stellen wir Ihnen das für das OSGi Framework
spezifizierte Sicherheitskonzept vor. Es erweitert das Java-2-Security-
Modell und ermöglicht, den im Framework installierten Bundles
(dynamisch) Ausführungsrechte zuzuweisen bzw. zu entziehen.
Einordnung
Die OSGi-spezifischen Erweiterungen des Java-Security-Modells
sind ein optionaler Bestandteil der OSGi Framework Specification und
logisch in der Service-Schicht des OSGi Frameworks angesiedelt (vgl.
Abb. 9–1). Sie können in Kapitel 2 der OSGi-Spezifikation nachgele-
sen werden.
Abb. 9–1
Einordnung in die
logischen Framework-
Schichten
OSGi Framework
Specification
Module-Schicht
Lifecycle-Management-Schicht
Service-Schicht
Secu-
rity
Framework
Services
9 Security150
Die Verwaltung von Ausführungsrechten erfolgt über Framework Ser-
vices, die in Kapitel 9 bzw. Kapitel 10 der OSGi Core Specification
beschrieben sind.
9.1 Tutorial: Ein sicherer Translation Service
Überblick
Für die Vergaben von Ausführungsrechten einzelner Bundles sind
unterschiedliche Szenarien denkbar:
Spezifikation von lokalen Rechten durch den Bundle-Entwickler:
Der Entwickler eines Bundles kann alle für die Ausführung des
Bundles benötigten Rechte direkt im Bundle lokal spezifizieren (die
sog. lokalen Rechte). Der Framework-Administrator inspiziert die
spezifizierten Rechte und installiert das Bundle, wenn er keine
Sicherheitsrisiken feststellen konnte. Das OSGi Framework stellt
sicher, dass dem Bundle nur die angegebenen, lokalen Rechte zuge-
wiesen werden.
Spezifikation von System-Berechtigungen durch den Framework-
Administrator: Darüber hinaus kann der Framework-Administra-
tor auf Basis bestimmter Bedingungen (sog. Conditions), bspw. der
Signatur eines Bundles, die Rechte zuweisen, die es aus seiner Sicht
besitzen darf (die sog. System-Berechtigungen).
In diesem Tutorial zeigen wir Ihnen, wie Sie über die lokalen Rechte
eines Bundles die Ausführungsrechte einschränken. Wir erweitern
unser Beispiel um ein eigenes Recht (die
TranslationPermission), über
das ein Bundle verfügen muss, um Übersetzungen mit dem Translation
Service durchzuführen. Dazu modifizieren wir das bestehende Beispiel
wie folgt (vgl. auch Abb. 9–2):
Implementierung der Translation Permission: Die
TranslationPer-
mission implementieren wir in dem Bundle org.osgibook.transla-
tion
. Die Permission basiert auf einer »normalen« Java Permission.
Absichern des Translation Service: Den Translation Service passen
wir so an, dass eine Übersetzung nur dann glich ist, wenn das
aufrufende Bundle die
TranslationPermission besizt. Ist dies nicht
der Fall, dann soll der Translation Service die Übersetzung der über-
gebenen Nachricht verweigern und eine
SecurityException werfen.
Spezifikation der benötigten Ausführungsrechte: Die benötigten
Ausführungsrechte spezifizieren wir als sog. lokale Rechte inner-
halb des »Hello World«-Bundles.
Die Plug-in-Projekte
In diesem Tutorial werden wir im Bundle org.osgibook.translation die
TranslationPermission hinzufügen. Zusätzlich werden wir Anpassun-
gen am Bundle
org.osgibook.translation.impl und am Bundle
org.osgibook.helloworld vornehmen (vgl. Abb. 9–3).
1519.1 Tutorial: Ein sicherer Translation Service
verwendet
Klassen aus
verwendet
Klassen aus
verwendet
Service
META-INF
MANIFEST.MF
org.osgibook.translation
verwendet
META-INF
MANIFEST.MF
org.osgibook.translation.impl
TranslationService
META-INF
MANIFEST.MF
translation_de_DE.properties
permissions.perm
OSGI-INF
MANIFEST.MF
META-INF
org.osgibook.helloworld
Abb. 9–2
Übersicht über die
beteiligten Bundles
Abb. 9–3
Die Plug-in-Projekte
9 Security152
Schritt 1: Implementieren der Translation Permission
Im ersten Schritt implementieren wir die TranslationPermission, die ein
Bundle künftig benötigt, um mit dem Translation Service Übersetzun-
gen durchführen zu dürfen. Da die Permission Teil der öffentlichen
Schnittstelle des Translation Service sein soll, implementieren wir sie
im »Translation«-Bundle. Legen Sie dort bitte im Package
org.osgi-
book.translation
die neue Klasse an, die auf einer regulären Java Per-
mission basiert:
package org.osgibook.translation;
import java.security.BasicPermission;
public final class TranslationPermission extends BasicPermission {
public TranslationPermission (String name) {
super(name);
}
}
Schritt 2: Absichern des Translation Service
Im zweiten Schritt werden wir die Implementierung des Translation
Service so erweitern, dass dieser vor dem Übersetzen einer Nachricht
über einen
java.lang.SecurityManager überprüft, ob das aufrufende
Bundle über die
TranslationPermission verfügt.
Erweitern Sie dazu die Methode
getTranslation() der Klasse
TranslationServiceImpl im Bundle org.osgibook.translation.impl (vgl.
Listing 9–2).
package org.osgibook.translation.impl;
[...]
public class TranslationServiceImpl implements TranslationService {
[...]
public String getTranslation(String message) {
SecurityManager securityManager =
System.getSecurityManager();
if (securityManager != null) {
securityManager.checkPermission
(new TranslationPermission("translate"));
}
Listing 9–1
Die Translation-
Permission
Listing 9–2
Die Klasse
TranslationServiceImpl

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required