Guacamole ucs "LDAP Authentication" is not compatible with this version of Guacamole

german
guacamole
ldap

#1

Hallo zusammen,

ich habe gerade noch einmal UCS frisch installiert. Direkt danach habe ich guacamole mithilfe der anleitung von Cool solutions installiert : https://wiki.univention.de/index.php?title=Cool_Solution_-_Guacamole

Auch nach der Installation finde ich in den logs folgenden Fehler (Docker logs guacamole):

15:16:25.638 [localhost-startStop-1] ERROR o.a.g.extension.ExtensionModule - Extension “guacamole-auth-ldap-0.9.13-incubating.jar” could not be loaded: Extension “LDAP Authentication” is not compatible with this version of Guacamole.

Die UCR Einträge für guacamole sind alle vorhanden und eine Anmeldung bei Guacomole auch möglich. Aber aufgrund der fehlenden LDAP Extentions werden keine Connections für den angemeldeten Benutzer angezeigt (Alles leer). und Docker ps liefert:

Aktuell werden keine Verbindungen angezeigt, obwohl ich eine Gruppe Webaccess (wo der Administrator mitglied ist) angelegt habe und dort als parameter Hostname=“IP der VM”" angegeben habe.:


Wie bekomme ich die LDAP Authentifizierung (bzw. die Extentsion) zum laufen ?


Guacamole Group Permission - No Connections
#2

Hallo die cool solution ist falsch

es wird hier die guacamole-auth-ldap-0.9.13-incubating.jar datei verwendet aber beim docker pull wird mjumper/guacamole verwendet - dies ist immer die letzte guacamole version von Mike Jumper und die ist derzeit 0.9.14

ich habe versucht einfach die guacamole-auth-ldap-0.9.13-incubating.jar datei gegen guacamole-auth-ldap-0.9.14.jar auszutauschen - das bringt aber dann einen fehler beim login - d.h. man müsste die datei guacamole-auth-ldap-0.9.14.jar
anpassen - da die guacamole-auth-ldap-0.9.13-incubating.jar wahrscheinlich modifiziert ist seitens univention

lg
Christian


#3

Ok habe einen work around gefunden:

entferne die beiden docker images mit
docker stop guacamole
socker stop guacd
docker rm guacamole
docker rm guacd

dann auch die images
docker images (listet die images)
docker rmi imageid
docker rmi imageid

dann ändere in dem 99univention_install_guacamole.inst join script folgende Einträge:

vi /usr/lib/univention-install/99univention_install_guacamole.inst

echo -e "Downloading and installing guacd… "
/usr/bin/docker run
–name guacd
–restart=always
-d mjumper/guacd
echo -e “Done!”

auf

echo -e "Downloading and installing guacd… "
/usr/bin/docker run
–name guacd
–restart=always
-d guacamole/guacd:0.9.13-incubating
echo -e “Done!”

und

echo -e “Downloading and installing Guacamole… "
/usr/bin/docker run
–name guacamole
–link guacd:guacd
–restart=always
-e LDAP_HOSTNAME=”${ldap_server_name}"
-e LDAP_PORT="${ldap_server_port}"
-e LDAP_USER_BASE_DN="${guacamole_user_dn}"
-e LDAP_CONFIG_BASE_DN="${guacamole_config_base_dn}"
-e LDAP_USERNAME_ATTRIBUTE="${guacamole_ldap_username_attribute}"
-e LDAP_SEARCH_BIND_DN=“uid=guacamole,cn=users,${ldap_base}”
-e LDAP_SEARCH_BIND_PASSWORD="$(cat /etc/guacamole.secret)"
-e LDAP_USER_SEARCH_FILTER="${guacamole_ldap_user_searchfilter}"
-d -p “${guacamole_external_port}”:8080 mjumper/guacamole
echo -e “Done!”

auf

echo -e “Downloading and installing Guacamole… "
/usr/bin/docker run
–name guacamole
–link guacd:guacd
–restart=always
-e LDAP_HOSTNAME=”${ldap_server_name}"
-e LDAP_PORT="${ldap_server_port}"
-e LDAP_USER_BASE_DN="${guacamole_user_dn}"
-e LDAP_CONFIG_BASE_DN="${guacamole_config_base_dn}"
-e LDAP_USERNAME_ATTRIBUTE="${guacamole_ldap_username_attribute}"
-e LDAP_SEARCH_BIND_DN=“uid=guacamole,cn=users,${ldap_base}”
-e LDAP_SEARCH_BIND_PASSWORD="$(cat /etc/guacamole.secret)"
-e LDAP_USER_SEARCH_FILTER="${guacamole_ldap_user_searchfilter}"
-d -p “${guacamole_external_port}”:8080 guacamole/guacamole:0.9.13-incubating
echo -e “Done!”

