Klassifizierung

Alle Informationen sollten betreffend Vertraulichkeit (Confidentiality), Unversehrtheit (Integrity) und Verfügbarkeit (Availability) (CIA-Triade) klassifiziert werden, damit die Informationen angemessen geschützt werden können.

Umsetzung der Vertraulichkeitsklassen anhand eines Beispiels mit Apache

Zum Einsatz kommt unser SSO (AuthType shibboleth), Details (z. B. zur Gruppenabfrage) mit dem ZID klären!

Die Datei attribute-map.xml schaut dabei so aus:

  <Attribute name="urn:oid:CO-TCSMAIL-C" id="TCSMAIL" />
  <Attribute name="urn:oid:CO-ACCOUNTTYPE-STATUS-C-oid" id="STATUS" />
  <Attribute name="urn:oid:TUGONLINE-GROUPMEMBERSHIP" id="groupMembership" />
  <Attribute name="urn:oid:1.3.6.1.4.1.5923.1.1.1.11" id="ASSURANCE" /> 
In der httpd.conf sind dann solche Zeilen einzutragen:

Beispiel für  TLP:WHITE ,  TLP:GREEN  und  TLP:AMBER 

  <VirtualHost *:80>
   ServerName ihr_server.tugraz.at
   Redirect permanent / https://ihr_server.tugraz.at/
  <VirtualHost>
  <VirtualHost ihr_server.tugraz.at:443>
   ServerName ihr_server.tugraz.at
   …
   DocumentRoot /path/to/white
   …
   <Directory "/path/to/green/">
    AuthType shibboleth
    ShibRequireSession On
    <RequireAll>
     Require shib-attr STATUS ~ BEDIENSTETE:OK
    </RequireAll>
   </Directory>
   …
   <Directory "/path/to/amber/">
    AuthType shibboleth
    ShibRequireSession On
    <RequireAll>
     Require shib-attr groupMembership "CN="
    </RequireAll>
   </Directory>
  </VirtualHost>
 

Die als  TLP:RED  klassifizierten Daten sollten am besten gar nicht auf einem öffentlich erreichbaren Webserver landen, da sie bei einer Fehlkonfiguration oder einem Angriff öffentlich werden könnten.
Wenn der Webserver aber z. B. als Archiv dient, sollte der Zugriff auf den eigenen User (oder sehr wenige berechtigte User) eingeschränkt werden:

  <Directory "/path/to/red/">
   AuthType shibboleth
   ShibRequireSession On
   require valid-user
   <RequireAll>
    Require shib-attr USERNAME ihr_username
   </RequireAll>
  </Directory> 
oder
  <Directory "/path/to/red/">
   AuthType shibboleth
   ShibRequireSession On
   require valid-user
   <RequireAll>
    Require shib-attr TCSMAIL ihre_email_adresse
   </RequireAll>
  </Directory> 

eduPersonAssurance

Über das Attribut eduPersonAssurance (hier ASSURANCE genannt), kann man erkennen, zu welchen Gruppen von Personen eine Identität gehört, hier ein Beispiel, wie das durch ein csh-Script ausgewertet werden kann:
# ungeprüfte Identität:
#  der User hat seine Daten eingegeben, diese wurden aber von Mitarbeitenden
#  der TU Graz noch nicht verifiziert
# geprüft Identität:
#  die vom User eingegeben Daten wurden von Mitarbeitenden gegen eine Kopie
#  eines amtlichen Lichtbildausweises geprüft
#
#    1 = 00000000001
#        ungeprüfte Identität (ungeprüft) 
#    2 = 00000000010
#        Basisanwender/Studierendenvoranmeldung (ungeprüft)
#        (= über TUGRAZonline)
#    4 = 00000000100
#        Basisanwender/Bulk-Registrierung (ungeprüft)
#        (= über TUGRAZonline)
#    8 = 00000001000
#        Basisanwender/Selbstregistrierung (geprüft)
#        (= über Keycloak)
#   16 = 00000010000
#        Mitarbeitende (geprüft)
#        (= Bediensteten Profil)
#   32 = 00000100000
#        Alumni (geprüft) (= Alumni Profil)
#   64 = 00001000000
#        Studierende/TU (geprüft) (= Studierenden Profil)
#  128 = 00010000000
#        Studierende/Mitbeleger NAWI (geprüft)
#        (= Studierenden Profil + NAWI Studium)
#  256 = 00100000000
#        Studierende/Mitbeleger Entwicklungsverbund Süd-Ost (geprüft)
#        (= Studierenden Profil + Lehramtsstudium)
#  512 = 01000000000
#        externe Lehrende
#        (Studienkooperationen z.b. NAWI, ohne DV zur TU Graz)
# 1024 = 10000000000
#        Benutzer aus Förderation (fremd geprüft)
#        (über Keycloak)
#

set binary_array = (0 0 0 0 0 0 0 0 0 0 0)
@ length = 12

# convert to binary
@ binary = $ASSURANCE
while ($binary > 0)
 @ length --
 @ digit = $binary % 2
 @ binary_array[$length] = $digit
 @ binary /= 2
end

if ($binary_array[11] == 1) echo "ungeprüft "
if ($binary_array[10] == 1) echo "Basisanwender/in (Voranmeldung) "
if ($binary_array[9] == 1) echo "Basisanwender/in (Bulk) "
if ($binary_array[8] == 1) echo "Basisanwender/in (Selbstregistrierung) "
if ($binary_array[7] == 1) echo "Mitarbeiter/in "
if ($binary_array[6] == 1) echo "Alumni "
if ($binary_array[5] == 1) echo "Studierende/r "
if ($binary_array[4] == 1) echo "NAWI Graz "
if ($binary_array[3] == 1) echo "Lehramtsstudium "
if ($binary_array[2] == 1) echo "Externe/r Lehrende/r "
if ($binary_array[1] == 1) echo "Föderation"

# Beispiel:
#  ASSURANCE = 112 = 00001110000
#  → Mitarbeiter/in Alumni Studierende/r

ID Austria

Es lässt sich auch abfragen, ob eine Anmeldung mit der ID Austria erfolgt ist, wodurch es einen noch höheren Vertrauens-Level gibt.