Apache Guacamole – Database

Published by Lello on

Espandiamo le capacità di Apache Guacamole utilizzando come back-end di autenticazione un Database Server. In questo post utilizziamo come back-end MySQL/MariaDB.

Apache Guacamole supporta diversi database: MySQL, MariaDB, PostgreSQL, MS SQL Server o altri tramite estensioni scaricabili dal sito del progetto (ad esempio, LDAP).

Quando si usa un database come backend di autenticazione, vengono fornite funzionalità aggiuntive quali:

  • Gestione di utenti e connessioni direttamente da interfaccia web
  • Gruppi di connessione, per il bilanciamento del carico di lavoro
  • Interfaccia di amministrazione estesa

Effettuando una modifica sul database, le modifiche hanno effetto immediato; se aggiungo nuove connessioni per un utente, l’utente non deve effettuare un logout/login per vedere le nuove sessioni, ma le visualizza immediatamente.

In questo post usiamo come backend di autenticazione MariaDB. Quello di cui abbiamo bisogno sarà:

  • l’estensione di Apache Guacamole per il database;
  • la libreria java per connetteri al database (connector MySQL/J oppure MariaDB/J)

Scarichiamo l’estensione di Apache Guacamole per MySQL/MariaDB ed inseriamola nella directory extensions di Guacamole:

# cd /usr/src
# wget https://downloads.apache.org/guacamole/1.4.0/binary/guacamole-auth-jdbc-1.4.0.tar.gz
# tar xvfz guacamole-auth-jdbc-1.4.0.tar.gz
# cp guacamole-auth-jdbc-1.4.0/mysql/guacamole-auth-jdbc-mysql-1.4.0.jar /etc/guacamole/extensions/

Creiamo il database GuacamoleDB, creiamo l’utente GuacamoleUSER a cui concediamo i diritti di SELECT,INSERT,UPDATE, e DELETE sul database. Per potere eseguire tali passaggi, abbiamo bisogno di poter accedere con le credenziali di amministratore/root al database server.

# dnf install mysql
# mysql -u root -p -h mariadb.anthesia.lan
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 7306
Server version: 10.9.4-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> CREATE DATABASE GuacamoleDB;
Query OK, 1 row affected (0.001 sec)

MariaDB [(none)]> CREATE USER 'GuacamoleUSER'@'guacamole.anthesia.lan' IDENTIFIED BY 'GuacamolePWD';
Query OK, 0 rows affected (0.003 sec)

MariaDB [(none)]> GRANT SELECT,INSERT,UPDATE,DELETE ON GuacamoleDB.* TO 'GuacamoleUSER'@'guacamole.anthesia.lan';
Query OK, 0 rows affected (0.010 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.006 sec)

MariaDB [(none)]> quit
Bye

Utilizzando gli script messi a disposzione, creiamo le tabelle nel database; tale script crea anche l’utente di amministrazione user=guacadmin, password=guacadmin:

# cat guacamole-auth-jdbc-1.4.0/mysql/schema/*.sql |mysql -u root -p GuacamoleDB -h mariadb.anthesia.lan

Installiamo il connector java (il 2.7.7 rappresenta il compromesso tra MariaDB 10.9, Tomcat 9 e Guacamole 1.4.0) e aggiungiamo al file properties di guacamole la sezione di configurazione per la connessione al DB:

# cd /etc/guacamole
# wget https://dlm.mariadb.com/2678392/Connectors/java/connector-java-2.7.7/mariadb-java-client-2.7.7.jar -O lib/mariadb-java-client-2.7.7.jar
# cat << EOF >> guacamole.properties
mysql-hostname: mariadb.anthesia.lan
mysql-username: GuacamoleUSER
mysql-password: GuacamolePWD
mysql-database: GuacamoleDB
EOF

Restrizioni sugli utenti

Se un utente esiste su più modalità di autenticazione (ad esempio è definito sul file user-mapping.xml e all’interno del database), dopo aver effettuato il login (chiaramente le password devono essere uguali in tutti i meccanismi di autenticazione) l’utente vedrà i dati di ciascun sistema.

Definiamo le seguenti restrizioni relative agli account ed inseriamole nel file di properties di Guacamole:

  • lunghezza minima della password: 8 caratteri
  • la password deve contenere caratteri minuscoli e maiuscoli
  • la password deve contenere simboli
  • la password deve contenere numeri
  • la password NON deve contenere la username legata all’utente
  • l’utente DEVE modificare la propria password ogni 90gg
  • l’utente non può utilizzare le precendeti 5 password impostate
# cat << EOF >> guacamole.properties
mysql-user-password-min-length: 8
mysql-user-password-require-multiple-case: true
mysql-user-password-require-symbol: true
mysql-user-password-require-digit: true
mysql-user-password-prohibit-username: true
mysql-user-password-max-age: 90
mysql-user-password-history-size: 5
EOF

Gli utenti potranno accedere a Guacamole se, e solo se, sono autenticati da almeno un’estensione (File, DB, …). Se volessimo limitare l’accesso SOLO agli utenti che sono stati inseriti nel database, negando esplictamente gli utenti definit in altri tipi di autenticazione:

# echo "mysql-user-required: true" >> guacamole.properties

Login

Riavviamo Tomcat per rileggere le modifiche apportate al file guacamole.properties:

# systemctl restart tomcat

Possiamo ora effettuare la connessione al nostro server Apache Guacamole, collegandoci via HTTP alla porta 8080 del server tomcat e richiamando il client di Apache Guacamole. Effettuiamo il login utilizzando come credenziali guacadmin/guacadmin; potremo vedere che la schermata iniziale non ha alcuna connessione predefinita, in quanto queste vengono caricate dal DB che inizialmente è vuoto:

La configurazione che abbiamo creato è sufficiente per un piccolo laboratorio; ma se vogliamo avere maggiore stabilità ed espandere le funzionalità di Apache Guacamole, dovremo installare il prodotto partendo dai sorgenti. In questo modo avremo tutte le potenzialità e stabilitò offerte dalla versione 1.5.0 di Apache Guacamole

Apache Guacamole – Client Apache Guacamole – Server da sorgenti →