dann lässt du das join script über die GUI nochmal ausführen mit ausführen-erzwingen

dann funktioniert das login und die auflistung der hosts wieder

währe noch interressant warum der austausch der ldap auth datei nicht funktioniert

p.s. bitte auch in der /usr/bin/univention-guacamole-renew datei folgende Zeile ändern:

-d -p “${guacamole_external_port}”:8080 mjumper/guacamole > /dev/null

auf
-d -p “${guacamole_external_port}”:8080 guacamole/guacamole:0.9.13-incubating > /dev/null

lg
Christian


Guacamole - keine vordefinierten Verbindungen sichtbar
#4

Danke für deine ganze Mühe. Tolle Arbeit !!! Ich probiere das aus und gebe dir Feedback …

Eine echte Hilfe.

Gruß
Hakan


#6

Hi Christian,

danke für deine Hilfe. Habe deinen letzten Vorschlag für 0.9.14 umgesetzt und die univentition Skripte angepasst.
Danach wurde alles korrekt installiert, und die LDAP Fehlermeldung aus den Docker logs ist verschwunden:
Die Version wird jetzt korrekt geladen:

15:00:33.245 [localhost-startStop-1] INFO o.a.g.extension.ExtensionModule - Extension “LDAP Authentication” loaded.

Im Anschluß habe ich die Maschine neu gestartet und zwei Gruppen angelegt. Die Gruppe WebAccess hat jetzt folgende Einträge:

Anschließend habe ich sicherheitshalber den UCS nochmals neugestartet. Nach einem Login bei Guacmole sind aktuell immer noch keine Einträge drin,und alles leer. Zum Test habe ich noch einen zweiten Benutzer angelegt, und den Zugriff mit ihm probiert. Leider immer noch keine Einträge.
(2 user, 2 Grupen und immer noch keine Änderung)

Um auszuschließen, dass ich noch irgendwelche Reste im UCs hatte, habe ich UCS komplett neu installiert, und erst dann guacamole installiert (mit deinen skriptanpassungen).

Momentan habe ich keine Idee mehr, wo ich noch nach Fehler schauen könnte. hast du noch Vorschläge ?


#7

Hallo badzoo

du musst diese anleitung nehmen und 0.9.13 installieren - mit 0.9.14 hatte ich das gleiche verhalten - da scheint seitens univetion etwas in der ldap-auth datei geändert zu sein - leider konnte ich diese Änderung nicht finden

also so gehts:

lg
Christian


#8

Hi Christian,

dein Workaround 0.9.13 funktioniert !! Endlich klappt der Zugriff und ich sehe die Verbindungen !
Da können Sich die Jungs mal bei Univention ne Scheibe abschneiden, und das ganze als APP integrierern.

Super, danke nochmals !

Gruß
Hakan


#9

Guten Tag!

Mir gelingt es leider nicht, den Workaround von Externa1 umzusetzen. Irgendwie hapert es am guacamole Container. Im join.log einer frischen UCS Installation sieht es so aus, wenn das angepasste Jointscript 99univention_install_guacamole ausgeführt wurde:

