Table of Contents

GUACAMOLE: Overview

La prise de main à distance sur plusieurs machines fait partie intégrante du quotidien de l’administrateur réseau. Que se soit avec des clients multi-protocole (MobaXterm, MRemoteNG) ou avec des clients dédiés (Putty, Microsoft Remote Desktop), ses besoins sont en général pourvus. Cependant il peut arrivé de ne pouvoir se connecter à cause de restrictions de sécurité. Dans ces cas là, les ports web restaient ouvert, c’est là que Guacamole prends tout sont sens.

Présentation

Guacamole est un logiciel libre sous licence ASF (Apache Software Foundation) permettant la connexion à distance sur de nombreux types de machines grâce à son coté multi-protocole. La particularité de Guacamole c’est qu’il est accessible via une interface web. Et c’est la toute l’utilité de la chose. Sur un serveur hébergé n’importe ou vous pourrez prendre la main sur vos machines.

Très simplement le serveur web publie l’interface graphique et réceptionne les ordres (clique, clavier, etc …) puis le service Guacd transforme ces informations pour les router vers le protocole souhaités (SSH, VNC, RDP).

Guacamole permet aussi la gestion d’utilisateurs différent et de droit différents en fonction de ce que l'on définit dans le fichier de configuration.

Installation de guacamole

Installation des paquets

Installation du serveur

Pour installer Guacamole, rien de plus simple que d’installer le paquet correspondant par la commande ci dessous. Il est préférable d’être “root” pour cela.

sudo   apt-get install guacamole

Durant l’installation, le système vous demandera si on veut redémarrez “le serveur Tomcat”, sélectionner “Oui”.

Le serveur Tomcat est une exigence car il sera utilisé pour servir le contenu du client Guacamole aux utilisateurs qui se connectent au serveur via un navigateur. Par conséquent, exécuter la commande suivante pour installer Tomcat:

sudo apt install tomcat9 tomcat9-admin tomcat9-common tomcat9-user

Après l'installation, le serveur Tomcat doit être opérationnel, on peut confirmer l'état du serveur avec la commande suivante:

sudo systemctl status tomcat9

Si Tomcat n'est pas en cours d'exécution, il faut le démarrer et l'activer au démarrage:

sudo systemctl start tomcat9
sudo systemctl enable tomcat9

Par défaut, Tomcat s'exécute sur le port 8080 pour modifier cela il faut éditer le fichier /var/lib/tomcat9/conf/server.xml et redémarrer le serveur.

Installation du client Guacamole

Une fois le serveur Tomcat installé, il faut procéder à l'installation du client Guacamole qui est une application Web basée sur Java qui permet aux utilisateurs de se connecter au serveur.

Tout d'abord, créer un répertoire de configuration comme indiqué.

sudo mkdir /etc/guacamole

Télécharger le binaire du client Guacamole dans le répertoire /etc/guacamole.

sudo wget https://downloads.apache.org/guacamole/1.2.0/binary/guacamole-1.2.0.war -O /etc/guacamole/guacamole.war

Une fois téléchargé, créer un lien symbolique vers le répertoire Tomcat WebApps.

ln -s /etc/guacamole/guacamole.war /var/lib/tomcat9/webapps/

Pour déployer l'application Web, redémarrer le serveur Tomcat et le démon Guacamole.

sudo systemctl redémarrer tomcat9
sudo systemctl redémarrer guacd

Installation depuis les sources

Prérequis

Tout d’abord, on commence par mettre à jour apt

apt update && apt upgrade -y

Installer toutes les dépendances et les paquets nécessaires:

apt -y install libcairo2-dev libjpeg62-turbo-dev libossp-uuid-dev libavcodec-dev libavutil-dev libswscale-dev libfreerdp-dev libpango1.0-dev libssh2-1-dev libtelnet-dev libvncserver-dev libpulse-dev libssl-dev libvorbis-dev libwebp-dev mariadb-server tomcat8 libmysql-java

Construction des binaires

Se placer dans le dossier temporaire et télécharger guacamole-server puis décompresser l’archive:

cd /tmp
wget http://mirror.ibcp.fr/pub/apache/guacamole/0.9.14/source/guacamole-server-0.9.14.tar.gz
tar -xzf guacamole-server-0.9.14.tar.gz

Se placer dans le dossier guacamole-server pour lancer la compilation, on va commencer par vérifier les librairies présentes et leur appliquer les bons paramètres :

cd guacamole-server-0.9.14/
./configure --with-init-dir=/etc/init.d

Vérifier si tous les protocoles pris en charge ainsi que les deux services:

Protocol support:

RDP ....... yes
SSH ....... yes
Telnet .... yes
VNC ....... yes

Services / tools:

guacd ...... yes
guacenc .... yes

Si tout est ok, on peux compiler puis installer:

make
make install

Mettre à jour les caches systèmes des librairies installées:

ldconfig

Créer le service guacd pour pouvoir utiliser les commandes service guacd {start-stop-restart}:

systemctl enable guacd

Guacamole-client

Créer trois dossiers permettant une configuration plus simple:

mkdir -p /etc/guacamole/lib
mkdir -p /etc/guacamole/extensions

Télécharger un fichier guacamole-client tout fait:

cd /tmp
wget http://mirror.ibcp.fr/pub/apache/guacamole/0.9.14/binary/guacamole-0.9.14.war

Placer le fichier dans le dossier /etc/guacamole puis créer des liens symboliques pour l’intégrer dans Tomcat, configurer la librairies freerdp et le connecteur java mysql:

