Avant d'expliquer comment mettre en place guacamole, je vous recommande d'effectuer les étapes suivantes durant l'installation de l'OS
Les vidéos et sessions d'enregistrement de texte ne sont pas volumineux, seules les vidéos après l'encodage prennent de la place.
Session d'enregistrement de texte ? elle sert lors de l'enregistrement d'une connexion SSH, elle crée deux fichiers.
ATTENTION j'ai vu avec la CNIL concernant les règles de stockage et de conservation des vidéos, il m'ont indiqué que ce sont les même règle que pour le reste (RGPD).
Du coup, il faut :
Si il manque quelque chose n'hésitez pas a me le soumettre par mail, je modifierai
Pour l'installation, nous allons utiliser le script présent sur le github de MysticRyuujin, il ne fonctionne qu'avec les distributions basées sur Debian (Debian, Ubuntu, Kali)
Si vous utilisez une distribution différente, suivez le script et cherchez les équivalents des paquets installés pour votre distribution
Allez sur Script d'installation
Télécharger le script d'installation minimale (coller le lien)
wget https://raw.githubusercontent.com/MysticRyuujin/guac-install/master/guac-install-server.sh
Il faut être admin pour lancer certaines commandes, utilisées sudo ou passer admin avant de lancer les commandes comportant un dièze (#)
sudo commande
su -
pour passer admin provisoirement
su -l root -c "votre commande"
l'alternative pour ne pas rester connecté en root
Le script est simple, lisez le avant de le lancer, ne faites pas confiance
wget https://raw.githubusercontent.com/MysticRyuujin/guac-install/master/guac-install-server.sh
Donner les droits d'exécution sur le script
chmod u+x guac-install-server.sh
Avant de lancer le script, nous allons le modifier.
Cela permettra de choisir l'utilisateur qui exécutera Guacd. Permettant de sécuriser le service, mais aussi d'éviter les problèmes avec FREERDP, qui a besoin d'écrire dans le répertoire home de l'utilisateur (certificat client RDP et fichiers de configuration)
A la ligne 67, modifier la ligne ci-dessous
./configure --with-init-dir=/etc/init.d
Remplacé la par la ligne ci-dessous
./configure --with-systemd-dir=/etc/systemd/system
On remplace l'antique init.d par systemd
Lancez le script après l'avoir vérifié
# ./guac-install-server.sh
Sur Debian 10.7, j'ai rencontré un problème lors de l'installation avec la version 1.3.0 de guacamole (voir rubrique Problèmes / Problèmes lors du lancement du script)
Attendez la fin de l'installation, si vous n'avez pas d'erreur continuez.
Dans le cas contraire, n'hésitez pas à me contacter en m'indiquant votre système ainsi que l'erreur rencontrée (screen si possible)
J'ajouterai les solutions dans la rubrique problèmes
Normalement vous avez le dossier /etc/guacamole qui s'est créé avec le fichier guacd.conf présent dedans
Nous allons avoir besoin de Tomcat pour lancer l'application web de guacamole permettant au prestataire de se connecter au serveur via une page web (Html5)
Tomcat contient un serveur web comme apache, mais il est fait pour exécuter des applications Java
Commençons par chercher la version disponible dans les dépôts APT
apt search tomcat
Vous devriez avoir TomcatX, X étant la version
Actuellement nous sommes en version 9
Installons le paquet
apt install tomcat9
Tomcat installé, nous allons ajouter l'application java de Guacamole dans les webapps de Tomcat
Allez dans le terminal SSH de votre serveur et entrez la commande
curl -SLO "http://apache.org/dyn/closer.cgi?action=download&filename=guacamole/1.3.0/binary/guacamole-1.3.0.war"
Voici l'explication des options CURL
Nous allons copier le fichier sans l'indication de version dans le dossier /etc/guacamole/
cp guacamole-1.3.0.war /etc/guacamole/guacamole.war
Puis faire un lien symbolique vers le dossier webapps de tomcat
ln -sf /etc/guacamole/guacamole.war /var/lib/tomcat9/webapps/
Le but étant d'avoir tous les fichiers au même endroit /etc/guacamole et de créer un lien symbolique vers le dossier webapps de Tomcat
J'ai mis le nom guacamole au lieu de guacamole-1.3.0.war, cela permet de taper dans le navigateur http://IP:8080/guacamole au lieu de http://IP:8080/guacamole-1.3.0
J'aurais pu créer un lien symbolique de /etc/guacamole/guacamole-1.3.0.war vers /var/lib/tomcat9/webapps/guacamole.war mais en cas de mise à jour, je serais obligé de refaire le lien symbolique
Si vous cherchez la version, il vous suffit de regarder en bas à droite de la page web de connexion à guacamole.
Nous allons restart Tomcat pour qu'il prenne en compte l'ajout de l'application Java
systemctl restart tomcat9
Entrez la commande suivante dans le terminal, pour avoir l'IP du serveur
ip a
Avec votre navigateur, entrez la valeur suivante en remplaçant IP par l'IP trouvée avec la commande ci-dessus
IP:8080/guacamole
Vous devriez avoir la page de connexion à Guacamole
Allez dans le répertoire de guacamole
cd /etc/guacamole
Crée le fichier de configuration principal
touch guacamole.properties
Modifions-le pour ajouter les informations permettant de l'utiliser comme on le souhaite
nano guacamole.properties
Voici les options principales
available-languages: fr, en
guacd-hostname: localhost
guacd-port: 4822
basic-user-mapping: /etc/guacamole/user-mapping.xml
available-languages: fr, en
cette ligne indique les langues disponibles depuis l'interface, gardez l'anglais (cela permet d'avoir les mots en anglais, si il non pas été traduit en français). Par défaut toutes les langues sont disponibles
guacd-hostname: localhost
Indique ou se situe le serveur guacd. La valeur par défaut de cette ligne est localhost , si vous ne la changez pas, inutile de garder la ligne dans le fichier de configuration
guacd-port: 4822
indique le port de connexion. le port par défaut est 4822, si vous ne la changez pas, inutile de garder la ligne dans le fichier de configuration
basic-user-mapping: /etc/guacamole/user-mapping.xml
indique ou se trouve le fichier des connexions utilisateur - serveur
Un fichier avec une config par défaut ressemblerait à cela
basic-user-mapping: /etc/guacamole/user-mapping.xml
Crée le fichier de configuration des utilisateurs - serveurs
touch /etc/guacamole/user-mapping.xml
Allez dans le fichier de configuration des utilisateurs et serveurs (vide pour le moment)
nano /etc/guacamole/user-mapping.xml
Voici à quoi il peut ressembler avec un minimum d'informations
Attention, concernant le RDP vous pouvez rencontrer des difficultés pour vous connectez aux serveurs Windows. Si c'est le cas, suivez les instructions dans la rubrique Problèmes / Problèmes lors du lancement de session RDP ( tout en bas de la page)
<user-mapping>
<authorize username="test" password="098f6bcd4621d373cade4e832627b4f6" encoding="md5" >
<connection name="WinDC1">
<protocol>rdp</protocol>
<param name="hostname">192.168.1.52</param>
<param name="username">${GUAC_USERNAME}</param>
<param name="password">${GUAC_PASSWORD} </param>
<param name="ignore-cert">true</param>
<param name="domain">MonDomaine.lan</param>
</connection>
</authorize>
</user-mapping>
Nous allons commencer par convertir le mot de passe en md5, pour cela utiliser la commande suivante
echo -n "mot de passe" | openssl dgst -md5 | sed 's/(stdin)= //g'
Ou
echo -n "mot de passe"|md5sum
pour la deuxième commande copier le résultat sans les espaces et le tiret et coller le dans password=""
de la ligne ci-dessous
ATTENTION seul le MD5 est supporté pour le moment, des demandes ont été faites pour ajouter le SHA512.
MD5 n'étant pas un algorithme très fiable, prenez en compte cela avant de faire vos choix (utilisation de compte AD et/ou utilisation des comptes locaux sur les serveurs sensibles, vue plus bas)
<authorize username="test" password="098f6bcd4621d373cade4e832627b4f6" encoding="md5" >
Nous allons définir un nom pour la connexion à une machine, je l'ai nommé WinDC1
<connection name="WinDC1">
</connection>
Ajoutons le paramétrage de cette connexion
<protocol>rdp</protocol>
<param name="hostname">192.168.1.52</param>
<param name="port">3389</param>
<param name="ignore-cert">true</param>
<param name="username"></param>
<param name="password"></param>
1 C'est du Windows nous allons définir le protocole RDP
2 Indiquer le nom d'hôte ou l'IP dans notre cas ca sera 192.168.1.52
3 Indiquer le port s'il est différent de celui par défaut, sinon vous pouvez supprimer cette ligne
4 Cela permet de ne pas vérifier le certificat (évite les erreurs liées aux certificats autosignés)
5 plusieurs façons d'indiquer le nom de l'utilisateur
Dans le dernier cas ce sont les identifiants avec lequel votre prestataire se sera connecté à guacamole qui seront utilisés pour se connecter au serveur.
Attention cela vous oblige à créer un utilisateur avec les mêmes identifiants sur votre serveur que ceux définis dans la ligne ci-dessous (présentés dans le fichier /etc/guacamole/user-mapping.xml)
<authorize username="test" password="098f6bcd4621d373cade4e832627b4f6" encoding="md5" >
Donc dans le dernier cas cité au-dessus, vous aurez créé un utilisateur test avec le mot de passe test sur votre serveur Windows (c'est un exemple)
Si votre serveur est sur un domaine et que vous utilisez les valeurs ${GUAC_USERNAME} et ${GUAC_PASSWORD}. Il faudra créer l'utilisateur test avec le mot de passe test sur l'AD (ceci est un exemple). Dans ce cas, ajouter l'option ci-dessous au serveur que vous configurez.
<param name="domain">MonDomaine.lan</param>
Cela représente un risque pour la sécurité de votre AD à cause du chiffrement du mot de passe de l'utilisateur en MD5 dans le fichier user-mapping.xml
<user-mapping>
<authorize username="test" password="098f6bcd4621d373cade4e832627b4f6" encoding="md5" >
<!-- First authorized connection -->
<connection name="localhost">
<protocol>ssh</protocol>
<param name="hostname">localhost</param>
<param name="port">22</param>
<param name="username">${GUAC_USERNAME}</param>
<param name="password">${GUAC_PASSWORD}</param>
<param name="create-typescript-path">true</param>
<param name="typescript-path">/recording/ssh.localhost</param>
<param name="enable-sftp">true</param>
<param name="sftp-root-directory">/home/${GUAC_USERNAME}</param>
</connection>
<!-- Second authorized connection -->
<connection name="otherhost">
<protocol>vnc</protocol>
<param name="hostname">otherhost</param>
<param name="port">5900</param>
<param name="password">VNCPASS</param>
</connection>
<connection name="WinDC1">
<protocol>rdp</protocol>
<param name="hostname">192.168.1.52</param>
<param name="username">${GUAC_USERNAME}</param>
<param name="password">${GUAC_PASSWORD} </param>
<param name="domain">MonDomaine.lan</param>
</connection>
</authorize>
</user-mapping>
Explication de certaines options
<param name="create-typescript-path">true</param>
<param name="typescript-path">/recording/ssh.localhost</param>
<param name="enable-sftp">true</param>
<param name="sftp-root-directory">/home/yoann</param>
create-typescript-path crée le chemin à partir de l'emplacement indiqué (Il faudra créer le répertoire racine que vous indiquez)
typescript-path vous indiquez le chemin ou il enregistrera les fichiers
enable-sftp autorisez l'envoi et la réception de fichiers (vous pouvez personnaliser les autorisations d'envoi et de téléchargement avec les options suivantes sftp-disable-download et sftp-disable-upload)
sftp-root-directory indique où sera situé le sftp lors de l'ouverture du client
Ne vous limitez pas aux options citées dans ma documentation. Cliquez sur le lien qui suit et peaufiner vos règles avec les autres options disponibles dans la documentation de guacamole Option protocole guacamole.