Ziel Die Sessions in Guacamole sollen für die Überwachung von Compliance Anforderungen aufgezeichnet werden.
Nach der Installation (siehe Oracle Linux 9 - Apache Guacamole 1.6 mit DUO Zwei Faktor Autorisierung und Microsoft SQL Cluster DB als Repostitory anlegen - SSL über NGNIX können die erweiterten Funktionen wie das Aufzeichnen einer Session von Guacamole konfiguriert werden.
Wie in der Anleitung für die Installation beschreiben müssen dazu bereits bei der Installation die entsprechenden Libraries auf der Maschine hinterlegt werden, um die Optionen beim Übersetzen des guacd auch zu aktiveren und es muss das Plugin dazu bereits im Lib Verzeichnis hinterlegt werden.
In Gucamole stehen zwei Arten von Aufzeichnungen zur Verfügung:
| Eigenschaft | Typescript Recording | Graphical Recording (Screen Recording) |
|---|---|---|
| Name | Textaufzeichnung / Typescript | Bildschirmaufzeichnung / Graphical Recording |
| Beschreibung | Reine Textaufzeichnung der Terminal-Ausgabe inkl. Timing-Informationen — kompatibel mit dem Unix script Befehl | Vollständige Bildschirmaufzeichnung als Guacamole-Protokoll-Dump (.guac Binärformat) |
| Dateien | typescript (Textdaten) + typescript.timing (Zeitinformationen) | Eine einzelne .guac Binärdatei |
| Protokolle | SSH, Telnet, Kubernetes | RDP, SSH, VNC, Telnet, Kubernetes |
| Dateigröße | Sehr klein (nur Text) | Größer (Bilddaten komprimiert) |
| Suchbar | Ja — Inhalt ist reiner Text | Nein — Binärformat |
| Anzeige in Guacamole | ✗ Kein „Ansicht“-Link in der History-Spalte „Protokolle“ | ✓ „Ansicht ►“ Link erscheint in der History-Spalte „Protokolle“ |
| CLI Wiedergabe | scriptreplay typescript.timing typescript | guacenc recording.guac recording.m4v (Konvertierung nach Video) |
| Anzeige mit eigener App | ✓ Asciinema Player ab Version 3.4.0 — unterstützt Typescript-Format direkt im Browser | ✓ Guacamole eigener Browser-Player (integriert) |
| Konfiguration Connection | Textaufzeichnungspfad: ${HISTORY_PATH}/${HISTORY_UUID} | Aufzeichnungspfad: ${HISTORY_PATH}/${HISTORY_UUID} |
| Geeignet für | Compliance/Audit von SSH-Sessions, Textsuche in Befehlen | Vollständige visuelle Nachvollziehbarkeit, RDP-Sessions |
| Hinweis | Beide Aufzeichnungsarten können gleichzeitig für eine Verbindung aktiviert werden | guacd muss mit libavcodec kompiliert sein für optimale Qualität |
Verzeichnis für die Daten mit den richtigen Rechten anlegen (der guacd Prozess muss die Daten schreiben können und der Tomcat wieder lesen) anlegen:
mkdir -p /daten/guacamole_recording chown -R guacd:tomcat /daten/guacamole_recording/ chmod 2750 /daten/guacamole_recording/
cd /srv/guacamole_source mkdir ex cd ex wget https://downloads.apache.org/guacamole/1.6.0/binary/guacamole-history-recording-storage-1.6.0.tar.gz tar -xvf guacamole-history-recording-storage-1.6.0.tar.gz cd /srv/guacamole_source/ex/guacamole-history-recording-storage-1.6.0/ # Adapter hinterlegen cp guacamole-history-recording-storage-1.6.0.jar /etc/guacamole/extensions/
Wichtig für das Aufzeichen sind die folgenden Parameter in der guacamole.properties:
vi /etc/guacamole/guacamole.properties:
#Recording Settings recording-search-path: /daten/guacamole_recording
Danach Tomcat neu starten:
systemctl stop tomcat.service systemctl start tomcat.service
Im Tomcat Log prüfen ob der Adpater auch gefunden wurden:
cd /srv/tomcat/config/logs grep Recording catalina.out 18:51:59.910 [main] INFO o.a.g.extension.ExtensionModule - - [recording-storage] "Session Recording Storage" (/etc/guacamole/extensions/guacamole-history-recording-storage-1.5.0.jar) 18:52:00.972 [main] INFO o.a.g.extension.ExtensionModule - Extension "Session Recording Storage" (recording-storage) loaded.
In der Session Konfiguration kann dann mit ${HISTORY_PATH} auf dieses Verzeichnis referenziert werden.
Nach etwas Test fand ich die folgenden Einstellungen am geeignetsten:
Graphical Recording aktivieren In der Connection-Konfiguration zusätzlich unter dem Abschnitt „Bildschirmaufzeichnung“ (nicht Textaufzeichnung): Aufzeichnungspfad: ${HISTORY_PATH}/${HISTORY_UUID} Aufzeichnungsname: <leer> ☑ Aufzeichnungspfad automatisch erzeugen
Dann nach einer neuen Session erscheint im selben UUID-Verzeichnis eine .guac-Datei — und der „View“-Link taucht in der History-Tabelle auf.
In der Console abspielen mit „scriptreplay“:
cd /daten/guacamole_recording/<session_id>/ scriptreplay typescript.timing typescript
Im Browser kann nur nativ in Guacamole das Graphical Recording angezeigt werden!
Im ersten Schritt legen wir einen einfachen Prototyp an um zu testen ob das prinzipell gehen könnte.
Dazu legen wir unter dem Tomcat eine einfache Seite als Prototyp an. Wenn das klappt planen wir ein kleines Applet dazu zu entwickeln, das auch mit dem Metadaten und dem Login von Guacamole arbeitet.
HTML Seite mit dem Asciinema Player anlegen:
# Tomcat Webapp anlegen mkdir -p /srv/tomcat/config/webapps/tsplayer vi /srv/tomcat/config/webapps/tsplayer/index.html <!DOCTYPE html> <html> <head> <title>Session Recording Player</title> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/asciinema-player@3.8.0/dist/bundle/asciinema-player.min.css"/> </head> <body style="background:#1a1a1a; padding:20px"> <div id="player"></div> <script src="https://cdn.jsdelivr.net/npm/asciinema-player@3.8.0/dist/bundle/asciinema-player.min.js"></script> <script> // UUID aus URL-Parameter lesen const params = new URLSearchParams(window.location.search); const uuid = params.get('uuid'); const base = '/recordings/' + uuid + '/'; AsciinemaPlayer.create( { url: [base + 'typescript.timing', base + 'typescript'], parser: 'typescript' }, document.getElementById('player'), { cols: 220, rows: 50, theme: 'monokai' } ); </script> </body> </html>
Java Script local bereitstellen:
# JS/CSS lokal bereitstellen (für abgeschottete Umgebung) cd /srv/tomcat/config/webapps/tsplayer wget https://cdn.jsdelivr.net/npm/asciinema-player@3.8.0/dist/bundle/asciinema-player.min.js wget https://cdn.jsdelivr.net/npm/asciinema-player@3.8.0/dist/bundle/asciinema-player.min.css
Ngnix anpassen:
Ngnix User der Gruppe tomcat zuordnen damit NGNIX die Typescript Dateien auch lesen kann.
# In guacamole.conf ergänzen: location /recordings/ { alias /daten/guacamole_recording/; # Nur von Guacamole-Sessions erreichbar allow 127.0.0.1; allow <gpi-netz>/24; deny all; } # auf Tomcat weiterleiten! location /tsplayer/ { proxy_pass http://localhost:8080/tsplayer/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; # Nur aus dem internen Netz erreichbar allow <gpi-netz>/16; deny all; }
Nachdem das so klappen kann mit dem ASCIMA Player sehen die nächsten schritt so aus:
Das wird aber dann, wenn der Kunden einen echten Bedarf hat, ein eigener Artikel.