mv guacamole-0.9.14.war /etc/guacamole/guacamole.war
ln -s /etc/guacamole/guacamole.war /var/lib/tomcat8/webapps/
mkdir /usr/lib/x86_64-linux-gnu/freerdp/
ln -s /usr/local/lib/freerdp/guac*.so /usr/lib/x86_64-linux-gnu/freerdp/
ln -s /usr/share/java/mysql-connector-java.jar /etc/guacamole/lib/

Démarrer le service guacd

service guacd start

Installation terminée, On peut se connetcer sur le navigateur à l’adresse suivante : http://IP_GUACAMOLE_SERVER:8080/guacamole/

Les identifiants par défaut sont: guacadmin:guacadmin

Configuration de Guacamole

La configuration de Guacamole n’est pas répartie sur beaucoup d’éléments:

Configuration simple des utilisateurs

Dans le cas d’une configuration simple on a besoin d’éditer que le fichier user-mapping.xml. Ce dernier contient la liste des utilisateurs des protocoles et machines autorisées. Dans le cas d’une “industrialisation de guacamole, on peut utiliser une base SQL (MySQL, PostgreSQL, ou Sql Server) pour stocker les utilisateurs et leurs droits.

Commencer par générer le mot de passe avec la commande suivante. Cela permettra de ne pas avoir le mot de passe affiché en clair dans le fichier de configuration. Bien évidement, le md5 reste une sécurité extrêmement faible et insuffisante. Pour sécuriser les comptes utilisateurs de manières optimal, préférer une installation avec base de données ou les mots de passe seront chiffrés en sha256.

echo -n "mon_mot_de_passe"|md5sum

Puis éditer le fichier /etc/guacamole/user-mapping.xml.

nano /etc/guacamole/user-mapping.xml
    <user-mapping>
    <connection name="Raspberry">        
            <protocol>ssh</protocol>
            <param name="hostname">192.168.1.250</param>
            <param name="port">22</param>
    </connection>
    <connection name="Serveur Windows">
             <protocol>rdp</protocol>
             <param name="hostname">192.168.1.253</param>
             <param name="port">3389</param>
             <param name="server-layout">fr-fr-azerty</param>
             <param name="color-depth">16</param>
             <param name="enable-printing">true</param>
    </connection>
    </authorize>
    <authorize username="utilisateur2" password="db3f23206bceb7eba6580a2ffbc53c28" encoding="md5">
        
    <connection name="srvlinux">
             <protocol>ssh</protocol> 
             <param name="hostname">192.168.1.25</param> 
             <param name="port">22</param> 
    </connection>
    </authorize>
    </user-mapping>

Une seconde connexion est configurée, elle concerne un serveur Windows avec le protocole RDP sur le port standard 3389, avec des couleurs 16bit, un clavier français azerty, et une redirection des imprimantes connectées sur le serveur guacamole.

Un second utilisateur est configurés pour un connexion SSH vers un serveur nommé “srvlinux”.

Une fois configuré il suffira de se connecter au serveur via un navigateur web sur une adresse du type http://ip_de_votre_serveur:8080/guacamole, pour accéder à la page d’authentification.

Une fois connecté avec votre utilisateur, vous retrouverez les connexions précédemment configurées.

Configuration du Backend mysql

Télécharger l’extension de base de donnée mysql puis la placer dans notre dossier /etc/guacamole/extension :

cd /tmp
wget http://mirror.ibcp.fr/pub/apache/guacamole/0.9.14/binary/guacamole-auth-jdbc-0.9.14.tar.gz
tar -xvf guacamole-auth-jdbc-0.9.14.tar.gz
cp guacamole-auth-jdbc-0.9.14/mysql/guacamole-auth-jdbc-mysql-0.9.14.jar /etc/guacamole/extensions/

Créer un fichier guacamole.properties:

nano /etc/guacamole/guacamole.properties

Avec pour comme contenu, la configuration pour la connexion à la base mysql:

mysql-hostname: localhost
mysql-port: 3306
mysql-database: guacamole_db
mysql-username: guacamole_user
mysql-password: P@$$w0rd

Redémarrer le service Tomcat afin qu’il prenne en compte nos modifications:

service tomcat8 restart

Se connecter à la base sql et créer la base guacamole, l’utilisateur guacamole_user et donner certain droit sur celle-ci:

mysql -u root -p

create database guacamole_db;
create user 'guacamole_user'@'localhost' identified by 'P@$$w0rd';
GRANT SELECT,INSERT,UPDATE,DELETE ON guacamole_db.* TO 'guacamole_user'@'localhost';
flush privileges;
quit

Copier les schémas des tables dans la base sql:

cat guacamole-auth-jdbc-0.9.14/mysql/schema/*.sql | mysql -u root -pP@$$w0rd guacamole_db

Pour aller plus loin

Application unique à distance

Fondamentalement, les hôtes de session Bureau à distance disposent de deux méthodes pour publier des applications:

  1. Initial program (Xorg backend)
  2. remoteApp (windows backend)

La différence, lors de la connexion via le programme Remote Desktop, réside dans le fait qu'avec Initial Program, on obtien un bureau vide (sans barre des tâches ni bouton de démarrage) dans le programme Remote Desktop contenant l'application. Avec RemoteApp, le programme distant apparaît seul sur l'ordinateur local. Ce n'est pas “à l'intérieur” de Remote Desktop. Donc, il semble que ce soit simplement une application native qu'on lancé sur l'ordinateur local.