Index

Das Java-Sicherheitsmodell und den Java Service Wrapper verstehen

Der Java Service Wrapper implementiert eine Reihe von Berechtigungen, die genutzt werden können, um den Zugriff auf die Wrapper API unter Nutzung des Standard-Java-Sicherheitsmodells vollständig zu kontrollieren.

Steuerung eines anderen Dienstes aus einer Java-Anwendung.

Der Wrapper ermöglicht Starten, Anhalten, Abfragen und Ausführung anderer Operationen bezüglich allen Diensten auf einem System durch das Senden der entsprechenden Steuercodes. Dies kann sehr leistungsstark sein, aber, falls es falsch genutzt wird, können auch schwerwiegende Sicherheitsprobleme auf einem Server entstehen. Aus diesem Grund ist der Zugriff auf die WrapperManager.sendServiceControlCode(...) Methode standardmäßig deaktiviert. Um sie zu nutzen, ist es erforderlich, dass ein Sicherheitsmanager in der JVM installiert ist und besondere Berechtigungen erteilt sind.

Seien Sie sich bewusst, dass das Festlegen eines Sicherheitsmanagers wahrscheinlich bewirkt, dass viele Dinge in Ihrer Anwendung anfangen, mit Sicherheitsfehlern fehlzuschlagen. Es ist notwendig in Ihre Anwendung zu gehen und die entsprechenden Berechtigungen für Ihre Anwendung zu erteilen. Sehen Sie das folgende Tutorial von Oracle für mehr Informationen bezüglich Sicherheitsmanager: http://docs.oracle.com/javase/tutorial/essential/environment/security.html

Einrichten eines Sicherheitsmanagers:

Der einfachste Weg, einen Sicherheitsmanager in Ihrer JVM einzurichten, ist es, die folgenden Eigenschaften Ihrer wrapper.conf-Datei hinzuzufügen:

Konfigurationsbeispiel:
wrapper.java.additional.1=-Djava.security.manager
wrapper.java.additional.2=-Djava.security.policy=../conf/java.policy

java.security.manager:

Die erste Systemeigenschaft, java.security.manager (J2SE 5.0) (JavaSE6), informiert Java darüber, dass ein Sicherheitsmanager erstellt werden sollte, wenn die JVM erstellt wird.

java.security.policy:

Die zweite Systemeigenschaft, java.security.policy (J2SE 5.0) (JavaSE6), informiert dann über den Speicherort einer Datei, die die Berechtigungen beschreibt, die innerhalb Ihrer Anwendung erteilt werden sollten.

Die Richtliniendatei ist eine einfache Textdatei.

Beispiel einer Richtliniendatei:
// Give Wrapper classes full permissions
grant codeBase "file:../lib/wrapper.jar" {
        permission java.security.AllPermission;
};

// Grant various permissions to a specific service.
grant codeBase "file:../lib/-" {
        permission org.tanukisoftware.wrapper.security.WrapperServicePermission
"myservice", "interrogate,start,stop";
};

Der erste Block gibt den Klassen wrapper.jar vollständige Berechtigungen, um alles tun zu können. Dies wird empfohlen, da es dem Wrapper ermöglicht werden muss, Ihre gesamte Anwendung zu starten, was bedeutet, dass alles, was Ihre Anwendung tut, vom Wrapper ausgeht.

Der zweite Block sagt aus, dass alle anderen Klassen in jars in Ihrem lib-Verzeichnis in der Lage sind, Anrufe zu tätigen, um den "myservice"-Dienst via des Wrappers abzufragen, zu starten oder anzuhalten. Wenn dies nicht so wäre, dann hätten die Aufrufe Sicherheitsausnahmefehler zur Folge.

WrapperManager.fireUserEvent API

In der Wrapper Version 3.5.8 wurde die Möglichkeit, benutzerdefinierte Ereignisse durch die WrapperManager API aufzurufen, hinzugefügt.Obwohl dies ein leistungsstarkes Feature ist, um das Nutzen von Nutzerereignissen für Entwickler zu erleichtern, mag es auch Ursache für Sicherheitsbedenken sein, wann es einem Programm ermöglicht werden sollte, alle Benutzerereignisse eigenständig aufzurufen.

Um eine Lösung für dieses Anliegen anzubieten, macht die API Gebrauch von der Klasse WrapperUserEventPermission, die in der Richtliniendatei des Sicherheitsmanagers definiert werden kann.

Beispiel einer Richtliniendatei:
grant codeBase "file:../lib/some.jar" {
        permission org.tanukisoftware.wrapper.security.WrapperUserEventPermission "fireUserEvent", "-10, 50, 100-200, 555-";
}

Das obengenannte Beispiel stattet die Bibliothek "../lib/some.jar" mit der Berechtigung aus, die folgenden Benutzerereignisse aufzurufen:

  • "-10" : wenn die Startzahl eines Bereichs nicht spezifiziert ist, bedeutet dies, dass die Zahlenfolge mit seinem ersten Wert startet, z.B. "1"

  • "50" : Zahlen können individuell eingestellt werden

  • "100-200" : alle Zahlen zwische 100 und 200 (inkl. 100 und 200)

  • "555-" : alle Zahlen zwischen 555 aufwärts bis zur oberen Grenze der verfügbaren Ereigniszahlen, z.B. 32767.

NOTE

Aus Gründen der Einheitlichkeit müssen die Zahlen sortiert werden, das heißt das Folgende wäre ungültig: "5, -4", "1, 8-10, 7", "9-, 7", etc. Jede Fehlkonfiguration wird Zugriffsfehler verursachen.