Effektive ACL-Zugriffsrechte in HCL Domino verstehen
Einen Blick in die ACL einer Domino-Datenbank zu werfen, ist einfach. Den tatsächlich effektiven Zugriff eines bestimmten Benutzers zu ermitteln, kann dagegen erheblich schwieriger sein – insbesondere dann, wenn Zugriffsrechte über Gruppen, verschachtelte Gruppen, Rollen und ACL-Flags zustande kommen.
Ein Benutzer muss nicht einmal explizit in der ACL einer Datenbank eingetragen sein und kann trotzdem über eine oder mehrere Gruppenzugehörigkeiten weitreichende Zugriffsrechte besitzen.
Die entscheidende Frage lautet deshalb nicht nur: „Ist dieser Benutzer in der ACL eingetragen?“
Viel wichtiger ist: „Welchen effektiven ACL-Zugriff hat dieser Benutzer aktuell tatsächlich auf diese Datenbank?“
Ein ACL-Eintrag ist nicht dasselbe wie effektiver Zugriff
In einer kleinen Domino-Umgebung kann es ausreichen, die ACL einer Datenbank manuell zu kontrollieren. In einer Infrastruktur, die über viele Jahre gewachsen ist, kann der tatsächliche Zugriffsweg jedoch wesentlich weniger offensichtlich sein.
Ein Benutzer kann seine Rechte über eine direkt zugewiesene Gruppe, über mehrere Ebenen verschachtelter Gruppen, über Organisationseinträge oder über andere ACL-Einträge erhalten, die in die Domino-Zugriffsberechnung einfließen.
- die in der Datenbank-ACL gespeicherten Einträge
- Benutzer, Gruppen und hierarchische Namen
- konfigurierte Zugriffsebenen
- Rollen und Privilegien
- ACL-Access-Flags
- zu welchen Gruppen ein bestimmter Benutzer gehört
- welche verschachtelten Gruppen beteiligt sind
- welche ACL-Einträge dadurch für diesen Benutzer gelten
- welche Zugriffsebene letztlich effektiv ist
- welche Rollen, Privilegien und Flags dadurch wirksam werden
Aufbau einer Matrix effektiver Zugriffsrechte
Das zugehörige Engine-Skript demonstriert, wie sich diese Fragen programmatisch über mehrere Domino-Server und Datenbanken hinweg analysieren lassen.
Die Demo ermittelt zunächst die Domino-Benutzer und erzeugt für jeden Benutzer eine vollständige Names List einschließlich direkter und indirekter Gruppenzugehörigkeiten. Anschließend werden die Datenbanken der konfigurierten Server ermittelt, deren ACLs gelesen und jeder Benutzer gegen jede erfolgreich gelesene ACL ausgewertet.
- Domino-Benutzer aus dem Domino Directory ermitteln
- direkte und verschachtelte Gruppenzugehörigkeiten auflösen
- Datenbanken auf einem oder mehreren Domino-Servern ermitteln
- die ursprünglichen ACL-Einträge jeder Datenbank lesen
- die verfügbare ACL-Historie auslesen
- den effektiven Zugriff für jede Benutzer-/Datenbank-Kombination berechnen
- Zugriffsebenen, Rollen, Privilegien und ACL-Flags speichern
- die Ergebnisse in eine zentrale Domino-Reporting-Datenbank schreiben
Das Beispiel konzentriert sich bewusst auf das zentrale ACL- und Gruppenauflösungs-Szenario. Domino bietet darüber hinaus weitere ACL-Eigenschaften und Sicherheitsmechanismen – beispielsweise den maximalen Internetzugriff per Name und Passwort sowie besondere administrative Zugriffsrechte –, die ebenfalls in weiterführende Analyse-Workflows einbezogen werden könnten. Die API-Engine stellt auch für solche Informationen entsprechende Funktionen bereit; sie wurden hier jedoch bewusst weggelassen, um das Beispiel übersichtlich und auf den Kern des Themas fokussiert zu halten.
Einmal auflösen, einmal lesen, im Speicher wiederverwenden
Eine einfache Implementierung könnte für jeden Benutzer erneut die Gruppenstruktur auflösen und für jede einzelne Auswertung die betreffende Datenbank erneut öffnen und deren ACL lesen. Das würde unnötigen Aufwand erzeugen.
Die Demo trennt deshalb die Vorbereitung von der eigentlichen Auswertung.
Der Kern der effektiven ACL-Zugriffsberechnung
Das vollständige Beispielskript enthält zusätzlich die Ermittlung der Datenbanken, Reporting-Dokumente, ACL-Historie, Fehlerbehandlung und die optionale Analyse dokumentbasierter Zugriffsrechte. Die eigentliche Berechnung des effektiven ACL-Zugriffs bleibt dennoch vergleichsweise kompakt.
/* Benutzer einschließlich direkter und verschachtelter Gruppen auflösen. */
UserGroups := @ResolveUserGroups(UserName; hNamesList);
/* Domino-Datenbank öffnen und eine In-Memory-Kopie ihrer ACL erzeugen. */
DBh := @OpenDB(ServerName + "!!" + DBPath);
hACL := @ReadACL(DBh);
/* Für die ACL-Auswertung wird die Datenbank selbst nicht mehr benötigt. */
DBh := @CloseDB(DBh);
/* Den effektiven ACL-Zugriff dieses Benutzers ermitteln. */
Result := @ACLGetEffectiveUserAccess(
hACL;
hNamesList;
UserLevel;
UserPrivileges;
UserPrivilegeNames
);
@LogReport(UserLevel);
@LogReport(UserPrivileges);
@LogReport(UserPrivilegeNames);
/* Temporäre In-Memory-Strukturen wieder freigeben. */
hACL := @ReleaseACL(hACL);
Result := @DestroyNameList(hNamesList);
Die vollständige Demo erweitert dieses Prinzip zu einer kompletten Matrix über alle konfigurierten Benutzer, Datenbanken und Server.
Dieselben Daten beantworten unterschiedliche Security-Fragen
Sobald die berechneten Zugriffsinformationen in der Reporting-Datenbank gespeichert wurden, können Domino-Ansichten dieselben Daten aus unterschiedlichen Blickwinkeln darstellen.
Nicht nur den aktuellen Zustand betrachten
Die Demo liest zusätzlich mit @GetACLHistory die in Domino verfügbare ACL-Historie aus und speichert sie zusammen mit der analysierten ACL.
Dadurch erhält ein aktueller Zugriffs-Snapshot zusätzlichen Kontext und es entsteht eine weitere Informationsquelle für Audit- oder Security-Auswertungen.
- die aktuelle ACL-Konfiguration analysieren
- die in Domino verfügbare ACL-Historie auslesen
- aktuelle Zugriffsinformationen mit historischen ACL-Informationen kombinieren
- die Daten als Grundlage für ein eigenes Change Tracking verwenden
- projektspezifische Prüfungen oder Benachrichtigungen auslösen
ACL-Zugriff ist nur eine Sicherheitsebene
Effektiver Zugriff über die Datenbank-ACL bedeutet nicht automatisch, dass ein Benutzer jedes Dokument der Datenbank lesen oder bearbeiten kann. Domino kann zusätzliche dokumentbasierte Zugriffsbeschränkungen über Reader-Names- und Author-Names-Felder anwenden.
Aus diesem Grund enthält das Beispiel optional einen Scan, der Dokumente auf Reader-Names- und Author-Names-Felder untersucht. Werden solche Felder gefunden, erzeugt das Skript ein Reporting-Dokument mit Informationen über Quelldatenbank und Quelldokument sowie einem direkten Domino-Dokumentlink.
Reader-Names-Felder können den Kreis der Benutzer, die ein einzelnes Dokument lesen dürfen, zusätzlich einschränken – selbst wenn über die ACL grundsätzlich Zugriff auf die Datenbank besteht.
Author-Names-Felder wirken bei der dokumentbezogenen Bearbeitungsberechtigung für Benutzer mit einer ACL-Zugriffsebene mit, bei der diese zusätzliche Autorenberechtigung erforderlich ist.
Das Beispiel öffnet die Quelldokumente dabei nur mit ihren Summary-Informationen und begrenzt die Anzahl der pro Datenbank erzeugten Reader-/Author-Reporting-Dokumente. Diese Begrenzung hält die Demo-Reporting-Datenbank überschaubar, reduziert jedoch nicht die Anzahl der Quelldokumente, die gegebenenfalls untersucht werden müssen.
Von der Zugriffsanalyse zum automatisierten Security-Workflow
Die mitgelieferte Reporting-Datenbank ist bewusst einfach gehalten. Sie soll zeigen, welche Informationen ermittelt werden können und wie sich die Ergebnisse für weitere Verarbeitungsschritte bereitstellen lassen.
Sobald die effektiven Zugriffsinformationen programmatisch verfügbar sind, ergeben sich zahlreiche weitere Möglichkeiten.
Die ACL-Analyse in einer Testumgebung ausprobieren
Das aktuelle Domino API Engine Evaluation-Paket enthält das Beispielskript und passende Domino-Testdatenbanken für dieses ACL-Analyse-Szenario.
Das Beispiel ist für eine kontrollierte Nicht-Produktivumgebung vorgesehen. Vor dem Start sollten die konfigurierten Servernamen, Datenbankpfade und insbesondere der optionale Reader-/Author-Dokumenten-Scan geprüft werden.
- Das aktuelle Domino API Engine Evaluation-Paket herunterladen und entpacken.
- Die Engine entsprechend der mitgelieferten README-Datei installieren und konfigurieren.
- Unbedingt die im aktuellen Evaluation-Paket enthaltenen Binaries verwenden.
- Die mitgelieferten Beispiel-Datenbanken wie im Paket beschrieben unterhalb des Domino-Data-Verzeichnisses ablegen.
- Falls erforderlich, DestDBPath im Beispielskript anpassen.
- Die zu analysierenden Domino-Server konfigurieren oder alternativ die Verarbeitung ausschließlich auf dem lokalen Server aktivieren.
- Die ACLs der Reporting- und Quelldatenbanken prüfen und bei Bedarf anpassen.
- Den Reader-/Author-Dokumenten-Scan deaktiviert lassen, sofern dieser nicht ausdrücklich getestet werden soll.
- Das mitgelieferte ACL-Analyse-Skript aus der Engine-Control-Datenbank starten.
- Die erzeugten Reporting-Ansichten öffnen und Benutzer, Gruppen, ACLs und effektive Zugriffsrechte auswerten.
