Zugriffsregeln¶
Die Zugriffsregeln im Raptor Server kontrollieren, wer welche informationen sehen kann. Dabei wird jeder Zugriff durch einen Client im Zugriffsmodul durch eine Reihe von Zugriffsregeln überprüft. Diese Regeln können den Zugriff auf die Daten des Raptor Systems einschränken.

Die Zugriffsschichten im Raptor Server¶
Die Regeln welche du definierst werden dabei genau in der konfigurierten Reihenfolge getestet. Jede Regel kann dabei entweder den Zugriff zulassen, oder blockieren. Dabei wird die Überprüfung bei der ersten passenden Regel abgebrochen.

Eine Liste von Zugriffsregeln.¶
Bei jedem Zugriff wird ein spezifischer Kontext überprüft. Dieser besteht aus dem geprüften Subjekt, also der Person welche sich die Informationen ansieht, und dem Ziel, die Information an sich. Die Zugriffsregeln können jetzt diese beiden Seiten des Kontexts testen und falls die Regel auf beide Seiten passt, entweder den Zugriff ablehnen oder zulassen.
Falls keine konfigurierte Regel zutrifft, wird der Zugriff abgelehnt.
Konfiguration¶
Due Zugriffsregeln werden in der Datei access_rules.xml
konfiguriert. Schau dir das folgende Beispiel an, welches die grundlegende Struktur der Datei illustriert:
1<?xml version="1.0" encoding="UTF-8" ?>
2<AccessRules
3 version="1"
4 xmlns="http://educateit.ch/software/Raptor/AccessRules/1"
5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
6
7 <Deny>
8 <ControlledSubject>
9 <!-- Condition -->
10 </ControlledSubject>
11 <Target>
12 <!-- Condition -->
13 </Target>
14 </Deny>
15 <Allow>
16 <ControlledSubject>
17 <!-- Condition -->
18 </ControlledSubject>
19 <Target>
20 <!-- Condition -->
21 </Target>
22 </Allow>
23</AccessRules>
Das ganze Dokument wird mit dem Dokument Element AccessRules eingeschlossen. Darin befinden sich dann die einzelnen Zugriffsregeln.
Das AccessRules
Element¶
Jede Regel in dem AccessRules Element wird entweder durch ein Deny oder Allow Element definiert.

