Benutzer-Werkzeuge

Webseiten-Werkzeuge


linux:oracle_linux_8_guacamole_session_recording

Session Recording in Apache Guacamole

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.


Aufzeichnungsarten Typescript und Graphical Recording

In Gucamole stehen zwei Arten von Aufzeichnungen zur Verfügung:

Aufzeichnungsarten: Typescript und Graphical Recording

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

Vorbereitung

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/
Plugin hinterlegen
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/

Aufzeichnen SSH Session mit Typescript

Aufzeichnen konfigurieren

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.

Session Konfiguration Typescript

In der Session Konfiguration kann dann mit ${HISTORY_PATH} auf dieses Verzeichnis referenziert werden.

Nach etwas Test fand ich die folgenden Einstellungen am geeignetsten:

  • Typescript path: ${HISTORY_PATH}/${HISTORY_UUID}
  • Typescript name: <leer lassen>
  • Automatically create typescript path: <anhacken>

 Typescript Recording Settings Guacamole

Session Konfiguration Graphical Recording

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

In der Console abspielen mit „scriptreplay“:

cd /daten/guacamole_recording/<session_id>/
 
scriptreplay  typescript.timing typescript

Im Browser mit Guacamole anzeigen

Im Browser kann nur nativ in Guacamole das Graphical Recording angezeigt werden!


Im Browser mit Asciinema anzeigen - Typescript-Replay Prototpy

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;
}

Nächste Schritte

Nachdem das so klappen kann mit dem ASCIMA Player sehen die nächsten schritt so aus:

  1. Historie Daten aus der Guacamole DB in einen JSON Datei parsen mit SQLCMD
  2. NGNIX Directory Browsing im Json format für das Verzeichnis mit dem Recordings erlauben
  3. statische HTML Seite mit jquery um über HTTP Request die Daten in das Formular einzulese
  4. Schützen der Seite über die Guacamole Rest API damit nur angemeldete User das Formular öffnen können

Das wird aber dann, wenn der Kunden einen echten Bedarf hat, ein eigener Artikel.


Quellen

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
"Autor: Gunther Pipperr"
linux/oracle_linux_8_guacamole_session_recording.txt · Zuletzt geändert: von gpipperr