RUNNING 99univention_install_guacamole.inst
2018-02-26 14:35:06.621148000+01:00 (in joinscript_init)
Checking if UCR variables for LDAP configuration are set...
LDAP_USER_BASE_DN can be set
LDAP_CONFIG_BASE_DN can be set
LDAP_USERNAME_ATTRIBUTE can be set
External port can be set
LDAP_USER_SEARCH_FILTER can be set
Search user can be used
Downloading and installing guacd...
Unable to find image 'guacamole/guacd:0.9.13-incubating' locally
0.9.13-incubating: Pulling from guacamole/guacd
08d48e6f1cff: Pulling fs layer
586c6c5a104f: Pulling fs layer
26da04417d30: Pulling fs layer
2201a22d3ce9: Pulling fs layer
59e374ec29a7: Pulling fs layer
2201a22d3ce9: Waiting
59e374ec29a7: Waiting
26da04417d30: Verifying Checksum
26da04417d30: Download complete
2201a22d3ce9: Verifying Checksum
2201a22d3ce9: Download complete
59e374ec29a7: Verifying Checksum
59e374ec29a7: Download complete
08d48e6f1cff: Verifying Checksum
08d48e6f1cff: Download complete
586c6c5a104f: Verifying Checksum
586c6c5a104f: Download complete
08d48e6f1cff: Pull complete
586c6c5a104f: Pull complete
26da04417d30: Pull complete
2201a22d3ce9: Pull complete
59e374ec29a7: Pull complete
Digest: sha256:6313f3dbe3465c34c5fc1261801e9bcbf44f951254e30001eb675f5ca53a6f45
Status: Downloaded newer image for guacamole/guacd:0.9.13-incubating
73b4ec41ccd3d1780ab7357047baa24882d27f3b4d957607340ba0e61416d319
Done!
Removing old Guacamole container to provision new container with new settings... Error response from daemon: No such container: guacamole
Error response from daemon: No such container: guacamole
Done!
Downloading and installing Guacamole...
/usr/bin/docker: Invalid hostPort: “8080”.
See '/usr/bin/docker run --help'.
Done!
Installing patched LDAP auth plugin... no such directory
Done!
Installing patched start script to used LDAP_USER_SEARCH_FILTER...Error response from daemon: No such container: guacamole
Done!
Restarting Container Guacamole for using patched plugin...
Error response from daemon: No such container: guacamole
Done!
Configure Apache2 site for Guacamole...
File: /etc/apache2/sites-available/guacamole.conf
Site guacamole already enabled
Done!
Create overview site link...
Setting ucs/web/overview/entries/service/guacamole/link
Setting ucs/web/overview/entries/service/guacamole/label
Setting ucs/web/overview/entries/service/guacamole/description
Setting ucs/web/overview/entries/service/guacamole/description/de
Setting ucs/web/overview/entries/service/guacamole/icon
Module: create_portal_entries
Done!
2018-02-26 14:36:55.526780900+01:00 (in joinscript_save_current_version)
EXITCODE=0

.
Auszug aus geänderter /usr/lib/univention-install/99univention_install_guacamole.inst (Guacd)

echo -e "Downloading and installing guacd... "
/usr/bin/docker run \
    --name guacd \
    --restart=always \
    -d guacamole/guacd:0.9.13-incubating
echo -e "Done!"

Auszug aus geänderter /usr/lib/univention-install/99univention_install_guacamole.inst (Guacamole)

echo -e "Downloading and installing Guacamole... "
/usr/bin/docker run \
    --name guacamole \
    --link guacd:guacd \
    --restart=always \
    -e LDAP_HOSTNAME="${ldap_server_name}" \
    -e LDAP_PORT="${ldap_server_port}" \
    -e LDAP_USER_BASE_DN="${guacamole_user_dn}" \
    -e LDAP_CONFIG_BASE_DN="${guacamole_config_base_dn}" \
    -e LDAP_USERNAME_ATTRIBUTE="${guacamole_ldap_username_attribute}" \
    -e LDAP_SEARCH_BIND_DN="uid=guacamole,cn=users,${ldap_base}" \
    -e LDAP_SEARCH_BIND_PASSWORD="$(cat /etc/guacamole.secret)" \
        -e LDAP_USER_SEARCH_FILTER="${guacamole_ldap_user_searchfilter}" \
    -d -p “${guacamole_external_port}”:8080 guacamole/guacamole:0.9.13-incubating
echo -e "Done!"

univention-app info
UCS: 4.2-3 errata305
App Center compatibility: 4
Installed: 
Upgradable: 

Nun habe ich das auf 3 verschiedenen Servern versucht und immer die gleiche Fehlermeldung. Irgendwas mache ich wohl immer falsch, aber was?

Gruß,
Dirk


#10

Hallo Dirk,

ich habe bei mir nochmal nachgeschaut:
Das Skript 99univention_install_guacamole.inst sieht bei mir genauso aus.
Wichtig ist zudem der Inhalt vom Ordner /usr/share/guacamole
Dort sollte die guacamole-auth-ldap-0.9.13-incubating.jar drin liegen (nicht die 0.9.14!)

