Apache Guacamole – Einsatz von 2 Faktor-Authentifizierung (Teil 4)

Nachdem die Einrichtung  von Guacamole  soweit abgeschlossen ist, macht man sich natürlich Gedanken über die Absicherung des Zugangs. Je nach Planung/Umgebung hat man nun Zugriff auf Server, Applikationen und Daten im LAN. Es ist inzwischen nicht mehr zeitgemäß solche Zugänge ausschließlich mit Benutzername und Passwort absichern. Oft verwenden die Nutzer das selbe Passwort für unterschiedliche Konten – unabhängig ob privat oder geschäftlich.

Abhilfe schafft in meinen Augen nur eine Implementierung einer Zwei-Faktor-Authentifizierung (2FA) in Form eines Einmalpassworts (One-Time-Passwort (OTP) ). Neben dem Benutzernamen und dem dazugehörigen Passwort muss auch das jeweilige OTP des Benutzer eingeben werden. Eine Anmeldung ist daher nur möglich, wenn alle drei Eingaben zusammen passen. Guacamole stellt dafür offizell die TOTP Erweiterung zur Verfügung.

 

Installation und Grundkonfiguration von TOTP

Installation der Extension:

cd /usr/src/
wget --trust-server-names "https://apache.org/dyn/closer.cgi?action=download&filename=guacamole/1.0.0/binary/guacamole-auth-totp-1.0.0.tar.gz"
tar xvzf guacamole-auth-totp-1.0.0.tar.gz
cp /usr/src/guacamole-auth-totp-1.0.0/guacamole-auth-totp-1.0.0.jar /etc/guacamole/extensions/

Konfiguration ergänzen:

cat << EOF >> /etc/guacamole/guacamole.properties

#
# TOTP Settings
#

#The human-readable name of the entity issuing user accounts. If not specified, "Apache Guacamole" will be used by default.
totp-issuer: guacamole.lab01.wydler.eu

#The number of digits which should be included in each generated TOTP code. Legal values are 6, 7, or 8. By default, 6-digit codes are generated.
totp-digits: 6

#The duration that each generated code should remain valid, in seconds. By default, each code remains valid for 30 seconds.
totp-period: 30

#The hash algorithm that should be used to generate TOTP codes. Legal values are "sha1", "sha256", and "sha512". By default, "sha1" is used.
totp-mode: sha256

EOF

Beim Parameter „totp-issuer“ bei Möglichkeit auf Leerzeichen verzichten. Hat meinen Versuchen immer wieder Probleme gemacht.

Damit die Änderungen wirksam werden, muss der Apache Tomcat neu gestartet werden.

systemctl restart tomcat8.service

 

Einrichtung der 2FA für Administrator/Benutzer

Die Weboberfläche von Guacamole aufrugen und mit dem Administrator guacamole anmelden. Nach der erfolgreichen Anmeldung erscheint folgender Dialog.

An dieser Stelle benötigt man nun eine App(likation) für das Smartphone/Tablet bzw. Rechner/Notebook, mit der die 2FA verwaltet werden kann. Die bekannste App ist wohl der Google Authenticator. Enthält ein QR Code mehrere Parameter, so erscheint nachdem Scannen eine Fehlermeldung. Grund dafür ist, dass im QR Code mehrere Parameter enhalten sind. Die Erfahrung bezieht sich auf aktuelle Geräte von Apple mit iOS.  Auf der Suche nach Alternativen bin ich bie der App OTP Auth hängen gelieben. Unkomplizierte Bedienung und die OTPs sind schnell und einfach eingerichtet.

Den angezeigten QR Code nun mit OTP Auth  scannen. Ist alles korrekt wird in der App fortlaufend (alle 30 Sekunden) ein neues OTP für jedes Konto angezeigt. Das OTP für guacadmin in das Feld „Authentication Code“ eingeben. Passt dies zu dem anzumeldeten Benutzer, erscheint die Übersichtsseite von Guacamole.

Standardmäßig ist die 2FA nur für den Administrator guacadmin (automatisch) aktiviert. Für allen Benutzern ist ein manueller Eingriff durch den Administrator notwendig. Dazu unter Einstellungen in den Reiter Benutzer wechseln. In der Übersicht den entsprechenden Benutzer anklicken. Es öffnet sich die Eigenschaften des Benutzerkontos.

Im Bereich Berechtigungen ist die Option „Ändere eigenes Passwort“ zu aktivieren.Bei der nächstens Anmeldung des Benutzers an Guacamole, wird er aufgefordert TOTP einzurichten.  Das Vorgehen ist das Selbe wie bereits oben für den Benutzer guacadmin beschrieben.

 

Zurücksetzen von TOTP für einen Benutzer

Neben der Einrichtung möchte ich an dieser Stelle auch auf den Verlust es OTP eingehen. Die Gründe dafür könenn vielfältig sein – neues Smartphone, Eintrag ausversehen gelöscht, etc… Aktuell ist es nicht möglich über die Weboberfläche dies zurückzusetzen. Daher erfolgt die Operation direkt auf der Datenbank. Wie in Teil 1 beschrieben, kommt in meinem Testlab MariaDB zum Einsatz. Zuerst wird eine via SSH eine Verbindung zum Guacamole Server hergestellt.

Danach folgende Shell bzw. SQL-Befehle ausführen:

mysql -u BENUTZERNAME -pPASSWORT guacamole

Falls im Passwort Sonderzeichen (z.B. !) enhalten sind, müssen diese escaped (\) werden.

Zuerst muss die ID des betroffenen Benutzers ausgelesen werden.

MariaDB [guacamole]> SELECT `user_id` FROM `guacamole_user` WHERE `full_name`='mueller';
+---------+
| user_id |
+---------+
|       3 |
+---------+
1 row in set (0.00 sec)

MariaDB [guacamole]>

Danach kann TOTP Für den Benutzer zurückgesetzt werden.

MariaDB [guacamole]> SELECT * FROM `guacamole_user_attribute` WHERE `user_id`='3';
+---------+-------------------------+----------------------------------------------------------+
| user_id | attribute_name          | attribute_value                                          |
+---------+-------------------------+----------------------------------------------------------+
|       3 | guac-totp-key-confirmed | true                                                     |
|       3 | guac-totp-key-secret    | 6LEJ6CN3HT3HI6HQLCY4F4IOO6DO4AHMSMJWGHKKJPY2GA====       |
+---------+-------------------------+----------------------------------------------------------+
2 rows in set (0.00 sec)

MariaDB [guacamole]>
MariaDB [guacamole]> UPDATE `guacamole_user_attribute` SET `attribute_value`='false' WHERE `attribute_name`='guac-totp-key-confirmed' and `user_id`='3';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

MariaDB [guacamole]>
MariaDB [guacamole]> SELECT * FROM `guacamole_user_attribute` WHERE `user_id`='3';
+---------+-------------------------+----------------------------------------------------------+
| user_id | attribute_name          | attribute_value                                          |
+---------+-------------------------+----------------------------------------------------------+
|       3 | guac-totp-key-confirmed | false                                                    |
|       3 | guac-totp-key-secret    | 6LEJ6CN3HT3HI6HQLCY4F4IOO6DO4AHMSMJWGHKKJPY2GA====       |
+---------+-------------------------+----------------------------------------------------------+
2 rows in set (0.00 sec)

MariaDB [guacamole]>

Meldet sich der Benutzer danach erneut an, scheint wieder der Einrichtungsdialog für TOTP.