Die Struktur der Zugriffsregel-Elemente¶
Dabei können in dem Dokument beliebig viele Deny oder Allow Elemente konfiguriert werden. Dabei ist die Reihenfolge der Definition wichtig. Die Regeln werden immer von oben nach unten abgearbeitet und sobald eine der Regeln zutrifft, stoppt die Verarbeitung an der Stelle. Alle Regeln darunter werden nicht mehr berücksichtigt.
1<?xml version="1.0" encoding="UTF-8" ?>
2<AccessRules
3 version="1"
4 xmlns="http://educateit.ch/software/Raptor/AccessRules/1"
5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
6
7 <Deny>
8 ...
9 </Deny>
10 <Allow>
11 ...
12 </Allow>
13 <Deny>
14 ...
15 </Deny>
16</AccessRules>
Das Deny
und Allow
Element¶
Je nachdem, ob eine Regel in dem Deny oder Allow Eingeschlossen ist, wird der Zugriff erlaubt (Allow) oder abgelehnt (Deny).
Dabei muss in dem Deny oder Allow Element genau ein ControlledSubject und darauf folgend ein Target Element enthalten sein. Diese Beiden Elemente müssen zwingend definiert werden, und auch in genau dieser Reihenfolge.
1<?xml version="1.0" encoding="UTF-8" ?>
2<AccessRules
3 version="1"
4 xmlns="http://educateit.ch/software/Raptor/AccessRules/1"
5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
6
7 <Deny>
8 <ControlledSubject>
9 <LoginGroup>
10 <Contains>RestrictedAccess</Contains>
11 </LoginGroup>
12 </ControlledSubject>
13 <Target>
14 <Or>
15 <ObjectType>
16 <Equals>Computer</Equals>
17 </ObjectType>
18 <ObjectName>
19 <Equals>Administrator</Equals>
20 </ObjectName>
21 </Or>
22 </Target>
23 </Deny>
24 <Allow>
25 <ControlledSubject>
26 <LoginUsername>
27 <Or>
28 <Equals>test-user-a</Equals>
29 <Equals>test-user-b</Equals>
30 </Or>
31 </LoginUsername>
32 </ControlledSubject>
33 <Target>
34 <Any />
35 </Target>
36 </Allow>
37 <!-- Last rule in chain-->
38 <Deny>
39 <ControlledSubject>
40 <Any />
41 </ControlledSubject>
42 <Target>
43 <Any />
44 </Target>
45 </Deny>
46</AccessRules>
Das ControlledSubject
Element¶
Das ControlledSubject Element prüft ob der aktuelle Kontext auf das kontrollierte Subjekt, also den Benutzer zutrifft, der die Daten abfragt.
Diese Prüfung wird mit einem oder mehreren LoginUsername und/oder LoginGroup Elementen definiert. Mehrere solcher Elemente können mit logischen Containerelementen And, Or oder Not kombiniert werden. Zudem können mit dem Element Any alle Benutzer für die Regel zugelassen werden.
Wichtig ist, dass das ControlledSubject Element nur genau ein Prüfelement zulässt. Möchtest du mehrere Prüfelemente verwenden, dann muss dieses eine Element ein Logischer Container sein, der wiederum mehrere Elemente enthalten kann.
Die Struktur der ControlledSubject und Target Elemente und der darin enthaltenen Bedingungen wird mit dem folgenden Bild illustriert:
1<Deny>
2 <ControlledSubject>
3 <LoginGroup>
4 <Contains>RestrictedAccess</Contains>
5 </LoginGroup>
6 </ControlledSubject>
7 <Target>
8 <Or>
9 <ObjectType>
10 <Equals>Computer</Equals>
11 </ObjectType>
12 <ObjectName>
13 <Equals>Administrator</Equals>
14 </ObjectName>
15 </Or>
16 </Target>
17</Deny>
18
19<Allow>
20 <ControlledSubject>
21 <LoginUsername>
22 <Or>
23 <Equals>test-user-a</Equals>
24 <Equals>test-user-b</Equals>
25 </Or>
26 </LoginUsername>
27 </ControlledSubject>
28 <Target>
29 <Any />
30 </Target>
31</Allow>
Das Target
Element¶
Das Target Element prüft ob der aktuelle Kontext auf bestimmte Daten zutrifft.
Diese Prüfung wird mit einem oder mehreren ObjectType, ObjectName, ObjectContext und/oder ObjectValue Element definiert. Mehrere solcher Elemente können mit logischen Containerelementen And, Or oder Not kombiniert werden. Zudem können mit dem Element Any alle Daten für die Regel zugelassen werden.
Wichtig ist auch hier, dass das Target Element nur genau ein Prüfelement zulässt. Möchtest du mehrere Prüfelemente verwenden, dann muss dieses eine Element ein Logischer Container sein, der wiederum mehrere Elemente enthalten kann.
1<Deny>
2 <ControlledSubject>
3 <LoginGroup>
4 <Contains>RestrictedAccess</Contains>
5 </LoginGroup>
6 </ControlledSubject>
7 <Target>
8 <Or>
9 <ObjectType>
10 <Equals>Computer</Equals>
11 </ObjectType>
12 <ObjectName>
13 <Equals>Administrator</Equals>
14 </ObjectName>
15 </Or>
16 </Target>
17</Deny>
18
19<Allow>
20 <ControlledSubject>
21 <LoginUsername>
22 <Or>
23 <Equals>test-user-a</Equals>
24 <Equals>test-user-b</Equals>
25 </Or>
26 </LoginUsername>
27 </ControlledSubject>
28 <Target>
29 <Any />
30 </Target>
31</Allow>