In deinem Log steht: /usr/bin/docker: Invalid hostPort: “8080”. Ist der Port schon vergeben ?

Bitte prüfen mal mit : Docker exec -it guacamole bash
den Inhalt vom /root/.guacamole/externsions. Sieht bei mir so aus:

Ich habe den Workaround bereits zweimal auf einer frischen UCS installiert. Das läuft soweit…

Einziges Manko bisher: Ich war nicht in der Lage einen Benutzer zum Guacamole Admin zu machen, damit auch die Verbindungen zusätzlich über die Webgui gepflegt werden können.
(Teste gerade mit Mysql.Es scheint ohne Datenbank keinen Weg zu geben einen AD-User zum Guacamole Admin zu machen)

Gruß
Badzoo


#11

mir scheint als würde hier schon etwas auf port 8080 laufen ?

was gibt “docker ps” aus bevor du das join script startest ?

es sollte keine guacamole und guacd container laufen, falls hier die Ausgabe so ähnlich aussieht:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
090b33587d2f guacamole/guacamole:0.9.13-incubating “/opt/guacamole/bin/s” 3 days ago Up 3 days 0.0.0.0:8080->8080/tcp guacamole
32c33196edf1 guacamole/guacd:0.9.13-incubating “/usr/local/sbin/guac” 3 days ago Up 3 days 4822/tcp guacd

dann bitte für beide mal docker rm guacamole und docker rm guacd und danach mit docker rmi die images auch enfernen

lg

Christian


#12

Grüßt Euch,

Danke fürs Antworten! Nachdem ich mir die halbe Nacht um die Ohren geschlagen habe, konnte ich den Fehler finden. Die Docker Container waren gestoppt und gelöscht, versuchsweise Dienste und ganzen Server neu gestartet, das hat nichts geändert. Weil es ja in anderen Netzwerken auch nicht ging, aber die selbe Fehlermeldung kommt, hatte ich meine Methode untersucht:
ganze Code Zeile aus Forum in Zwischenablage kopieren und in Shell einfügen

Nachdem ich nur die “rechte Hälfte” der Zeile -d -p “${guacamole_external_port}”:8080 guacamole/guacamole:0.9.13-incubating > /dev/null kopierte, hat es funktioniert. So vermutete ich zunächst, die Ziffer “0” ist der Buchstabe “O” - aber es sind die Anführungszeichen, die falsch sind!

Screenshot:
GacamoleFalscheAnfuehrungszeichen

Codetext:

-d -p “${guacamole_external_port}”:8080 guacamole/guacamole:0.9.13-incubating
-d -p "${guacamole_external_port}":8080 guacamole/guacamole:0.9.13-incubating

Ob das durch die Forumsoftware und den FETTdruck kommt, oder schon beim reinkopieren von Christian’s Post geschieht, weis ich nicht. Wäre noch interessant zu wissen, wie Badzoo das hinbekommen hat. Bei mir kamen Linux Mint, Firefox und Remmina mit einem SSH Tunnel zum Einsatz. Aber bei einem Windows Terminalserver mit Firefox und Putty war der “Kopierfehler” genau so vorhanden.

Vielleicht wäre es eine Idee, die zwei zu ändernden Dateien an den “Workaround”-Post anzuhängen.

Gruß,
Dirk


#13

Ich denke mal das ist durch das Fett hervorheben


#14

Hi Dirk,

bei mr hat es geklappt, weil ich das ursprüngliche Skript univention-install/99univention_install_guacamole.inst nur abgeändert habe. Un dort sind die Anführungzeichen richtig gesetzt.
Installiert habe ich UCS mithilfe der ISO in einer VM…


#15

Hallo @badzoo,
hallo @externa1,
hallo @dmauz

im heute veröffentlichten Update für unsere Guacamole Cool Solution wurden die in diesem Thread benannten Probleme gelöst.

Um die neuen Pakete zu erhalten reicht es sowohl für UCS 4.2 als auch UCS 4.3 aus das bereitstehende Update für univention-guacamole-rollout zu installieren und das neue Joinscript auszuführen. Die bestehenden Container werden entfernt und die Images für guacamole/guacd und guacamole/guacamole in der Version 0.9.13-incubating heruntergeladen.

Die Konfiguration im LDAP ist hiervon unberührt. Nach der Installation seht ihr die konfigurierten Verbindungen wieder.

