# Apache Guacamole

Apache Guacamole ist ein freies und quelloffenes Gateway für den Fernzugriff auf Computersysteme, welches von der Apache Software Foundation betreut wird. Plattformunabhängig ermöglicht es Benutzern, ohne einen dedizierten Client über Webbrowser auf entfernte Computer oder virtuelle Maschinen zuzugreifen. Administratoren können den Zugriff durch ein erweiterbares System für Authentifizierung und Autorisierung regeln, sodass Zielcomputer sicher hinter Guacamole isoliert werden können, ohne direkt im Internet erreichbar zu sein.
Für den Fernzugriff nutzt Guacamole die Komponente guacd, die Protokolle wie RDP, VNC oder SSH für den Zugriff auf die jeweiligen Ressourcen verwendet. Da Guacamole keinen spezifischen Client benötigt, ist keine Agenteninstallation auf den Zielressourcen erforderlich. Durch die Integration des Clients in Webbrowser können Benutzer ohne zusätzliche Fernwartungssoftware auf ihre Computersysteme zugreifen.

## Komponenten

Guacamole setzt sich aus verschiedenen Komponenten zusammen. Die Webanwendung bildet die Schnittstelle, über die die Benutzer mit Guacamole interagieren können. Diese stellt die visuelle Oberfläche bereit, mit der entfernte Computersysteme über den Browser aufgerufen und gesteuert werden können. Im Hintergrund arbeitet der Dienst „guacd“, welcher als Backend-Dienst fungiert. Dieser Dienst übersetzt und optimiert dynamisch native Protokolle in das spezifische Guacamole-Protokoll, um eine effiziente Kommunikation und Darstellung im Webbrowser zu ermöglichen.

### Webanwendung

Die Webanwendung dient als Benutzeroberfläche und ist für Authentifizierung sowie Autorisierung zuständig. Sie implementiert nicht direkt Fernzugriffsprotokolle. Stattdessen verlässt sie sich auf den Dienst „guacd“, der diese Protokolle ins Guacamole-Protokoll übersetzt. Die Serverseite dieser Anwendung ist in Java programmiert und wird in einem Servlet-Container, wie Apache Tomcat oder Jetty, ausgeführt. Auf der Clientseite, die im Webbrowser abläuft, kommt JavaScript zum Einsatz.

### Dienst „guacd“

„guacd“ ist ein Backend-Dienst, der Anfragen von der Webanwendung entgegennimmt und Verbindungen zu entfernten Computersystemen herstellt. Dabei lädt „guacd“ dynamisch Unterstützung für verschiedene Fernzugriffsprotokolle, was bedeutet, dass weder „guacd“ noch die Webanwendung die Einzelheiten der verschiedenen Fernzugriffsprotokolle kennen müssen. Sowohl „guacd“ als auch die dazugehörigen Client-Plugins greifen auf die Bibliothek „libguac“ zurück, die das Guacamole-Protokoll abstrahiert und die Kommunikation mit der Webanwendung erleichtert.

## Geschichte

Im Jahr 2010 entwickelte Michael Jumper Guacamole zunächst als Client für VNC basierend auf HTML5. Dabei wurden Komponenten eines zuvor existierenden browserbasierten Telnet-Clients mit dem Namen „RealMint“ verwendet.
Um die Weiterentwicklung und Unterstützung von Guacamole zu gewährleisten, gründete sich die Firma Glyptodon LLC.
Im Jahr 2016 übergab Glyptodon das Projekt an die Apache Software Foundation. Dort begann für Guacamole eine Phase der Inkubation. Nach deren erfolgreichem Abschluss im Jahr 2017 avancierte Guacamole zum Top-Level-Projekt unter dem Dach der Apache Software Foundation, seither bekannt als Apache Guacamole.
Als Projekt der Apache Software Foundation steht Guacamole unter der Apache-Lizenz und wird von einer Gemeinschaft von Beitragenden entwickelt. Diskussionen zur Entwicklung und Unterstützung finden in den Mailinglisten des Projekts statt, Beiträge werden durch das Eröffnen von Pull Requests gegenüber den GitHub-Repositories des Projekts geleistet. Guacamole folgt den Praktiken zur verantwortungsvollen Offenlegung und bietet eine private Liste, über die Sicherheitsprobleme gemeldet und behandelt werden können.
Im Juli 2020 wurden zwei Sicherheitslücken mit mittlerer Schwere in Guacamole entdeckt, die es einem Angreifer, der bereits einen RDP-Server kompromittiert hatte, potenziell ermöglichen könnten, ein Guacamole-Gateway zu kontrollieren. Die Schwachstellen wurden offiziell in Apache Guacamole 1.2.0 behoben und danach bekannt gegeben.