JRIO erlaubt ein feingranulares Sicherheitskonzept analog zu java.io.
Eine Anwendung, die JRIO benutzt und unter einem Security Manager läuft, wird z.B. mit folgendem Kommando gestartet:
java -Djava.security.manager <Anwendungsname>
Alle Zugriffe auf Dateien und Verzeichnisse der unterstützten Dateisysteme werden durch den Security Manager zunächst abgelehnt. Lediglich der Zugriff auf Dateien aus dem UFS-Verzeichnis, das die geladene Klasse enthält, wird gewährt.
UFS-Dateien unterliegen bei der Behandlung durch den Security Manager auch für JRIO den gleichen Mechanismen, die durch java.io geboten werden. Im Folgenden werden daher die Besonderheiten des DMS-Dateisystems beschrieben.
Um einer Anwendung auch unter dem Security Manager den Zugriff auf bestimmte Dateien und Verzeichnisse des DMS-Dateisystems zu erlauben, sind entsprechende „Berechtigungen“ (Permissions) in einem Policy-File zu erteilen. Der Mechanismus zur Auswahl des gültigen Policy-File unterscheidet sich nicht von dem in Java üblichen Verfahren, insbesondere kann das PolicyFile auch direkt spezifiziert werden:
java -Djava.security.manager
-Djava.security.policy= <Policy-File> <Anwendung>
JRIO bietet zwei neue Permissions an, die im Policy-File erteilt werden können:
com.fujitsu.ts.jrio.DMS.FilePermission
com.fujitsu.ts.java.bs2000.SystemInfoPermission
Die Einträge im Policy-File können Sie mit dem policytool, aber auch mit einem normalen Editor vornehmen. In diesem Handbuch werden die Einträge so dargestellt, wie sie ein Editor anzeigt.
Beachten Sie, dass das Policy-File in UTF8-Codierung vorliegen muss.
File-Permission
Die com.fujitsu.ts.jrio.DMS.FilePermission steuert den Zugriff auf Dateien und Verzeichnisse. Die Syntax eines Eintrags im Policy-File ist wie folgt:
grant [codeBase ... | signedBy ...] { permission com.fujitsu.ts.jrio.DMS.FilePermission "Dateibezeichner" , "Aktionsliste"; };
Der Dateibezeichner ist dabei entweder ein gültiger BS2000-Verzeichnisname oder ein gültiger BS2000-Dateiname mit oder ohne Katalogkennung und/oder Benutzerkennung, d.h. eine Katalogkennung (in der Form ":catid:"), eine Benutzerkennung (in der Form "$userid.") oder eine Kombination davon (in der Form ":catid:$userid."). Das letzte Zeichen des Dateinamens kann ein „*“ sein . Dann bezieht sich die Zugriffserlaubnis auf alle Dateien, deren Namen mit dem String vor dem „*“ beginnen. In diesem Fall muss der Namensteil vor dem „*“ lediglich zu einem gültigen Dateinamen vervollständigt werden können. Für Katalog- und Benutzerkennung können auch „:*:“ bzw. „$*.“ angegeben werden, wodurch Sie die Erlaubnis für alle Katalogkennungen bzw. alle Benutzerkennungen erteilen. Die Abkürzung „$.“ für die System-Standard-Kennung ist erlaubt, aber nicht die Abkürzung „$file“ für „$.file“. Siehe Abschnitt „Dateinamen im DMS-Dateisystem".
Wenn keine Benutzerkennung explizit angegeben ist, bezieht sich die Erlaubnis auf Dateien unter der Benutzerkennung des Aufrufers (die der Anwendung daher nicht namentlich bekannt sein muss). Wenn keine Katalogkennung angegeben ist, bezieht sich die Erlaubnis auf Dateien der Standard-Katalogkennung der entsprechenden Benutzerkennung. Der String <<ALL FILES>> erlaubt den Zugriff auf alle Dateien und Verzeichnisse. In der mitgelieferten JAVADOC-Dokumentation für die Klasse com.fujitsu.ts.jrio.DMS.FilePermission finden Sie weitere Einzelheiten.
Die Aktionsliste ist eine komma-separierte Liste der für die Datei erlaubten Aktionen read, write und delete. Wenn die Erlaubnis für die Aktion in dieser Datei bzw. diesem Verzeichnis nicht erteilt ist, wird der Versuch eines entsprechenden Zugriffs mit einer SecurityException abgewiesen. Dies gilt auch für Auskunftsfunktionen, z.B. list() oder listFiles(), die eine Leseberechtigung für das zugrunde liegende Verzeichnis erfordern.
SystemInfo-Permission
Über die com.fujitsu.ts.java.bs2000.SystemInfoPermission wird innerhalb von JRIO gesteuert, welche Informationen über das DMS-Dateisystem sich die Anwendung verschaffen darf. Die Syntax hierzu lautet:
grant [codeBase ... | signedBy ...] { permission com.fujitsu.ts.java.bs2000.SystemInfoPermission "Name"; };
Dabei ist Name ein Wert aus der Menge HomePubset, UserName, UserPubset, DefaultUserName, DefaultUserPubset und ForeignUserPubset oder der String <<ALL INFO>>, mit dem die Erlaubnis für alle genannten Daten erteilt wird. Wenn die Permission erteilt wird, darf die Anwendung die entsprechenden Katalog- und Benutzerkennungen über die Schnittstellen getCanonicalPath(), getCanonicalFile(), getAbsolutePath() und getAbsoluteFile() der Klasse RecordFile ermitteln. Anderenfalls wird der Versuch mit einer SecurityException abgewiesen. Die mit User... beginnenden Namen beziehen sich auf die Kennung des Aufrufers, die mit Default... beginnenden Namen auf die System-Standard-Kennung und die mit Foreign... beginnenden Namen auf alle fremden Benutzerkennungen. Die Erlaubnis bezieht sich nur auf die Schnittstellen, die die entsprechenden Namen im Rahmen der Dateinamen-Vervollständigung offen legen, jedoch nicht auf den eigentlichen Zugriff auf Dateien aus diesen Katalog- oder Benutzerkennungen.
Beispiel
Einer Anwendung wird der Zugriff zu der Datei HUGO unter der Kennung des Aufrufers erlaubt, ohne dass die Anwendung die Erlaubnis hat, zu ermitteln, wie die Kennung des Aufrufers heißt:
grant [codeBase ... | signedBy ...] { permission com.fujitsu.ts.jrio.DMS.FilePermission "Hugo", "read, write"; };
Mit dieser Einstellung ist das Öffnen, das Lesen und das Schreiben der Datei erlaubt. Die Vervollständigung des Dateinamens z.B. mit getCanonicalPath(...) ist aber nicht gestattet.