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.
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.
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.
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
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
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
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/
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
La configuration de Guacamole n’est pas répartie sur beaucoup d’éléments:
/etc/guacamole
/etc/guacamole/guacamole.properties
/etc/guacamole/user-mapping.xml
/etc/guacamole/tomcat.xml
/etc/guacamole/apache.conf
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>
<user-mapping>
et se termine avec la balise de fermeture </user-mapping>
.<authorize username=”utilisateur1″ password=”23206deb7eba65b3fbc80a2ffbc53c28″ encoding=”md5″>
permet de définir un utilisateur, son mot de passe ainsi que son mode de stockage, ici il est encodé en md5.<authorize….>
et </authorize>
concerne uniquement l’utilisateur déclaré.<connection name=”Raspberry”>
permet de définir une connexion en indiquant son nom.<protocol>ssh</protocol>
<param name=”hostname”>192.168.1.250</param>
<param name=”port”>22</param>
indiquent un protocol SSH vers une IP précise et le port utilisé par ce protocole.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.
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
Fondamentalement, les hôtes de session Bureau à distance disposent de deux méthodes pour publier des applications:
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.