Gruß
Timo Denissen


#16

Hallo Denissen

Habe das Update gerade durchgeführt - schaut gut aus - kein Fehler mehr :slight_smile:

Danke & LG

Christian


#17

Hallo zusammen,

ich habe das ganze mit Gucamole 0.9.14 fehlerfrei mit UCS 4,3 am laufen. Dafür musste die guacamole-auth-ldap-0.9.14.jar neu kompiliert werden:

Umgebung zum Kompilieren einrichten:
1 .guacamole-client-0.9.14.tar.gz runterladen und nach c:\ entpacken
2. apache-maven-3.5.3-bin runterladen und nach c:\ entpacken
3. Java installieren: jdk-8u162-windows-x64.exe runterladen und installieren

Vor dem Kompilieren setzen:
JAVA_HOME=C:\Program Files\Java\jdk1.8.0_162

in die Pfad Variable mit aufnehmen:
C:\apache-maven-3.5.3\bin (enpacktes Maven Verzeichnis (binary))
C:\Program Files\Java\jdk1.8.0_162\bin

  1. cd C:\guacamole-client-0.9.14
  2. mvn package --> kompilieren
  3. Unter C:\guacamole-client-0.9.14\guacamole\target findet sich das fertig War File
    (nach der Anpassungen unten)

guacamole-auth-ldap-0.9.14.jar für Ucs anpassen:

1 .Aus dem Ordner
guacamole-client-0.9.14\extensions\guacamole-auth-ldap\src\main\java\org\apache\guacamole\auth\ldap\connection

die Datei ConnectionService.java öffnen.

  1. Die Zeilen 247 - 264 wie folgt ändern (2x member in uniqueMember ändern):

von:

    // Add the prefix to the search filter, prefix filter searches for guacConfigGroups with the 
    userDN as the member attribute value
    connectionSearchFilter.append("(&(objectClass=guacConfigGroup)(|(member=");
    connectionSearchFilter.append(escapingService.escapeLDAPSearchFilter(userDN));
    connectionSearchFilter.append(")");

    // If group base DN is specified search for user groups
    String groupBaseDN = confService.getGroupBaseDN();
    if (groupBaseDN != null) {

        // Get all groups the user is a member of starting at the groupBaseDN, excluding guacConfigGroups
        LDAPSearchResults userRoleGroupResults = ldapConnection.search(
            groupBaseDN,
            LDAPConnection.SCOPE_SUB,
            "(&(!(objectClass=guacConfigGroup))(member=" + escapingService.escapeLDAPSearchFilter(userDN) + "))",
            null,
            false,
            confService.getLDAPSearchConstraints()
        );

nach:

    // Add the prefix to the search filter, prefix filter searches for guacConfigGroups with the      
    userDN as the member attribute value
    connectionSearchFilter.append("(&(objectClass=guacConfigGroup)(|(uniqueMember=");
    connectionSearchFilter.append(escapingService.escapeLDAPSearchFilter(userDN));
    connectionSearchFilter.append(")");

    // If group base DN is specified search for user groups
    String groupBaseDN = confService.getGroupBaseDN();
    if (groupBaseDN != null) {

        // Get all groups the user is a member of starting at the groupBaseDN, excluding guacConfigGroups
        LDAPSearchResults userRoleGroupResults = ldapConnection.search(
            groupBaseDN,
            LDAPConnection.SCOPE_SUB,
            "(&(!(objectClass=guacConfigGroup))(uniqueMember=" + escapingService.escapeLDAPSearchFilter(userDN) + "))",
            null,
            false,
            confService.getLDAPSearchConstraints()
        );
  1. Guacamole kompilieren (wie obren beschrieben). Im Verzeichnis
    C:\guacamole-client-0.9.14\extensions\guacamole-auth-ldap\target

findet sich die neue guacamole-auth-ldap-0.9.14.jar

Hier die angepasste guacamole-auth-ldap-0.9.14.jar (bitte .sh am Dateiende entfernen):
guacamole-auth-ldap-0.9.14.jar.sh (1.1 MB)

Diese muss noch nach /usr/share/guacamole kopiert werden. Anschließend die Joinskripte abändern, dass guacamole/guacamole und guacd/guacamole genutzt werden und ausführen.
Dann sollte alles klappen,

Gruß
Badzoo