Die Struktur der ControlledSubject und Target Elemente¶
Die Struktur der ControlledSubject und Target Elemente zeigt welche Prüf- und Containerelemente enthalten sein können. Du siehst, dass Logikcontainer wie And und Or beliebig verschachtelt werden können.
Element |
Prüfelement |
Beschreibung |
---|---|---|
Der Benutzername des angemeldeten Benutzers. |
||
↑ |
Eine Liste aller Gruppen des angemeldeten Benutzers. |
|
Der Typ des Zielobjekts. |
||
↑ |
Der Name des Zielobjekts. |
|
↑ |
Der Kontext des Zielobjekts. |
|
↑ |
Ein Permanenter Wert des Zielobjekts. Mit den Attributen |
|
Für beide Blöcke |
Platzhalter der auf alles zutrifft. |
|
↑ |
Ein boolescher AND Container. Er muss zwei oder mehr Prüfelemente enthalten. |
|
↑ |
Ein boolescher OR Container. Er muss zwei oder mehr Prüfelemente enthalten. |
|
↑ |
Ein boolescher NOT Container. Er muss genau ein Prüfelement enthalten. |
Prüfelemente¶
Jedes Prüfelement, wie LoginUsername, LoginGroup, ObjectType, ObjectName, ObjectContext und ObjectValue, muss genau ein Operator-Element enthalten. Dieses testet den Wert, welcher du mit dem Prüfelement auswählst auf eine bestimmte Eigenschaft.
Das Prüfelement muss genau ein Operator-Element enthalten. Du kannst aber mehrere Operator-Elemente mit booleschen Containern kombinieren.
Bei den Operatoren Equals, Contains und RegExp kannst du zusätzlich das Attribut caseSensitivity
angeben. Als Wert gibst du dabei entweder CaseSensitive
oder CaseInsensitive
an, je nachdem, ob du möchtest dass die Gross-/Kleinschreibung beachtet wird oder nicht.
Jeder Wert den du mit dem Prüfelement auswählst hat einen bestimmten Typ. Je nach ausgewählten Typ funktionieren nicht alle Operatoren. Die folgenden Tabellen geben dir eine Übersicht über alle Operator-Elemente und deren Effekt auf verschiedene Typen der ausgewählten Werte.
1<Deny>
2 <ControlledSubject>
3 <LoginGroup>
4 <Contains>RestrictedAccess</Contains>
5 </LoginGroup>
6 </ControlledSubject>
7 <Target>
8 <Or>
9 <ObjectType>
10 <Equals>Computer</Equals>
11 </ObjectType>
12 <ObjectName>
13 <Equals>Administrator</Equals>
14 </ObjectName>
15 </Or>
16 </Target>
17</Deny>
18<Allow>
19 <ControlledSubject>
20 <LoginUsername>
21 <Or>
22 <Equals>test-user-a</Equals>
23 <Equals>test-user-b</Equals>
24 </Or>
25 </LoginUsername>
26 </ControlledSubject>
27 <Target>
28 <Any />
29 </Target>
30</Allow>
Operatoren für Text¶
Operator |
Text |
Textliste |
---|---|---|
Prüft ob der Wert dem angegebenen Text entspricht. |
Prüft ob der Text einem der Werte in der Liste entspricht. |
|
Prüft ob der Text in dem Wert enthalten ist. |
Prüft ob der Text in einem der Werte in der Liste enthalten ist. |
|
Prüft den Text mit dem angegebenen Regulären Ausdruck. |
Prüft ob einer der Texte in der Liste dem angegebenen Regulären Ausdruck entspricht. |
Operatoren für Zahlen¶
Operator |
Beschreibung |
---|---|
Prüft ob der Operator-Wert kleiner oder gleich als die Zahl ist. |
|
Prüft ob der Operator-Wert grösser oder gleich als die Zahl ist. |
Boolesche Container¶
Operator |
Beschreibung |
---|---|
Ein boolescher AND Container. Er muss zwei oder mehr Prüfelemente enthalten. |
|
Ein boolescher OR Container. Er muss zwei oder mehr Prüfelemente enthalten. |
|
Ein boolescher NOT Container. Er muss genau ein Prüfelement enthalten. |
Die folgende Illustration zeigt die Zusammenhänge zwischen den Prüfelementen und den Operator-Elementen:

Das Any
Element¶
Das Any Element ist ein Platzhalter, der auf alles zutrifft. Du verwendest ihn, falls eine Zugriffsregel nur das ControlledSubject Element oder das Target Element verwendet. In dem nicht verwendeten Element fügst du einfach ein Any Element ein, welches dann auf alle Werte zutrifft.
1<?xml version="1.0" encoding="UTF-8" ?>
2<AccessRules
3 version="1"
4 xmlns="http://educateit.ch/software/Raptor/AccessRules/1"
5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
6
7 ...
8 <Allow>
9 <ControlledSubject>
10 <LoginUsername>
11 <Or>
12 <Equals>test-user-a</Equals>
13 <Equals>test-user-b</Equals>
14 </Or>
15 </LoginUsername>
16 </ControlledSubject>
17 <Target>
18 <Any />
19 </Target>
20 </Allow>
21 <!-- Last rule in chain-->
22 <Deny>
23 <ControlledSubject>
24 <Any />
25 </ControlledSubject>
26 <Target>
27 <Any />
28 </Target>
29 </Deny>
30</AccessRules>
Die booleschen Container And
und Or
¶
Mit den beiden booleschen Container Elementen And und Or verknüpfst du entweder mehrere Prüfelemente oder mehrere Operator-Elemente. Es müssen dabei mindestens zwei dieser Elemente in dem booleschen Container eingeschlossen werden.
1<Target>
2 <And>
3 <ObjectType>
4 <Equals>Computer</Equals>
5 </ObjectType>
6 <ObjectName>
7 <Equals>Administrator</Equals>
8 </ObjectName>
9 </And>
10</Target>
1<ControlledSubject>
2 <LoginUsername>
3 <Or>
4 <Equals>test-user-a</Equals>
5 <Equals>test-user-b</Equals>
6 </Or>
7 </LoginUsername>
8</ControlledSubject>
Der negations Container Not
¶
Schliesst du ein Prüfelement oder Operator-Element mit dem Not Element ein, wird das Ergebnis der Operation umgekehrt.
1<ControlledSubject>
2 <LoginUsername>
3 <Not>
4 <Equals>test-user-a</Equals>
5 </Not>
6 </LoginUsername>
7</ControlledSubject>
Das Prüfelement LoginUsername
¶
Mit dem Prüfelement LoginUsername wendest du einen Operator auf den Textwert des Benutzernamens an.
1<ControlledSubject>
2 <LoginUsername>
3 <Or>
4 <Equals>test-user-a</Equals>
5 <Equals>test-user-b</Equals>
6 </Or>
7 </LoginUsername>
8</ControlledSubject>
Das Prüfelement LoginGroup
¶
Mit dem Prüfelement LoginGroup wendest du einen Operator auf die Text-Liste mit allen Gruppennamen eines Benutzers an.
1<ControlledSubject>
2 <LoginGroup>
3 <Contains>test-admin-</Contains>
4 </LoginGroup>
5</ControlledSubject>
Das Prüfelement ObjectType
¶
Mit dem Prüfelement ObjectType wendest du einen Operator auf den Textwert mit dem Objekttyp an. Hier ist jedoch nur der Equals Operator mit den folgenden Werten erlaubt:
User
Computer
Application
Process
1<Target>
2 <And>
3 <ObjectType>
4 <Equals>Computer</Equals>
5 </ObjectType>
6 <ObjectName>
7 <Equals>Administrator</Equals>
8 </ObjectName>
9 </And>
10</Target>
Das Prüfelement ObjectName
¶
Mit dem Prüfelement ObjectName wendest du einen Operator auf den Textwert mit dem Objektnamen an.
1<Target>
2 <And>
3 <ObjectType>
4 <Equals>Computer</Equals>
5 </ObjectType>
6 <ObjectName>
7 <Equals>Administrator</Equals>
8 </ObjectName>
9 </And>
10</Target>
Das Prüfelement ObjectContext
¶
Mit dem Prüfelement ObjectContext wendest du einen Operator auf den Textwert des Objekt Kontexts an.
1<Target>
2 <And>
3 <ObjectName>
4 <Equals>Administrator</Equals>
5 </ObjectName>
6 <ObjectContext>
7 <Equals>example.com</Equals>
8 </ObjectContext>
9 </And>
10</Target>
Das Prüfelement ObjectValue
¶
Mit dem Prüfelement ObjectValue wendest du einen Operator auf einen permanenten Wert in einem Objekt an. Den Wert wählst du dabei mit den Attributen informationBlock
für den Informationsblock und mit valueName
für den Namen aus. Der Typ des Werts wird dabei von dem Objekt bestimmt.
1<Target>
2 <And>
3 <ObjectValue informationBlock="ActiveDirectory" valueName="ldapPath">
4 <Contains caseSensitivity="CaseInsensitive">OU=Testers</Contains>
5 </ObjectValue>
6 <ObjectContext>
7 <Equals>example.com</Equals>
8 </ObjectContext>
9 </And>
10</Target>
Das Operator-Element Equals
¶
Mit dem Operator-Element Equals prüfst du, ob ein Wert exakt dem angegebenen Wert entspricht. Das optionale Attribut caseSensitivity
mit dem Wert CaseSensitive
oder CaseInsensitive
wählt ob die Gross-/Kleinschreibung beachtet wird oder nicht.
1<Target>
2 <And>
3 <ObjectName>
4 <Equals>Administrator</Equals>
5 </ObjectName>
6 <ObjectContext>
7 <Equals caseSensitivity="CaseInsensitive">example.com</Equals>
8 </ObjectContext>
9 </And>
10</Target>
Das Operator-Element Contains
¶
Mit dem Operator-Element Contains prüfst du, ob der angegebene Text in dem geprüften enthalten ist. Das optionale Attribut caseSensitivity
mit dem Wert CaseSensitive
oder CaseInsensitive
wählt ob die Gross-/Kleinschreibung beachtet wird oder nicht.
1<Target>
2 <And>
3 <ObjectName>
4 <Contains caseSensitivity="CaseInsensitive">Testuser</Contains>
5 </ObjectName>
6 <ObjectContext>
7 <Equals>example.com</Equals>
8 </ObjectContext>
9 </And>
10</Target>
Das Operator-Element RegExp
¶
Mit dem Operator-Element RegExp prüfst du den Wert mit dem angegebenen Regulären Ausdruck. Das optionale Attribut caseSensitivity
mit dem Wert CaseSensitive
oder CaseInsensitive
wählt ob die Gross-/Kleinschreibung beachtet wird oder nicht.
1<Target>
2 <And>
3 <ObjectName>
4 <RegExp>-test$</RegExp>
5 </ObjectName>
6 <ObjectContext>
7 <Equals>example.com</Equals>
8 </ObjectContext>
9 </And>
10</Target>
Das Operator-Element MaxInclude
¶
Mit dem Operator-Element MaxInclude prüfst du ob der geprüfte Zahlenwert kleiner oder gleich dem angegeben Wert ist.
1<Target>
2 <And>
3 <ObjectValue informationBloc="ActiveDirectory" valueName="level">
4 <MaxInclude>3</MaxInclude>
5 </ObjectValue>
6 </And>
7</Target>
Das Operator-Element MinInclude
¶
Mit dem Operator-Element MinInclude prüfst du ob der geprüfte Zahlenwert grösser oder gleich dem angegeben Wert ist.
1<Target>
2 <And>
3 <ObjectValue informationBloc="ActiveDirectory" valueName="level">
4 <MinInclude>3</MinInclude>
5 </ObjectValue>
6 </And>
7</Target>