<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>erwan.guillemard</title>
	<atom:link href="https://erwanguillemard.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://erwanguillemard.com</link>
	<description>Blog personnel</description>
	<lastBuildDate>Sat, 15 Aug 2026 09:38:45 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.4</generator>

<image>
	<url>https://erwanguillemard.com/wp-content/uploads/2024/02/cropped-Logo-sans-baseline-32x32.png</url>
	<title>erwan.guillemard</title>
	<link>https://erwanguillemard.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Apps – GUACAMOLE Partie 4 : Configuration</title>
		<link>https://erwanguillemard.com/apps-guacamole-partie-4-configuration/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sat, 15 Aug 2026 09:38:45 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Bastion]]></category>
		<category><![CDATA[Guacamole]]></category>
		<category><![CDATA[Securité]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=4022</guid>

					<description><![CDATA[Cette partie va être plutôt expéditive. Je ne veux pas m&#8217;amuser à décrire chaque option de chacune des parties de configuration. Je vais aller à l&#8217;essentiel de ce que je juge utile pour moi. Pour le reste, RTFM chers lecteurs. Paramètres Une fois authentifié avec un compte super-utilisateur rendons nous dans les paramètres. Je rentrerai...]]></description>
										<content:encoded><![CDATA[


<p class="wp-block-paragraph">Cette partie va être plutôt expéditive. Je ne veux pas m&rsquo;amuser à décrire chaque option de chacune des parties de configuration. Je vais aller à l&rsquo;essentiel de ce que je juge utile pour moi. Pour le reste, RTFM<sup data-fn="b10f93cc-b290-45c1-bd8a-56d7623ef881" class="fn"><a href="#b10f93cc-b290-45c1-bd8a-56d7623ef881" id="b10f93cc-b290-45c1-bd8a-56d7623ef881-link">1</a></sup> chers lecteurs.</p>



<h2 class="wp-block-heading">Paramètres</h2>



<p class="wp-block-paragraph">Une fois authentifié avec un compte super-utilisateur rendons nous dans les paramètres.</p>


<div class="kb-table-container kb-table-container4022_a1681a-3b wp-block-kadence-table"><table class="kb-table kb-table4022_a1681a-3b">
<tr class="kb-table-row kb-table-row4022_4f5443-68">
<td  class="kb-table-data kb-table-data4022_aad1b0-3c">

<p class="wp-block-paragraph">Nous pouvons constater qu&rsquo;il y a 6 catégories distinctes :</p>



<ul class="wp-block-list">
<li><strong><span style="text-decoration: underline;">Session Actives :</span></strong> Affichage qui permet à un auditeur, administrateur de vérifier les connexions en cours.</li>



<li><strong><span style="text-decoration: underline;">Historiques :</span></strong> Qui regroupe l&rsquo;ensemble des connexions qui ont eu lieu ainsi que les enregistrements vidéo si le plugins a été déployé.</li>



<li><strong><span style="text-decoration: underline;">Utilisateurs :</span></strong> Onglet qui permet d&rsquo;administrer et créé les comptes utilisateurs. C&rsquo;est également ici que nous pourrons choisir un utilisateur dans le cas d&rsquo;une jonction avec en source un AAD<sup data-fn="29c534ed-2a8e-4935-aff1-9c5a95fad891" class="fn"><a href="#29c534ed-2a8e-4935-aff1-9c5a95fad891" id="29c534ed-2a8e-4935-aff1-9c5a95fad891-link">2</a></sup> ou AD<sup data-fn="482302bf-34bd-4e3b-8653-aa2bfbe74d85" class="fn"><a href="#482302bf-34bd-4e3b-8653-aa2bfbe74d85" id="482302bf-34bd-4e3b-8653-aa2bfbe74d85-link">3</a></sup>.</li>



<li><strong><span style="text-decoration: underline;">Groupes :</span></strong> Permet de définir des groupes avec des droits particuliers selon les profils des utilisateurs.</li>



<li><strong><span style="text-decoration: underline;">Connexions :</span></strong> Permet de créer et d&rsquo;organiser les connexions aux ressources via les protocoles (Kubernets, VNC<sup data-fn="ef67d615-4753-4ca0-95bb-431d658b75d3" class="fn"><a href="#ef67d615-4753-4ca0-95bb-431d658b75d3" id="ef67d615-4753-4ca0-95bb-431d658b75d3-link">4</a></sup>, SSH<sup data-fn="ff45c763-21c4-4835-9322-30811a66a92e" class="fn"><a href="#ff45c763-21c4-4835-9322-30811a66a92e" id="ff45c763-21c4-4835-9322-30811a66a92e-link">5</a></sup>, RDP<sup data-fn="19afe666-d596-4abc-8da7-6d69c5bc7f69" class="fn"><a href="#19afe666-d596-4abc-8da7-6d69c5bc7f69" id="19afe666-d596-4abc-8da7-6d69c5bc7f69-link">6</a></sup>).</li>



<li><strong><span style="text-decoration: underline;">Préférences :</span></strong> Définie les paramètres communs comme le temps, la nature des clics souris, du clavier etc.</li>
</ul>

</td>

<td  class="kb-table-data kb-table-data4022_692323-25">

<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="933" height="858" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_905_Settings_0.jpg" alt="" class="wp-image-4027" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_905_Settings_0.jpg 933w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_905_Settings_0-300x276.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_905_Settings_0-768x706.jpg 768w" sizes="(max-width: 933px) 100vw, 933px" /></figure>

</td>
</tr>
</table></div>


<p class="wp-block-paragraph">Je rentrerai dans le détail uniquement pour les onglets <strong>Utilisateurs</strong>, <strong>Groupes</strong>, <strong>Connexions</strong>.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Je choisie ici d&rsquo;afficher la langue d&rsquo;affichage en Français, le fuseau horaire étant basé sur Paris. Cela a son importance pour les logs et le suivie des connexions aux ressources.<br><br>Concernant l&rsquo;apparence, il est possible d&rsquo;afficher les connexions récentes ainsi que le nombre des dernières ressources consulté. Il faut voir cela comme une zone de favoris.<br><br>En enfin, la possibilité de modifier son mot de passe.<br><br>Plus bas dans la section, il est possible de choisir le comportement du clavier et de la souris. La prise en compte de tous les éléments se fait par l&rsquo;action du bouton <strong>Enregistrez </strong>en bas de la section. </td><td class="has-text-align-center" data-align="center"><img decoding="async" width="550" height="501" class="wp-image-4030" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_910_Preferences_0.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_910_Preferences_0.jpg 942w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_910_Preferences_0-300x273.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_910_Preferences_0-768x700.jpg 768w" sizes="(max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<h2 class="wp-block-heading">Utilisateurs</h2>



<p class="wp-block-paragraph">Si nous cliquons sur l&rsquo;onglet Utilisateurs, nous avons une visibilité sur l&rsquo;ensemble des utilisateurs présents ainsi que les utilisateurs désactivés.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" width="935" height="858" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_907_User_0.jpg" alt="" class="wp-image-4039" style="aspect-ratio:1.089769257214504;width:374px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_907_User_0.jpg 935w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_907_User_0-300x275.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_907_User_0-768x705.jpg 768w" sizes="(max-width: 935px) 100vw, 935px" /></figure>
</div>


<p class="wp-block-paragraph">Cliquez sur <strong>Nouvel Utilisateur</strong>. Il est important de noter que les droits utilisateurs prévaux sur les droits du groupes. Ce qui nous permet alors de définir un standard pour un groupe puis s&rsquo;il y a besoin de faire une surcharge au niveau du profil de l&rsquo;utilisateur. Regardons ensemble les différentes sections de création d&rsquo;un compte utilisateur. </p>



<p class="wp-block-paragraph">Il est également à noter que certaines sections sont liées aux divers addons que j&rsquo;ai implémentés.</p>


<div class="kb-table-container kb-table-container4022_00c92d-ae wp-block-kadence-table"><table class="kb-table kb-table4022_00c92d-ae">
<tr class="kb-table-row kb-table-row4022_b65cee-6d">
<td  class="kb-table-data kb-table-data4022_bd8e1a-71">

<p class="wp-block-paragraph">Définissions l&rsquo;identifiant de connexion de notre utilisateur et son mot de passe.</p>



<p class="wp-block-paragraph">Il est possible de désactiver le compte.</p>

</td>

<td  class="kb-table-data kb-table-data4022_d5d01f-5c">

<p class="has-text-align-center wp-block-paragraph"><img loading="lazy" decoding="async" width="550" height="267" class="wp-image-4032" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_907_User_1.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_907_User_1.jpg 468w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_907_User_1-300x146.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></p>

</td>
</tr>

<tr class="kb-table-row kb-table-row4022_a9b007-fd">
<td  class="kb-table-data kb-table-data4022_25d968-59">

<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="472" height="237" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_907_User_2.jpg" alt="" class="wp-image-4034" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_907_User_2.jpg 472w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_907_User_2-300x151.jpg 300w" sizes="auto, (max-width: 472px) 100vw, 472px" /></figure>

</td>

<td  class="kb-table-data kb-table-data4022_9170e8-8e">

<p class="wp-block-paragraph">Plus en détail, il est nécessaire de saisir le nom et prénom de l&rsquo;utilisateur.</p>



<p class="wp-block-paragraph">Question de traçabilité. Il est important de définir le rôle en adéquation avec la matrice RACI<sup data-fn="08faca53-0923-41e1-a7f4-dc290d7429f3" class="fn"><a href="#08faca53-0923-41e1-a7f4-dc290d7429f3" id="08faca53-0923-41e1-a7f4-dc290d7429f3-link">7</a></sup>.</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row4022_9b8f7b-b0">
<td  class="kb-table-data kb-table-data4022_9e0ce4-be">

<p class="wp-block-paragraph">Cette partie présente par défaut permet de restreindre le compte de l&rsquo;utilisateur dans le temps.</p>



<p class="wp-block-paragraph">Par exemple, il est possible de définir une date de début et de fin de connexion.</p>



<p class="wp-block-paragraph">Plus bas, il sera possible d&rsquo;aller plus loin dans la restriction du compte grâce à l&rsquo;addon déployé plus tôt.</p>

</td>

<td  class="kb-table-data kb-table-data4022_fd3ce6-3c">

<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="471" height="295" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_907_User_3.jpg" alt="" class="wp-image-4035" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_907_User_3.jpg 471w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_907_User_3-300x188.jpg 300w" sizes="auto, (max-width: 471px) 100vw, 471px" /></figure>

</td>
</tr>

<tr class="kb-table-row kb-table-row4022_04a88a-ba">
<td  class="kb-table-data kb-table-data4022_7240e2-7d">

<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="446" height="197" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_907_User_4.jpg" alt="" class="wp-image-4036" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_907_User_4.jpg 446w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_907_User_4-300x133.jpg 300w" sizes="auto, (max-width: 446px) 100vw, 446px" /></figure>

</td>

<td  class="kb-table-data kb-table-data4022_09cac8-77">

<p class="wp-block-paragraph">Une section présente par l&rsquo;ajout de la MFA<sup data-fn="d0570a67-7fa5-4f69-afdb-cd39e99ab0a7" class="fn"><a href="#d0570a67-7fa5-4f69-afdb-cd39e99ab0a7" id="d0570a67-7fa5-4f69-afdb-cd39e99ab0a7-link">8</a></sup>. Nous pouvons choisir de ne pas appliquer de MFA pour le compte utilisateur.</p>



<p class="wp-block-paragraph">A l&rsquo;inverse, il est possible d&rsquo;activer la MFA pour un utilisateur. Cette dernière sera demandé lors de la première connexion de l&rsquo;utilisateur.</p>



<p class="wp-block-paragraph">Je vous renvoi à la partie sécurité qui traite de l&rsquo;implémentation du plugin MFA.</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row4022_a416c3-73">
<td  class="kb-table-data kb-table-data4022_dee54c-1d">

<p class="wp-block-paragraph">Comme énoncée précédemment, l&rsquo;ajout du plugin de restriction avancée permettra une meilleure granularité dans l&rsquo;accès aux ressources.</p>



<p class="wp-block-paragraph"></p>

</td>

<td  class="kb-table-data kb-table-data4022_ab1c6c-c4">

<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="523" height="272" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_907_User_5.jpg" alt="" class="wp-image-4037" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_907_User_5.jpg 523w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_907_User_5-300x156.jpg 300w" sizes="auto, (max-width: 523px) 100vw, 523px" /></figure>

</td>
</tr>

<tr class="kb-table-row kb-table-row4022_868a55-25">
<td  class="kb-table-data kb-table-data4022_ed1684-a3">

<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="446" height="336" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_907_User_6.jpg" alt="" class="wp-image-4038" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_907_User_6.jpg 446w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_907_User_6-300x226.jpg 300w" sizes="auto, (max-width: 446px) 100vw, 446px" /></figure>

</td>

<td  class="kb-table-data kb-table-data4022_50f567-fa">

<p class="wp-block-paragraph">J&rsquo;ai l&rsquo;impression de me répeter et cela m&rsquo;agace. Peut-être un peu de fatigue de ma part je pense et j&rsquo;avoue vouloir passer à autre chose. Cela fait un moment que je traite ce sujet.</p>



<p class="wp-block-paragraph">Bref, nous retrouvons ici les droits listés dans notre matrice RACI.</p>



<p class="wp-block-paragraph">Personnellement, je ne définie pas de rôle sur le profil utilisateur mais directement sur le groupe. A l&rsquo;exception du compte bris de glace. Il est a noter qu&rsquo;un profil utilisateur standard ne doit pas avoir de permission.</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row4022_8f5ffe-d2">
<td  class="kb-table-data kb-table-data4022_7e6d23-80">

<p class="wp-block-paragraph">Cette dernière section permet de donner l&rsquo;accès aux ressources à l&rsquo;utilisateurs. Comme dit précédemment, les droits peuvent être définie au niveau du groupe. Pour ma part, je définie les permissions à des connexions uniquement dans le cas de surcharge.</p>



<p class="wp-block-paragraph">Comprendre dans cette dernière phrase, réaliser un exception.</p>

</td>

<td  class="kb-table-data kb-table-data4022_9b99b6-d0">

<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="586" height="227" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_907_User_7.jpg" alt="" class="wp-image-4033" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_907_User_7.jpg 586w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_907_User_7-300x116.jpg 300w" sizes="auto, (max-width: 586px) 100vw, 586px" /></figure>

</td>
</tr>
</table></div>


<h2 class="wp-block-heading">Groupes</h2>



<p class="wp-block-paragraph">L&rsquo;onglet groupe est assez pratique. L&rsquo;usage de groupe utilisateur permet de définir et d&rsquo;appliquer un ensemble de politique de connexion aux membres appartenant à ce groupe. </p>



<p class="has-text-align-center wp-block-paragraph"><strong>Amazing Capt&rsquo;ain Obvious&#8230; T&rsquo;en as d&rsquo;autres des comme ça ?</strong></p>



<p class="has-text-align-left wp-block-paragraph">C&rsquo;est toujours bon d&rsquo;enfoncer des portes ouvertes. Là où nous pourrons tirer pleine puissance des groupes ce trouve dans la gestion des éditeurs et autres prestataires externes. Mais également pour ne donner un accès qu&rsquo;à un service à une ressource. Dans les deux cas, nous nous assurerons que le niveau de sécurité est le même pour tout le monde. Si nous avons besoin de faire une exception, il faudra alors faire une surcharge dans le profil de l&rsquo;utilisateur.</p>


<div class="kb-table-container kb-table-container4022_ccfb5a-3d wp-block-kadence-table"><table class="kb-table kb-table4022_ccfb5a-3d">
<tr class="kb-table-row kb-table-row4022_bda785-5f">
<td  class="kb-table-data kb-table-data4022_185db3-0b">

<p class="wp-block-paragraph">Pour commencer, définissons un nom de groupe parlant. Il ne faudrait se rajouter du travail avec quelque chose qui doit nous faire gagner du temp&#8230;</p>

</td>

<td  class="kb-table-data kb-table-data4022_f30d74-30">

<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="503" height="165" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_908_Group_1.jpg" alt="" class="wp-image-4045" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_908_Group_1.jpg 503w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_908_Group_1-300x98.jpg 300w" sizes="auto, (max-width: 503px) 100vw, 503px" /></figure>

</td>
</tr>

<tr class="kb-table-row kb-table-row4022_28ba31-47">
<td  class="kb-table-data kb-table-data4022_c38576-fc">

<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="502" height="281" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_908_Group_2.jpg" alt="" class="wp-image-4046" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_908_Group_2.jpg 502w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_908_Group_2-300x168.jpg 300w" sizes="auto, (max-width: 502px) 100vw, 502px" /></figure>

</td>

<td  class="kb-table-data kb-table-data4022_00191a-10">

<p class="wp-block-paragraph">Comme énoncé précédemment pour la partie utilisateur, l&rsquo;ajout du plugin de restriction avancée permettra une meilleure granularité dans l&rsquo;accès aux ressources.</p>



<p class="wp-block-paragraph">Dans notre cas, cela appliqué à l&rsquo;ensemble de tous les membres.</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row4022_623525-af">
<td  class="kb-table-data kb-table-data4022_801723-9d">

<p class="wp-block-paragraph">Par défaut l&rsquo;authentification MFA est activée. Toutefois, nous pouvons la désactiver pour l&rsquo;ensemble des membres.</p>

</td>

<td  class="kb-table-data kb-table-data4022_151512-72">

<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="282" height="132" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_908_Group_3.jpg" alt="" class="wp-image-4047"/></figure>

</td>
</tr>

<tr class="kb-table-row kb-table-row4022_b7c236-da">
<td  class="kb-table-data kb-table-data4022_5ab416-e1">

<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="430" height="307" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_908_Group_4.jpg" alt="" class="wp-image-4048" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_908_Group_4.jpg 430w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_908_Group_4-300x214.jpg 300w" sizes="auto, (max-width: 430px) 100vw, 430px" /></figure>

</td>

<td  class="kb-table-data kb-table-data4022_2f9cb5-47">

<p class="wp-block-paragraph"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">[BIS REPETITA]</mark></strong></p>



<p class="wp-block-paragraph">Oui ça me soule 🙂</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">J&rsquo;ai l&rsquo;impression de me répéter et cela m&rsquo;agace. Peut-être un peu de fatigue de ma part je pense et j&rsquo;avoue vouloir passer à autre chose. Cela fait un moment que je traite ce sujet.</p>



<p class="wp-block-paragraph">Bref, nous retrouvons ici les droits listés dans notre matrice RACI.</p>



<p class="wp-block-paragraph">Personnellement, je ne définie pas de rôle sur le profil utilisateur mais directement sur le groupe. A l&rsquo;exception du compte bris de glace. Il est a noter qu&rsquo;un profil utilisateur standard ne doit pas avoir de permission.</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row4022_e450cc-73">
<td  class="kb-table-data kb-table-data4022_486f76-f2">

<p class="wp-block-paragraph">Nous ajoutons nos utilisateurs et nous les voyons comme membres.</p>

</td>

<td  class="kb-table-data kb-table-data4022_37549e-93">

<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="627" height="141" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_908_Group_5.jpg" alt="" class="wp-image-4049" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_908_Group_5.jpg 627w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_908_Group_5-300x67.jpg 300w" sizes="auto, (max-width: 627px) 100vw, 627px" /></figure>

</td>
</tr>

<tr class="kb-table-row kb-table-row4022_d02a42-ef">
<td  class="kb-table-data kb-table-data4022_43ad7d-85">

<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="657" height="302" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_908_Group_6.jpg" alt="" class="wp-image-4050" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_908_Group_6.jpg 657w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_908_Group_6-300x138.jpg 300w" sizes="auto, (max-width: 657px) 100vw, 657px" /></figure>

</td>

<td  class="kb-table-data kb-table-data4022_225e9e-04">

<p class="wp-block-paragraph">Nous choisissons les ressources auxquelles le groupe doit avoir accès.</p>

</td>
</tr>
</table></div>


<h2 class="wp-block-heading">Connexions</h2>



<p class="wp-block-paragraph">Cette partie est de loin l&rsquo;une des plus intéressante et des plus complexes. Je ne détaillerai que les connexions de type SSH et RDP.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>L&rsquo;une des premières choses à réaliser est l&rsquo;arborescence de notre système.<br>Pour faire simple je vais reprendre partiellement mon infrastructure définie dans ma VCSA<sup data-fn="56586a69-6de3-4f58-bac8-2c415a9e0ffd" class="fn"><a href="#56586a69-6de3-4f58-bac8-2c415a9e0ffd" id="56586a69-6de3-4f58-bac8-2c415a9e0ffd-link">9</a></sup> et l&rsquo;adapter en conséquence.<br><br>Il est également possible de définir quelques paramètres au niveau des groupes comme l&rsquo;extension de restriction d&rsquo;accès et le nombre de connexion maximum et de connexion maximum par utilisateur. Nous retrouverons ces paramètres dans la création d&rsquo;une ressources.</td><td><img loading="lazy" decoding="async" width="550" height="504" class="wp-image-4052" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_909_Ressources_0.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_909_Ressources_0.jpg 941w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_909_Ressources_0-300x275.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_909_Ressources_0-768x704.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Attention, le tableau ci-dessous peut entrainer des nausées ainsi que des risques fatals d&rsquo;indigestions. Nous demandons aux lecteurs qui ne seraient pas près de ne courir aucun risque et au besoin de se faire accompagner 🙂</p>


<div class="kb-table-container kb-table-container4022_62f1aa-40 wp-block-kadence-table"><table class="kb-table kb-table4022_62f1aa-40">
<tr class="kb-table-row kb-table-row4022_014fa8-6e">
<td  class="kb-table-data kb-table-data4022_623059-15">

<p class="wp-block-paragraph">Donnez un nom parlant à votre ressource.<br>Généralement le nom de la machine.</p>



<p class="wp-block-paragraph">Définissez l&#8217;emplacement où va être stocker la ressource, puis le type de Protocole (Kubernetes, RDP, SSH, Telnet, VNC).</p>

</td>

<td  class="kb-table-data kb-table-data4022_4f1d54-e1">

<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="315" height="116" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_911_Connexion_0.jpg" alt="" class="wp-image-4054" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_911_Connexion_0.jpg 315w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_911_Connexion_0-300x110.jpg 300w" sizes="auto, (max-width: 315px) 100vw, 315px" /></figure>

</td>
</tr>

<tr class="kb-table-row kb-table-row4022_c72d4c-b0">
<td  class="kb-table-data kb-table-data4022_27631b-12">

<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="527" height="141" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_911_Connexion_1.jpg" alt="" class="wp-image-4055" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_911_Connexion_1.jpg 527w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_911_Connexion_1-300x80.jpg 300w" sizes="auto, (max-width: 527px) 100vw, 527px" /></figure>

</td>

<td  class="kb-table-data kb-table-data4022_a1a67e-1c">

<p class="wp-block-paragraph">Vous pouvez dans cette section définir le nombre maximum de connexion sur la ressource ainsi que le nombre de connexion par utilisateur.</p>



<p class="wp-block-paragraph">Là, j&rsquo;ai déjà définie cela au niveau du groupe. Je ne viens à surcharger et définir celui ci que dans le cas des ressources sensibles.</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row4022_2cbc6c-05">
<td  class="kb-table-data kb-table-data4022_7f9712-2a">

<p class="wp-block-paragraph">Si nous avions montée une infrastructure HA Guacamole, nous aurions pu définir une répartition de charge entre les serveurs Guacamole. Perso, ce n&rsquo;est pas mon cas&#8230;</p>

</td>

<td  class="kb-table-data kb-table-data4022_0cd5f6-10">

<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="519" height="137" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_911_Connexion_2.jpg" alt="" class="wp-image-4056" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_911_Connexion_2.jpg 519w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_911_Connexion_2-300x79.jpg 300w" sizes="auto, (max-width: 519px) 100vw, 519px" /></figure>

</td>
</tr>

<tr class="kb-table-row kb-table-row4022_d669c9-9c">
<td  class="kb-table-data kb-table-data4022_dea6e7-b7">

<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="526" height="224" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_911_Connexion_3.jpg" alt="" class="wp-image-4057" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_911_Connexion_3.jpg 526w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_911_Connexion_3-300x128.jpg 300w" sizes="auto, (max-width: 526px) 100vw, 526px" /></figure>

</td>

<td  class="kb-table-data kb-table-data4022_1d6823-fd">

<p class="wp-block-paragraph"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">[BIS REPETITA]</mark></strong></p>



<p class="wp-block-paragraph">&#8230;</p>



<p class="wp-block-paragraph">Nan, mais je pense que c&rsquo;est bon là. On a compris à quoi sert cette partie ?</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row4022_d8f9a0-58">
<td  class="kb-table-data kb-table-data4022_8c86d1-ec">

<p class="wp-block-paragraph">Si nous avons implémenter la partie PROXY Guacamole, c&rsquo;est ici qu&rsquo;il faudra renseigner les paramètres. Toutefois est dans le cadre de mon projet et de l&rsquo;architecture présentée et en place, je peux me passer de la fonctionnalité.</p>

</td>

<td  class="kb-table-data kb-table-data4022_f76bb2-ef">

<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="474" height="161" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_911_Connexion_4.jpg" alt="" class="wp-image-4058" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_911_Connexion_4.jpg 474w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_911_Connexion_4-300x102.jpg 300w" sizes="auto, (max-width: 474px) 100vw, 474px" /></figure>

</td>
</tr>

<tr class="kb-table-row kb-table-row4022_2e0b3e-08">
<td  class="kb-table-data kb-table-data4022_fef7df-d5">

<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="755" height="868" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_911_Connexion_5.jpg" alt="" class="wp-image-4059" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_911_Connexion_5.jpg 755w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_911_Connexion_5-261x300.jpg 261w" sizes="auto, (max-width: 755px) 100vw, 755px" /></figure>

</td>

<td  class="kb-table-data kb-table-data4022_c7dfad-05">

<p class="wp-block-paragraph">La partie qui nous intéresse vraiment 🙂</p>



<p class="wp-block-paragraph">Renseignons l&rsquo;IP ou le nom de notre ressource puis le port de connexion en adéquation avec le protocole de connexion saisie plus haut.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Il est également possible de renseigner directement les identifiants et mot de passe sur la ressource. Vous vous en doutez niveau sécurité, il est indispensable de compléter les champs <strong>#MDR</strong>.</p>



<p class="wp-block-paragraph">Toutefois, vous pouvez saisir le nom de domaine.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Ne modifier le mode de sécurité que si vous l&rsquo;avez modifié côté serveur. Et dans le cas de certificat autosigné, cochez la cas pour ignorer le certificat serveur.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Si vous utilisez une TS GW<sup data-fn="3379e205-0cdb-4630-be44-501902216116" class="fn"><a href="#3379e205-0cdb-4630-be44-501902216116" id="3379e205-0cdb-4630-be44-501902216116-link">10</a></sup>, renseigner les champs intelligemment. Moi, je n&rsquo;en ai pas. Du moins pour l&rsquo;instant.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Dans les paramètres de base, vous pouvez faire la demande d&rsquo;exécution de programme au démarrage, de définir le nom du client, le type de clavier et la zone de temps.</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row4022_e9d5b3-fd">
<td  class="kb-table-data kb-table-data4022_8f5e6c-a4">

<p class="wp-block-paragraph">Nous retrouvons ici les caractéristiques présent dans la configuration d&rsquo;un raccourcie RDP classique, l&rsquo;affichage, le presse papier et la gestion des périphériques externes.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Je passerai vite sur cette partie. Ce qui pour moi doit être activer au minima est de forcer la compression sans perte pour l&rsquo;affichage, et de désactiver la copie si l&rsquo;usage est pour des utilisateurs et ce afin que nous admin ayons la main sur l&rsquo;activité des prestataires.</p>



<p class="wp-block-paragraph">En dernier lieux de ne pas faire de redirection des périphériques. Nous ne devons pas avoir confiance ni ne faire confiance aux postes clients.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Gardons le principe tel Greg House que tout le monde ment !</p>

</td>

<td  class="kb-table-data kb-table-data4022_81ea75-42">

<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="596" height="735" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_911_Connexion_6.jpg" alt="" class="wp-image-4060" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_911_Connexion_6.jpg 596w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_911_Connexion_6-243x300.jpg 243w" sizes="auto, (max-width: 596px) 100vw, 596px" /></figure>

</td>
</tr>

<tr class="kb-table-row kb-table-row4022_4260ff-c2">
<td  class="kb-table-data kb-table-data4022_7c473e-43">

<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="534" height="648" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_911_Connexion_7.jpg" alt="" class="wp-image-4061" style="aspect-ratio:0.8240929833850188;width:477px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_911_Connexion_7.jpg 534w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_911_Connexion_7-247x300.jpg 247w" sizes="auto, (max-width: 534px) 100vw, 534px" /></figure>

</td>

<td  class="kb-table-data kb-table-data4022_1619f7-b2">

<p class="wp-block-paragraph">Là nous pouvons encore améliorer notre expérience sur la prise en main à distance sur notre ressource. Il est à noter qu&rsquo;il y a une notion de curseur entre le confort et la performance utilisateur.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Une option avec laquelle je souhaiterai jouer et l&rsquo;option RemoteApp. J&rsquo;ai pour idée de me faire un petit projet prochainement et Guacamole pourrait bien m&rsquo;aider. 🙂</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Le reste, à vous de vous pencher dessus si cela vous intéresse (ou autrement dit, démer*ez vous 🙂 )  </p>

</td>
</tr>

<tr class="kb-table-row kb-table-row4022_00a6ac-00">
<td  class="kb-table-data kb-table-data4022_4d06d7-8a">

<p class="wp-block-paragraph">La partie SFTP<sup data-fn="3d947299-7949-46e8-9908-6e7bcaa5f998" class="fn"><a href="#3d947299-7949-46e8-9908-6e7bcaa5f998" id="3d947299-7949-46e8-9908-6e7bcaa5f998-link">11</a></sup>, pas besoin je passe mon tour. Pour moi cela se fait via le rebond et pas autrement.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Mais la partie Enregistrement Ecran ça c&rsquo;est intéressant. Guacamole (comme Systancia) offre la possibilité de tracer l&rsquo;ensemble des actions réalisés par un utilisateur lors d&rsquo;une ouverture de session. </p>



<p class="wp-block-paragraph">C&rsquo;est à dire enregistrer les frapes claviers et la session vidéo.</p>



<p class="wp-block-paragraph">Cela sera enregistré sous le format vidéo <strong>.guac</strong> sur le serveur.</p>



<p class="wp-block-paragraph">Il nous suffit sur la ressource de renseigner dans le chemin et dans le nom de l&rsquo;enregistrement les valeurs :</p>



<ul class="wp-block-list">
<li class="has-small-font-size"><strong>/mnt/guac_records/recordings/${HISTORY_UUID}</strong></li>



<li class="has-small-font-size"><strong>${GUAC_USERNAME}-RDP_${GUAC_DATE}-${GUAC_TIME}.guac</strong></li>
</ul>



<p class="wp-block-paragraph">Et de cocher la case créér automatique un chemin d&rsquo;enregistrement.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">A ce jour je ne note qu&rsquo;un dysfonctionnement entre la saisie des évènements clavier et vidéo qui nécessite un peu de temps de ma part.</p>



<p class="wp-block-paragraph">Un point qui nécessitera un article annexe, bonus sera la conversion des fichiers vidéos <strong>.guac </strong>en <strong>.mp4</strong>.</p>

</td>

<td  class="kb-table-data kb-table-data4022_883a4a-4f">

<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="639" height="876" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_911_Connexion_8.jpg" alt="" class="wp-image-4062" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_911_Connexion_8.jpg 639w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_911_Connexion_8-219x300.jpg 219w" sizes="auto, (max-width: 639px) 100vw, 639px" /></figure>

</td>
</tr>

<tr class="kb-table-row kb-table-row4022_fa7d1b-47">
<td  class="kb-table-data kb-table-data4022_e53b65-98">

<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="662" height="593" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_911_Connexion_9.jpg" alt="" class="wp-image-4066" style="aspect-ratio:1.0278293135435992;width:475px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_911_Connexion_9.jpg 662w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_911_Connexion_9-300x269.jpg 300w" sizes="auto, (max-width: 662px) 100vw, 662px" /></figure>

</td>

<td  class="kb-table-data kb-table-data4022_fa858f-c0">

<p class="wp-block-paragraph">Enfin, nous voilà au bout de notre configuration de notre ressource. J&rsquo;avoue que l&rsquo;interface n&rsquo;est pas si sexy que ça, mais est-cela que nous attendons ? Je ne pense pas 🙂 </p>



<p class="wp-block-paragraph">Bref, encore une fonctionnalités avec laquelle je n&rsquo;ai pas joué, le WOL<sup data-fn="6e95ec82-e240-444c-a712-4898aed8f2b8" class="fn"><a href="#6e95ec82-e240-444c-a712-4898aed8f2b8" id="6e95ec82-e240-444c-a712-4898aed8f2b8-link">12</a></sup>. Ce dernier peut s&rsquo;avérer pratique pour redémarrer un serveur éteint. Je suis partagé sur l&rsquo;usage car j&rsquo;ai souvenir dans une ancienne vie professionnelle de dérive lié à l&rsquo;absence de patiente et amateurisme de certain collaborateur.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Je préfère donc me garder un accès de secours si besoin et gérer l&rsquo;état d&rsquo;une ressource virtualisée par l&rsquo;interface de virtualisation peut importe son nom. <br>Pour finir, l&rsquo;historique de connexion à la ressource.</p>

</td>
</tr>
</table></div>


<p class="wp-block-paragraph">Je passe la notion de partage de profil. Pour moi, il ne devrait pas être possible à un simple utilisateur de réaliser ce type d&rsquo;action.</p>



<p class="wp-block-paragraph">Un point remonté qui suscite de la frustration, j&rsquo;avais déjà remonté ce point au support Systancia à l&rsquo;époque et me voilà de nouveau confronté à celui-ci. Lorsque l&rsquo;on utilise la MFA sur un système GNU/Linux pour s&rsquo;authentifier, ce module PAM<sup data-fn="3cac6760-70f9-4611-8601-c85589151e65" class="fn"><a href="#3cac6760-70f9-4611-8601-c85589151e65" id="3cac6760-70f9-4611-8601-c85589151e65-link">13</a></sup> rentre en conflit avec la solution de bastion qui ne pouvant et ne sachant interpréter le retour crash et retourne un TimeOut. La seule solution est que j&rsquo;ai trouvé pour l&rsquo;instant et soit de désactiver la MFA ou rendre cette dernière facultatif. A voir si j&rsquo;arrive à palier à ce problème.</p>



<p class="wp-block-paragraph">Voilà, nous arrivons à la fin de notre périple. Je vais réaliser une courte démonstration vidéo qui comme d&rsquo;habitude fera une synthèse de l&rsquo;article et permettra de voir le fonctionnement de l&rsquo;appliance Guacamole.</p>



<h2 class="wp-block-heading">Sources</h2>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><a href="https://erwanguillemard.com/apps-guacamole-partie-3-securisation/">Guacamole : Sécurisation<br>&lt;-</a></td><td class="has-text-align-center" data-align="center"><a href="https://erwanguillemard.com/apps-guacamole/">Apps Guacamole</a></td><td class="has-text-align-center" data-align="center">Guacamole : Démonstration <br>-&gt;</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>


<ol class="wp-block-footnotes"><li id="b10f93cc-b290-45c1-bd8a-56d7623ef881"><strong>RTFM :</strong> Read The Fuc**ng Manual <a href="#b10f93cc-b290-45c1-bd8a-56d7623ef881-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="29c534ed-2a8e-4935-aff1-9c5a95fad891"><strong>AAD :</strong> Azure Active Directory <a href="#29c534ed-2a8e-4935-aff1-9c5a95fad891-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="482302bf-34bd-4e3b-8653-aa2bfbe74d85"><strong>AD :</strong> Active Directory <a href="#482302bf-34bd-4e3b-8653-aa2bfbe74d85-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="ef67d615-4753-4ca0-95bb-431d658b75d3"><strong>VNC :</strong> Virtual Network Computing <a href="#ef67d615-4753-4ca0-95bb-431d658b75d3-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="ff45c763-21c4-4835-9322-30811a66a92e"><strong>SSH :</strong> Secure SHell <a href="#ff45c763-21c4-4835-9322-30811a66a92e-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="19afe666-d596-4abc-8da7-6d69c5bc7f69"><strong>RDP :</strong> Remote Desktop Protocol <a href="#19afe666-d596-4abc-8da7-6d69c5bc7f69-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="08faca53-0923-41e1-a7f4-dc290d7429f3"><strong>Matrice RACI :</strong>  <a href="#08faca53-0923-41e1-a7f4-dc290d7429f3-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="d0570a67-7fa5-4f69-afdb-cd39e99ab0a7"><strong>MFA :</strong> Multi Factors Authentification <a href="#d0570a67-7fa5-4f69-afdb-cd39e99ab0a7-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="56586a69-6de3-4f58-bac8-2c415a9e0ffd"><strong>VCSA :</strong> VCenter Server Appliance <a href="#56586a69-6de3-4f58-bac8-2c415a9e0ffd-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="3379e205-0cdb-4630-be44-501902216116"><strong>TS GW :</strong> Terminal Server GateWay <a href="#3379e205-0cdb-4630-be44-501902216116-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li><li id="3d947299-7949-46e8-9908-6e7bcaa5f998"><strong>SFTP :</strong> Secure File Transfert Protocol <a href="#3d947299-7949-46e8-9908-6e7bcaa5f998-link" aria-label="Aller à la note de bas de page 11">↩︎</a></li><li id="6e95ec82-e240-444c-a712-4898aed8f2b8"><strong>WOL :</strong> Wake On Lan <a href="#6e95ec82-e240-444c-a712-4898aed8f2b8-link" aria-label="Aller à la note de bas de page 12">↩︎</a></li><li id="3cac6760-70f9-4611-8601-c85589151e65"><strong>PAM : </strong>Pluggable Authentication Modules  <a href="#3cac6760-70f9-4611-8601-c85589151e65-link" aria-label="Aller à la note de bas de page 13">↩︎</a></li></ol>


<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Apps &#8211; GUACAMOLE Partie 3 : Sécurisation</title>
		<link>https://erwanguillemard.com/apps-guacamole-partie-3-securisation/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sat, 15 Aug 2026 09:38:35 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Bastion]]></category>
		<category><![CDATA[Guacamole]]></category>
		<category><![CDATA[Securité]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3875</guid>

					<description><![CDATA[La sécurité, encore et toujours un enjeu des organisations et des mecs paumés comme moi. Certains passent leurs routes d&#8217;autres se penchent sur le rebord du monde pour en admirer la poésie. C&#8217;est du moins là que je pense être. Je n&#8217;ai pas la prétention de me penser au dessus des autres et encore moins...]]></description>
										<content:encoded><![CDATA[


<p class="wp-block-paragraph">La sécurité, encore et toujours un enjeu des organisations et des mecs paumés comme moi. Certains passent leurs routes d&rsquo;autres se penchent sur le rebord du monde pour en admirer la poésie. C&rsquo;est du moins là que je pense être.</p>



<p class="wp-block-paragraph">Je n&rsquo;ai pas la prétention de me penser au dessus des autres et encore moins de mes pairs, croyez-moi. Dans l&rsquo;fond je ne suis qu&rsquo;un type qui se grille les neurones à vouloir faire bien en me soulant de la complexité des informations mathématiques. 🙂</p>



<p class="wp-block-paragraph">L&rsquo;objectif de cette partie est de sécuriser l&rsquo;ensemble de notre système GUACAMOLE et de finir en beauté tel l&rsquo;illustre taureau épargné par cette tauromachie de rigueur, de beauté. <a href="https://www.youtube.com/watch?v=2HyLN4PwfkA&amp;list=RD2HyLN4PwfkA&amp;start_radio=1">Venga Venga</a> cher lecteur !</p>



<h2 class="wp-block-heading">Réseaux</h2>



<p class="wp-block-paragraph">La première question que je me suis posé est, comment rendre notre service sécurisé si nous le publions ? Pour l&rsquo;instant, notre service est publié via le protocole HTTP<sup data-fn="1d1b664b-fe9b-4f72-b7ce-8b0d333554eb" class="fn"><a href="#1d1b664b-fe9b-4f72-b7ce-8b0d333554eb" id="1d1b664b-fe9b-4f72-b7ce-8b0d333554eb-link">1</a></sup> sur le port 8080 par défaut.</p>



<p class="wp-block-paragraph">La réponse à tous les maux reste de passer par un reverse proxy. Donc par NGINX. Toutefois cela ne résout pas le problème du certificat. Publier un service avec un certificat autosigné revient à s&rsquo;enchainer les téquilas frappées et s&rsquo;étonner d&rsquo;être malade à cause du citron&#8230;</p>



<p class="wp-block-paragraph">Pour se faire j&rsquo;ai fait le choix en l&rsquo;absence de fond pour acquérir un certificat wildcard de passer par un certificat Let&rsquo;s Encrypt. Toutefois, j&rsquo;ai été embêté Je n&rsquo;ai qu&rsquo;une IP publique à la maison qui n&rsquo;est pas statique&#8230;</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Erwanadoo, où le SysAdmin qui aime se faire du mal&#8230;</strong> </p>



<p class="has-text-align-center wp-block-paragraph">(Vous avez le jeu de mot avec feu l&rsquo;opérateur Wanadoo ? 🙂 <strong><em>#enfonceuneporteouverte</em></strong> )</p>



<p class="wp-block-paragraph">Bref, plus sérieusement, j&rsquo;ai plusieurs dilemmes :</p>



<ul class="wp-block-list">
<li>IP publique dynamique</li>



<li>LiveBox non brigeable (merci mon FAI<sup data-fn="d8064460-ab9c-4361-be16-8b9e269c6ea1" class="fn"><a href="#d8064460-ab9c-4361-be16-8b9e269c6ea1" id="d8064460-ab9c-4361-be16-8b9e269c6ea1-link">2</a></sup>)</li>



<li>Publication du port 443 déjà utilisé</li>
</ul>



<p class="wp-block-paragraph">Le premier point, je vais répondre à ce dernier en passant par un DynDNS<sup data-fn="da6a3665-8bb8-4564-81de-6944a53fa63f" class="fn"><a href="#da6a3665-8bb8-4564-81de-6944a53fa63f" id="da6a3665-8bb8-4564-81de-6944a53fa63f-link">3</a></sup> facile comme tout et pas besoin de faire un article.</p>



<p class="wp-block-paragraph">Pour le second point il suffit de faire un double NAT<sup data-fn="3f8f4f63-2794-4c80-81b9-6c4df62451df" class="fn"><a href="#3f8f4f63-2794-4c80-81b9-6c4df62451df" id="3f8f4f63-2794-4c80-81b9-6c4df62451df-link">4</a></sup>/PAT<sup data-fn="efc6f9f4-1895-49d7-9093-503ac015744b" class="fn"><a href="#efc6f9f4-1895-49d7-9093-503ac015744b" id="efc6f9f4-1895-49d7-9093-503ac015744b-link">5</a></sup>. Dans l&rsquo;idée, je vais publier le port 8443 (HTTPS<sup data-fn="06bc6f10-60cf-4a95-9e53-418dd9bd9030" class="fn"><a href="#06bc6f10-60cf-4a95-9e53-418dd9bd9030" id="06bc6f10-60cf-4a95-9e53-418dd9bd9030-link">6</a></sup>) puis faire un NAT vers mon UTM<sup data-fn="d37ad423-ddde-4a53-9efd-f26627e564d0" class="fn"><a href="#d37ad423-ddde-4a53-9efd-f26627e564d0" id="d37ad423-ddde-4a53-9efd-f26627e564d0-link">7</a></sup> qui réalisera un PAT vers mon daemon nginx en 443 qui finalement via son reverse proxy redirigera le flux vers le protocole HTTP sur le port 8080. Vous avez suivi ? Non ? Bon alors je vous fais un petit schéma&#8230; 🙂</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="401" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_903_nginxprotect_3-1024x401.jpg" alt="" class="wp-image-3960" style="aspect-ratio:2.5536915932139133;width:669px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_903_nginxprotect_3-1024x401.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_903_nginxprotect_3-300x117.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_903_nginxprotect_3-768x301.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_903_nginxprotect_3-1536x602.jpg 1536w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_903_nginxprotect_3.jpg 1698w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Pour le dernier point, c&rsquo;est plus pénible&#8230; Effectivement, je publie déjà quelques choses sur le port <strong>443</strong>. Pour générer un certificat Let&rsquo;s Encrypt il faut impérativement que les ports <strong>80</strong> (<strong>HTTP</strong>) et <strong>443 </strong>(<strong>HTTPS</strong>) soient disponibles. En cherchant un peu, j&rsquo;ai vu qu&rsquo;il était possible de passer par l&rsquo;API<sup data-fn="874d7f0f-180e-4855-9334-5b4b5ea7bdfd" class="fn"><a href="#874d7f0f-180e-4855-9334-5b4b5ea7bdfd" id="874d7f0f-180e-4855-9334-5b4b5ea7bdfd-link">8</a></sup> de mon <strong>NDD </strong>(OVH en l&rsquo;occurrence) et de réaliser le challenge DCV<sup data-fn="f85f6906-3604-4087-a9c2-2501348606b6" class="fn"><a href="#f85f6906-3604-4087-a9c2-2501348606b6" id="f85f6906-3604-4087-a9c2-2501348606b6-link">9</a></sup> et générer ainsi le certificat pour mon bastion.</p>



<h3 class="wp-block-heading">Certificats</h3>



<p class="wp-block-paragraph">L&rsquo;installation du package <strong>python3-certbot-nginx</strong> n&rsquo;est pour le coup pas obligatoire si vous utilisez le port 443.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-74ba434c2cccd506427871ff3547080b"><code><strong>$ sudo dnf install certbot python3-certbot-nginx python3-certbot-dns-ovh</strong></code></pre>


<div class="kb-gallery-wrap-id-3875_878ca9-f9 alignnone wp-block-kadence-advancedgallery"><div class="kb-gallery-ul kb-gallery-non-static kb-gallery-type-carousel kb-gallery-id-3875_878ca9-f9 kb-gallery-caption-style-bottom-hover kb-gallery-filter-none" data-image-filter="none" data-lightbox-caption="true"><div class="kt-blocks-carousel splide kt-carousel-container-dotstyle-dark kt-carousel-arrowstyle-whiteondark kt-carousel-dotstyle-dark kb-slider-group-arrow kb-slider-arrow-position-center" data-columns-xxl="2" data-columns-xl="2" data-columns-md="2" data-columns-sm="2" data-columns-xs="1" data-columns-ss="1" data-slider-anim-speed="100" data-slider-scroll="1" data-slider-arrows="true" data-slider-dots="true" data-slider-hover-pause="false" data-slider-auto="" data-slider-speed="7000" data-slider-gap="0px" data-slider-gap-tablet="0px" data-slider-gap-mobile="0px" data-show-pause-button="false" data-slider-label="Photo Gallery Carousel"><div class="splide__track"><ul class="kt-blocks-carousel-init kb-gallery-carousel splide__list"><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land32 kb-has-image-ratio-land32" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_002.jpg" width="942" height="527" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_002.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_002.jpg" data-id="3962" class="wp-image-3962 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_002.jpg 942w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_002-300x168.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_002-768x430.jpg 768w" sizes="auto, (max-width: 942px) 100vw, 942px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land32 kb-has-image-ratio-land32" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_001.jpg" width="942" height="799" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_001.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_001.jpg" data-id="3961" class="wp-image-3961 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_001.jpg 942w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_001-300x254.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_001-768x651.jpg 768w" sizes="auto, (max-width: 942px) 100vw, 942px" /></div></div></figure></div></div></li></ul></div></div></div></div>


<p class="wp-block-paragraph">Toujours dans mon cas pratique, il me faut maintenant définir mon couple de clé/secret API sur mon registrar. Pour comprendre le fonctionnement, lors de la génération du certificat, nous allons générer un enregistrement TXT<sup data-fn="e613d56d-2675-4037-9a68-fd6043e9af50" class="fn"><a href="#e613d56d-2675-4037-9a68-fd6043e9af50" id="e613d56d-2675-4037-9a68-fd6043e9af50-link">10</a></sup> qui va être inscrit automatiquement par le certbot sur notre nom de domaine à travers le jeu de clé/secret de l&rsquo;API généré.</p>



<p class="has-text-align-center wp-block-paragraph">Sur OVH, c&rsquo;est par là que ça se passe =&gt; <a href="https://auth.eu.ovhcloud.com/signin/?onsuccess=https%3A%2F%2Fauth.eu.ovhcloud.com%2Fapi%2FcreateToken">Lien</a> </p>


<div class="kb-gallery-wrap-id-3875_a4b276-be alignnone wp-block-kadence-advancedgallery"><div class="kb-gallery-ul kb-gallery-non-static kb-gallery-type-carousel kb-gallery-id-3875_a4b276-be kb-gallery-caption-style-bottom-hover kb-gallery-filter-none" data-image-filter="none" data-lightbox-caption="true"><div class="kt-blocks-carousel splide kt-carousel-container-dotstyle-dark kt-carousel-arrowstyle-whiteondark kt-carousel-dotstyle-dark kb-slider-group-arrow kb-slider-arrow-position-center" data-columns-xxl="2" data-columns-xl="2" data-columns-md="2" data-columns-sm="2" data-columns-xs="1" data-columns-ss="1" data-slider-anim-speed="400" data-slider-scroll="1" data-slider-arrows="true" data-slider-dots="true" data-slider-hover-pause="false" data-slider-auto="" data-slider-speed="7000" data-slider-gap="10px" data-slider-gap-tablet="10px" data-slider-gap-mobile="10px" data-show-pause-button="false" data-slider-label="Photo Gallery Carousel"><div class="splide__track"><ul class="kt-blocks-carousel-init kb-gallery-carousel splide__list"><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land32 kb-has-image-ratio-land32" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_003.jpg" width="553" height="523" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_003.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_003.jpg" data-id="3963" class="wp-image-3963 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_003.jpg 553w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_003-300x284.jpg 300w" sizes="auto, (max-width: 553px) 100vw, 553px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land32 kb-has-image-ratio-land32" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_004.jpg" width="546" height="477" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_004.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_004.jpg" data-id="3964" class="wp-image-3964 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_004.jpg 546w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_004-300x262.jpg 300w" sizes="auto, (max-width: 546px) 100vw, 546px" /></div></div></figure></div></div></li></ul></div></div></div></div>


<p class="wp-block-paragraph">Une fois notre clé d&rsquo;API générée direction notre serveur. Nous allons générer un fichier de configuration ini avec des droits strict 600. Il est important de respecter ce droit pour la bonne et simple raison que nous allons stocker en clair les informations de notre clé d&rsquo;API et donc la possibilité de réaliser, supprimer, lire et écrire des entrées DNS<sup data-fn="2549ae88-d682-4a1a-940a-3a532d5e6049" class="fn"><a href="#2549ae88-d682-4a1a-940a-3a532d5e6049" id="2549ae88-d682-4a1a-940a-3a532d5e6049-link">11</a></sup> sur notre domaine.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-5add4d67c4d92c51b394afa09183649d"><code><strong>$ sudo vim /etc/.ovh.ini
$ sudo chmod 600 /etc/.ovh.ini</strong></code></pre>



<pre class="wp-block-code"><code><strong>dns_ovh_endpoint = ovh-eu
dns_ovh_application_key = XXXXXXXXXXXXXXXXXXXXXX
dns_ovh_application_secret = XXXXXXXXXXXXXXXXXXXXXX
dns_ovh_consumer_key = XXXXXXXXXXXXXXXXXXXXXX</strong></code></pre>



<p class="wp-block-paragraph">Une explication rapide, nous spécifions l&#8217;emplacement de notre serveur, dans mon cas OVH Europe. Puis les informations que nous avons générée plus tôt soit :</p>



<ul class="wp-block-list">
<li>La clé d&rsquo;application</li>



<li>La clé secréte</li>



<li>La clé d&rsquo;usage</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="694" height="112" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_005.jpg" alt="" class="wp-image-3966" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_005.jpg 694w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_005-300x48.jpg 300w" sizes="auto, (max-width: 694px) 100vw, 694px" /></figure>
</div>


<p class="wp-block-paragraph">Il ne nous reste alors qu&rsquo;à demander la génération de notre certificat en fournissant en paramètre notre fichier INI<sup data-fn="dc7b3eff-f283-40bd-b431-dc18b5fabcba" class="fn"><a href="#dc7b3eff-f283-40bd-b431-dc18b5fabcba" id="dc7b3eff-f283-40bd-b431-dc18b5fabcba-link">12</a></sup>.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-0422fe1a7b2ecc62dfb85e9792c40a0d"><code><strong>$ sudo certbot certonly --dns-ovh --dns-ovh-credentials /root/.ovh.ini -d securebastion.erwanguillemard.com</strong></code></pre>



<p class="wp-block-paragraph">Ci-dessous, nous pouvons constater que nous avons bien un enregistrement TXT qui a été généré du côté de notre registrar et la génération de notre certificat a été réalisé avec succès 🙂</p>


<div class="kb-gallery-wrap-id-3875_676666-08 alignnone wp-block-kadence-advancedgallery"><div class="kb-gallery-ul kb-gallery-non-static kb-gallery-type-carousel kb-gallery-id-3875_676666-08 kb-gallery-caption-style-bottom-hover kb-gallery-filter-none" data-image-filter="none" data-lightbox-caption="true"><div class="kt-blocks-carousel splide kt-carousel-container-dotstyle-dark kt-carousel-arrowstyle-whiteondark kt-carousel-dotstyle-dark kb-slider-group-arrow kb-slider-arrow-position-center" data-columns-xxl="2" data-columns-xl="2" data-columns-md="2" data-columns-sm="2" data-columns-xs="1" data-columns-ss="1" data-slider-anim-speed="400" data-slider-scroll="1" data-slider-arrows="true" data-slider-dots="true" data-slider-hover-pause="false" data-slider-auto="" data-slider-speed="7000" data-slider-gap="10px" data-slider-gap-tablet="10px" data-slider-gap-mobile="10px" data-show-pause-button="false" data-slider-label="Photo Gallery Carousel"><div class="splide__track"><ul class="kt-blocks-carousel-init kb-gallery-carousel splide__list"><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land169 kb-has-image-ratio-land169" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_007-1024x343.jpg" width="1024" height="343" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_007.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_007.jpg" data-id="3968" class="wp-image-3968 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_007-1024x343.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_007-300x100.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_007-768x257.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_007.jpg 1518w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land169 kb-has-image-ratio-land169" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_008.jpg" width="940" height="439" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_008.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_008.jpg" data-id="3969" class="wp-image-3969 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_008.jpg 940w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_008-300x140.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_008-768x359.jpg 768w" sizes="auto, (max-width: 940px) 100vw, 940px" /></div></div></figure></div></div></li></ul></div></div></div></div>


<p class="wp-block-paragraph">Grâce au protocole ACME<sup data-fn="cf99568a-b38b-4b89-94d9-b0d1b1895aa4" class="fn"><a href="#cf99568a-b38b-4b89-94d9-b0d1b1895aa4" id="cf99568a-b38b-4b89-94d9-b0d1b1895aa4-link">13</a></sup>, le certificat va être renouvelé automatiquement donc no stress 🙂 Mais il convient encore une fois comme <em><strong>Saint Thomas de ne croire que ce que l&rsquo;on voit</strong></em> n&rsquo;est ce pas ? Alors vérifions.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-137e5957143581f53b87baf1a0deb69b"><code><strong>$ sudo systemctl list-timers
$ sudo systemctl status certbot-renew.timer</strong></code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="280" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_009-1024x280.jpg" alt="" class="wp-image-3971" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_009-1024x280.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_009-300x82.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_009-768x210.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_009-1536x421.jpg 1536w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_009.jpg 1632w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Le service est bien actif, nous avons la date de dernière vérification ainsi que le temps d&rsquo;exécution et la prochaine vérification. Donc tout est ok. Nous pouvons passer à l&rsquo;installation de NGINX. 🙂</p>



<h3 class="wp-block-heading">Nginx</h3>



<p class="wp-block-paragraph">Bon, encore une fois, l&rsquo;installation et l&rsquo;activation des services NGINX ça devient un peu relou&#8230; Je me questionne à faire un article dédié, mais j&rsquo;ai du mal à voir l&rsquo;utilité. C&rsquo;est de mon point de vue trop court pour faire un article, mais trop long pour le mettre dans un billet.</p>



<p class="wp-block-paragraph">Je vais donc m&rsquo;arrêter uniquement sur la configuration.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-2d96c8f801e10588d862a20dfe6ac0cb"><code><strong>$ sudo dnf install nginx
$ sudo systemctl enable nginx
$ sudo systemctl start nginx</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="941" height="379" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_900_nginx_001.jpg" alt="" class="wp-image-3973" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_900_nginx_001.jpg 941w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_900_nginx_001-300x121.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_900_nginx_001-768x309.jpg 768w" sizes="auto, (max-width: 941px) 100vw, 941px" /></figure>
</div>


<p class="wp-block-paragraph">Une fois tout le toutim réalisé, nous allons générer un fichier de configuration dans notre reverse proxy pour notre service guacamole.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-8d71d74a2a3e2ccd431740cfec068857"><code><strong>$ vim /etc/nginx/conf.d/guacamole.conf</strong></code></pre>



<pre class="wp-block-code"><code><strong>server {
    listen 80;
    server_name securebastion.erwanguillemard.com;

    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name securebastion.erwanguillemard.com;

    ssl_certificate /etc/letsencrypt/live/securebastion.erwanguillemard.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/securebastion.erwanguillemard.com/privkey.pem;

    # TLS sécurisé
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;

    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:10m;

    # sécurité headers
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-XSS-Protection "1; mode=block" always;
    add_header Referrer-Policy "no-referrer" always;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

   location /guacamole/ {
        proxy_pass http://egapl-guacamole-01:8080/;
        proxy_buffering off;

        proxy_http_version 1.1;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        # Timeouts (for RDP)
        proxy_read_timeout 3600;
        proxy_send_timeout 3600;
    }
}</strong></code></pre>



<p class="wp-block-paragraph">Commençons déjà par rediriger le port 80 vers le port 443. Dans notre cas pas trop de soucis puisque ce dernier n&rsquo;est pas autorisé dans nos flux Inbound de notre UTM. Mais dans le doute, je dirai que c&rsquo;est un réflexe à avoir. Nous ne sommes jamais assez prudents avec les temps qui court, il serait facile de s&rsquo;enrhumer.</p>



<p class="wp-block-paragraph">Dans la seconde partie, dédiée au port d&rsquo;écoute 443/tcp, nous définissons le nom de notre serveur, l&#8217;emplacement de notre certificat et l&#8217;emplacement de notre clé privée. Nous ne tolérons que les versions 1.2 et 1.3 du protocole SSL <sup data-fn="99acdab5-e69d-4084-9859-c65f1a649ab8" class="fn"><a href="#99acdab5-e69d-4084-9859-c65f1a649ab8" id="99acdab5-e69d-4084-9859-c65f1a649ab8-link">14</a></sup>en donnant la priorité aux algorithmes de notre serveur. Pour enfoncer le clou, nous ajoutons les classiques mécanismes de sécurité :</p>



<ul class="wp-block-list">
<li>Empêcher le site d&rsquo;être affiché dans un iframe d&rsquo;un autre domaine, ce qui évite le <strong>clickjacking</strong>. L&rsquo;usage du SAMEORIGIN autorise seulement le site à ouvrir une iframe vers le site</li>



<li>Empêche le navigateur de deviner le type MIME<sup data-fn="6a64ecd2-3302-444b-b0fe-074f05c75cf8" class="fn"><a href="#6a64ecd2-3302-444b-b0fe-074f05c75cf8" id="6a64ecd2-3302-444b-b0fe-074f05c75cf8-link">15</a></sup> d&rsquo;un fichier ce qui protège, prévient ainsi l&rsquo;exécution de script malveillant ou des failles XSS<sup data-fn="86d578bc-73b7-4f60-9781-5ec04d6f6dae" class="fn"><a href="#86d578bc-73b7-4f60-9781-5ec04d6f6dae" id="86d578bc-73b7-4f60-9781-5ec04d6f6dae-link">16</a></sup></li>



<li>Activation du filtre XSS pour bloquer la page en cas d&rsquo;attaque XSS. Bien qu&rsquo;obsolète, j&rsquo;ai pour habitude de le garder au cas où. Une faille reste une faille possible, même si le risque est faible</li>



<li>Contrôle des informations présentes dans les en-têtes, la présence du no-referrer indique qu&rsquo;aucune source n&rsquo;est présente. Ce qui va évité les fuite d&rsquo;URLs internes, les fuites de tokens dans l&rsquo;URL et le tracking</li>



<li>L&rsquo;obligation du navigateur a utiliser le protocole HTTPS. L&rsquo;objectif et de se prémunir du <strong>SSL stripping</strong>, du <strong>downgrade HTTP</strong> et des attaques <strong>MITM</strong><sup data-fn="38a062d8-c34a-4b3a-8571-d3b04d9cae15" class="fn"><a href="#38a062d8-c34a-4b3a-8571-d3b04d9cae15" id="38a062d8-c34a-4b3a-8571-d3b04d9cae15-link">17</a></sup></li>
</ul>



<p class="wp-block-paragraph">En complément, lors de la redirection des flux par notre reverse proxy, nous renseignons les options suivantes :</p>



<ul class="wp-block-list">
<li>Transmission uniquement du nom de domaine original demandé par le client</li>



<li>Envoie de l&rsquo;IP<sup data-fn="ac21f214-3392-48ad-b5ea-3eba0d6ef1e5" class="fn"><a href="#ac21f214-3392-48ad-b5ea-3eba0d6ef1e5" id="ac21f214-3392-48ad-b5ea-3eba0d6ef1e5-link">18</a></sup> réel du client, ce qui permet de connaitre l&rsquo;identité du client</li>



<li>La construction de la chaine complète des IPs qui sont transmises afin de garder un historique</li>



<li>Sécurisation des cookies</li>



<li>Autorise les websockets</li>
</ul>



<p class="wp-block-paragraph">J&rsquo;avais prévenu, je passe vite tel Speedy Gonzales ! L&rsquo;un des points que je ne connaissais pas était la possibilité de tester la configuration avant de redémarrer le service. C&rsquo;est une fonctionnalité qui peut paraitre bidon, mais je trouve ça super avant de relancer le service de savoir que notre configuration est bonne et de ne pas se retrouver avec un service en carafe&#8230; 🙂 Oui c&rsquo;est du vécu. </p>



<p class="has-text-align-center wp-block-paragraph"><strong><em><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">Tu vois ce que je veux dire ? Alors non pas du tout. Je ne partage pas du tout votre vision. #bisous </mark></em></strong></p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-800c94863ce269421e67bda5036be2d2"><code><strong>$ sudo nginx -t
$ sudo systemctl restart nginx</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="734" height="66" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_006.jpg" alt="" class="wp-image-3967" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_006.jpg 734w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_006-300x27.jpg 300w" sizes="auto, (max-width: 734px) 100vw, 734px" /></figure>
</div>


<p class="wp-block-paragraph">Le WebSocket, NGINX et GUACAMOLE ça peut poser problème. De ce fait, il est nécessaire de modifier une nouvelle fois le fichier de propriété de guacamole éditer plus tôt dans la partie précédente et d&rsquo;ajouter la partie NGINX. Sans cela, les flux de passerons pas. Egalement, nous précisons les langages disponible.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-c6b7236c59038fe958885902c75156ec"><code><strong>$ sudo vim /etc/guacamole/guacamole.properties</strong></code></pre>



<pre class="wp-block-code"><code><strong># Nginx WebSocket
enable-websocket: true
allowed-languages: fr,en</strong></code></pre>



<p class="wp-block-paragraph">Nous arrivons au bout ! Enfin. Je pars du principe que nous avons ouvert les flux sur notre UTM et que l&rsquo;ensemble des NATs / PATs sont ouverts et sécurisé.</p>



<p class="wp-block-paragraph">Sur notre VM<sup data-fn="44096659-cfa5-4994-ae3e-18f6772f65a5" class="fn"><a href="#44096659-cfa5-4994-ae3e-18f6772f65a5" id="44096659-cfa5-4994-ae3e-18f6772f65a5-link">19</a></sup> GUACAMOLE, il sera nécessaire d&rsquo;autoriser le port 443/tcp de manière permanente. Si vous aviez autorisé plus tôt le port 8080/tcp, vous pouvez dégager ce dernier. Et c&rsquo;est parti pour le reload !</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-035cd3eb37843fa8c9e72d5af86382cd"><code><strong>$ sudo firewall-cmd --permanent --add-port=443/tcp
$ sudo firewall-cmd --reload</strong></code></pre>



<p class="wp-block-paragraph">Dans notre navigateur, nous nous empressons de saisir notre url avec le port <strong>8443 </strong>et là c&rsquo;est comme un coup de <strong>piñata</strong> en plein dans les chicots !</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="672" height="269" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_010.jpg" alt="" class="wp-image-3975" style="width:520px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_010.jpg 672w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_010-300x120.jpg 300w" sizes="auto, (max-width: 672px) 100vw, 672px" /></figure>
</div>


<p class="wp-block-paragraph">Mais alors pourquoi autant de violence dans ce bas monde ? Laisse tomber, c&rsquo;est encore un coup du SELinux&#8230; Hé oui, encore lui et il signe d&rsquo;un Getenforce son nom de la pointe de son Z (ou un truc dans le genre). Bref, autorisons nginx à communiquer sur le réseau.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-a7c965cb0ad20254d3dd67e1b9cd6ce2"><code><strong>$ sudo setsebool -P httpd_can_network_connect 1</strong></code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="765" height="32" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_011.jpg" alt="" class="wp-image-3976" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_011.jpg 765w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_011-300x13.jpg 300w" sizes="auto, (max-width: 765px) 100vw, 765px" /></figure>



<p class="wp-block-paragraph">Retournons faire un petit F5 dans notre navigateur internet et surprise cela fonctionne, et plutôt bien même (le gars qui est fier de lui).</p>


<div class="kb-gallery-wrap-id-3875_094b2f-44 alignnone wp-block-kadence-advancedgallery"><div class="kb-gallery-ul kb-gallery-non-static kb-gallery-type-carousel kb-gallery-id-3875_094b2f-44 kb-gallery-caption-style-bottom-hover kb-gallery-filter-none" data-image-filter="none" data-lightbox-caption="true"><div class="kt-blocks-carousel splide kt-carousel-container-dotstyle-dark kt-carousel-arrowstyle-whiteondark kt-carousel-dotstyle-dark kb-slider-group-arrow kb-slider-arrow-position-center" data-columns-xxl="2" data-columns-xl="2" data-columns-md="2" data-columns-sm="2" data-columns-xs="1" data-columns-ss="1" data-slider-anim-speed="400" data-slider-scroll="1" data-slider-arrows="true" data-slider-dots="true" data-slider-hover-pause="false" data-slider-auto="" data-slider-speed="7000" data-slider-gap="10px" data-slider-gap-tablet="10px" data-slider-gap-mobile="10px" data-show-pause-button="false" data-slider-label="Photo Gallery Carousel"><div class="splide__track"><ul class="kt-blocks-carousel-init kb-gallery-carousel splide__list"><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land32 kb-has-image-ratio-land32" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_012.jpg" width="942" height="639" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_012.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_012.jpg" data-id="3977" class="wp-image-3977 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_012.jpg 942w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_012-300x204.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_012-768x521.jpg 768w" sizes="auto, (max-width: 942px) 100vw, 942px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land32 kb-has-image-ratio-land32" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_013.jpg" width="944" height="638" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_013.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_013.jpg" data-id="3978" class="wp-image-3978 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_013.jpg 944w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_013-300x203.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_901_letsEncrypts_ACME_Challenge_013-768x519.jpg 768w" sizes="auto, (max-width: 944px) 100vw, 944px" /></div></div></figure></div></div></li></ul></div></div></div></div>


<h2 class="wp-block-heading">Système</h2>



<h3 class="wp-block-heading">Nginx Protect</h3>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-99f52cc1960c3342d29b97ecf509b317"><code><strong>$ sudo dnf install httpd-tools</strong></code></pre>



<p class="wp-block-paragraph">Nous allons créer le fichier qui va contenir les utilisateurs habilités à se connecter à Nginx.</p>



<ul class="wp-block-list">
<li><strong>-C</strong> : Permet de générer le fichier lors de la première instanciation</li>



<li><strong>/etc/nginx/.guacamole.htpasswd </strong>: Le nom du fichier qui va contenir nos utilisateurs</li>



<li><strong>admin</strong> : Le nom de l&rsquo;utilisateur</li>
</ul>



<p class="wp-block-paragraph">A la suite de cette commande, un mot de passe sera demandé pour être lié à l&rsquo;utilisateur.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-fec36e33082555bef90cb1360bb06348"><code><strong>$ sudo htpasswd -c /etc/nginx/.guacamole.htpasswd admin</strong></code></pre>



<p class="wp-block-paragraph">Il faut alors se rendre de nouveau dans le fichier de configuration nginx et indiquer dans la section location /guacamole/ les lignes suivantes :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-8d71d74a2a3e2ccd431740cfec068857"><code><strong>$ vim /etc/nginx/conf.d/guacamole.conf</strong></code></pre>



<pre class="wp-block-code"><code><strong>auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/.guacamole.htpasswd;</strong></code></pre>



<p class="wp-block-paragraph">Après un petit reboot des familles du service NGINX, si nous nous rendons sur l&rsquo;URL<sup data-fn="7ca3db41-4a12-4737-84fd-d2942f4a3a26" class="fn"><a href="#7ca3db41-4a12-4737-84fd-d2942f4a3a26" id="7ca3db41-4a12-4737-84fd-d2942f4a3a26-link">20</a></sup> nous serons invités à nous authentifier au niveau NGINX. Toutefois j&rsquo;arrive dans un cas où la page n&rsquo;est pas redirigé. Du moins, pas toute à fait car après une petite action sur la touche F5 le portail réapparait.</p>



<p class="wp-block-paragraph">Il apparait dans certains cas que des WebSockets s&rsquo;échangent mal entre NGINX et le serveur tomcat. Donc, je prends cela pour un échec car non fonctionnel. Encore une fois, trop de sécurité tue la sécurité. Je préfère donc ne pas complexifier plus l&rsquo;infrastructure. J&rsquo;aurai la possibilité de palier à ce point plus tard car j&rsquo;ai un autre projet en tête. 🙂 </p>



<h2 class="wp-block-heading">Application</h2>



<p class="wp-block-paragraph">Du côte de l&rsquo;application, il y a la possibilité de renforcer la sécurité et j&rsquo;avoue que c&rsquo;est plutôt plaisant et rassurant de savoir que Apache Guacamole propose des modules, plugins ou addons complémentaires.</p>



<p class="wp-block-paragraph">Ainsi il est possible de gérer :</p>



<ul class="wp-block-list">
<li>Les sources d&rsquo;authentifications (AD<sup data-fn="1b0a556b-75d7-4fd3-86fb-e0f74ac4ea3f" class="fn"><a href="#1b0a556b-75d7-4fd3-86fb-e0f74ac4ea3f" id="1b0a556b-75d7-4fd3-86fb-e0f74ac4ea3f-link">21</a></sup>, SAML<sup data-fn="7c4d3a1f-9316-4c7c-b0a5-e380f170455a" class="fn"><a href="#7c4d3a1f-9316-4c7c-b0a5-e380f170455a" id="7c4d3a1f-9316-4c7c-b0a5-e380f170455a-link">22</a></sup> via SSO<sup data-fn="790f9e58-020c-43d8-8404-e0efdc245d26" class="fn"><a href="#790f9e58-020c-43d8-8404-e0efdc245d26" id="790f9e58-020c-43d8-8404-e0efdc245d26-link">23</a></sup>)</li>



<li>L&rsquo;authentification renforcée par l&rsquo;usage de MFA<sup data-fn="8b7814d8-8d08-447c-9910-048d75261ab4" class="fn"><a href="#8b7814d8-8d08-447c-9910-048d75261ab4" id="8b7814d8-8d08-447c-9910-048d75261ab4-link">24</a></sup></li>



<li>La mise en place d&rsquo;un lock sur de l&rsquo;authentification brute force</li>



<li>La granularité d&rsquo;accès à une ressource dans le temps</li>



<li>L&rsquo;enregistrement des sessions vidéos et des événements</li>
</ul>



<p class="wp-block-paragraph">Nous retrouvons ainsi les principes de bases de la sécurité, Authentification, Sécurisation des accès, Contrôle et Journalisation des accès. J&rsquo;ai décidé d&rsquo;implémenter uniquement les points 2 à 5. Je me garde pour l&rsquo;instant de côté l&rsquo;interconnexion à une source d&rsquo;authentification (est-ce que je m&rsquo;achète un tenant O365 ? <a href="https://www.youtube.com/watch?v=ZTeqM5gciH8&amp;list=RDZTeqM5gciH8&amp;start_radio=1">Telle est la question</a>&#8230;)</p>



<p class="wp-block-paragraph">Il est à noter que le mode de déploiement des plugins suit le même mode opératoire. Ne pas s&rsquo;affoler sur ma santé mentale si vous trouvez que je radote, non je ne branle pas encore de la cafetière <strong>#MidnightExpress</strong>.</p>



<h3 class="wp-block-heading">RBAC et Granularité des droits</h3>



<p class="wp-block-paragraph">Cela faisait une éternité que je n&rsquo;avais pas claqué un RBAC<sup data-fn="8fcee9f0-caf6-4aad-b186-01eb02d87f2a" class="fn"><a href="#8fcee9f0-caf6-4aad-b186-01eb02d87f2a" id="8fcee9f0-caf6-4aad-b186-01eb02d87f2a-link">25</a></sup> comme ça. Bref bien que de plus en plus présent dans les applications, il subsiste malheureusement des applications qui ne permettent pas de définir des droits et permissions de manière granulaire. Heureusement l&rsquo;application GUACAMOLE n&rsquo;est pas de ce type là 🙂</p>



<p class="wp-block-paragraph">En terme de permission, nous pouvons 7 rôles différents :</p>


<div class="kb-table-container kb-table-container3875_2fb61b-78 wp-block-kadence-table"><table class="kb-table kb-table3875_2fb61b-78">
<tr class="kb-table-row kb-table-row3875_f76716-35">
<th  scope="col" class="kb-table-data kb-table-data3875_f1e1da-3e">

<p class="wp-block-paragraph">Droits</p>

</th>

<th  scope="col" class="kb-table-data kb-table-data3875_a9eb30-6a">

<p class="wp-block-paragraph">Descriptions</p>

</th>

<th  scope="col" class="kb-table-data kb-table-data3875_c4be04-50">

<p class="wp-block-paragraph">Profils</p>

</th>
</tr>

<tr class="kb-table-row kb-table-row3875_33647f-b6">
<td  class="kb-table-data kb-table-data3875_948aa8-b3">

<p class="has-text-align-center wp-block-paragraph">Administration du système</p>

</td>

<td  class="kb-table-data kb-table-data3875_a2dee2-be">

<p class="wp-block-paragraph">Permet d’accéder à l’administration globale de Apache Guacamole : configuration générale, gestion des extensions, paramètres de sécurité, authentification et supervision complète de la plateforme.</p>

</td>

<td  class="kb-table-data kb-table-data3875_21ee42-d2">

<p class="has-text-align-center wp-block-paragraph">Responsable IT</p>



<p class="has-text-align-center wp-block-paragraph">AdminSys</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row3875_408474-6c">
<td  class="kb-table-data kb-table-data3875_92790c-f3">

<p class="has-text-align-center wp-block-paragraph">Audit system</p>

</td>

<td  class="kb-table-data kb-table-data3875_56c117-14">

<p class="wp-block-paragraph">Autorise la consultation des journaux d’audit et des historiques d’activité : connexions utilisateurs, actions administratives, accès aux ressources et événements de sécurité.</p>

</td>

<td  class="kb-table-data kb-table-data3875_0fdbbd-07">

<p class="has-text-align-center wp-block-paragraph">Responsable IT</p>



<p class="has-text-align-center wp-block-paragraph">RSSI<sup data-fn="316a44ac-8136-4881-8831-49e2286bcd77" class="fn"><a href="#316a44ac-8136-4881-8831-49e2286bcd77" id="316a44ac-8136-4881-8831-49e2286bcd77-link">26</a></sup></p>

</td>
</tr>

<tr class="kb-table-row kb-table-row3875_b884d4-fa">
<td  class="kb-table-data kb-table-data3875_630347-ec">

<p class="has-text-align-center wp-block-paragraph">Créer de nouveaux utilisateurs</p>

</td>

<td  class="kb-table-data kb-table-data3875_c28d78-da">

<p class="wp-block-paragraph">Permet de créer et gérer des comptes utilisateurs individuels dans Guacamole. Inclut généralement l’attribution de permissions et de groupes.</p>

</td>

<td  class="kb-table-data kb-table-data3875_644e8d-68">

<p class="has-text-align-center wp-block-paragraph">Administrateur IAM<sup data-fn="fa18feb0-e8c3-46f9-9fef-48c9e5db66ef" class="fn"><a href="#fa18feb0-e8c3-46f9-9fef-48c9e5db66ef" id="fa18feb0-e8c3-46f9-9fef-48c9e5db66ef-link">27</a></sup></p>



<p class="has-text-align-center wp-block-paragraph">Responsable IT</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row3875_544a61-29">
<td  class="kb-table-data kb-table-data3875_90d229-f4">

<p class="has-text-align-center wp-block-paragraph">Créer de nouveaux groupes d&rsquo;utilisateurs</p>

</td>

<td  class="kb-table-data kb-table-data3875_bd9dbc-97">

<p class="wp-block-paragraph">Autorise la création et la gestion de groupes d’utilisateurs afin de simplifier l’attribution des droits et des accès.</p>

</td>

<td  class="kb-table-data kb-table-data3875_4eaf8f-30">

<p class="has-text-align-center wp-block-paragraph">Responsable IT</p>



<p class="has-text-align-center wp-block-paragraph">AdminSys</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row3875_eba0f8-c1">
<td  class="kb-table-data kb-table-data3875_d5d746-6c">

<p class="has-text-align-center wp-block-paragraph">Créer de nouvelles connexions</p>

</td>

<td  class="kb-table-data kb-table-data3875_f804a6-b9">

<p class="wp-block-paragraph" style="border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-left-radius:0px;border-bottom-right-radius:0px">Permet de créer des connexions vers des ressources distantes (RDP, SSH, VNC, etc.) accessibles via Guacamole.</p>

</td>

<td  class="kb-table-data kb-table-data3875_8328c4-70">

<p class="has-text-align-center wp-block-paragraph">Administrateur IAM</p>



<p class="has-text-align-center wp-block-paragraph">Responsable IT</p>



<p class="has-text-align-center wp-block-paragraph">AdminSys</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row3875_cde175-35">
<td  class="kb-table-data kb-table-data3875_a69b38-ed">

<p class="has-text-align-center wp-block-paragraph">Créer de nouveaux groupes de connexion</p>

</td>

<td  class="kb-table-data kb-table-data3875_21d6a0-3b">

<p class="wp-block-paragraph">Autorise la création de groupes de connexions pour organiser les ressources par environnement, service ou client.</p>

</td>

<td  class="kb-table-data kb-table-data3875_f03aa4-c1">

<p class="has-text-align-center wp-block-paragraph">AdminSys</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row3875_cb03d5-7d">
<td  class="kb-table-data kb-table-data3875_624143-7b">

<p class="has-text-align-center wp-block-paragraph">Créer de nouveaux profils de partage</p>

</td>

<td  class="kb-table-data kb-table-data3875_d49d34-54">

<p class="wp-block-paragraph">Permet de créer des profils de partage de session afin de définir comment les sessions peuvent être partagées entre utilisateurs (collaboration, support, supervision).</p>

</td>

<td  class="kb-table-data kb-table-data3875_1a21c3-1d">

<p class="has-text-align-center wp-block-paragraph">Centre de service, Superviseur Support</p>

</td>
</tr>
</table></div>


<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Il ne nous reste alors qu&rsquo;à créer les différents type de groupe utilisateur de peupler ces derniers selon le rôle de chacun.<br>Dans le contexte d&rsquo;usage (j&rsquo;entends par là utilisateur), il revient de faire des groupes selon l&rsquo;organisation des groupes de connexions.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="219" class="wp-image-4013" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_904_RBAC_0.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_904_RBAC_0.jpg 903w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_904_RBAC_0-300x120.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_904_RBAC_0-768x306.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<h3 class="wp-block-heading">MFA</h3>



<p class="wp-block-paragraph">La MFA va nous permettre de renforcer la sécurité quant à l&rsquo;authentification. C&rsquo;est maintenant un classique que nous retrouvons dans la majorité des applications. Soyons toutefois pragmatique il ne s&rsquo;agit pas là d&rsquo;un moyen infaillible pour verrouiller l&rsquo;accès à un individu malveillant.</p>



<p class="wp-block-paragraph">Téléchargeons le plugin depuis le site officiel.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-389de3774406a11244bde1ec7d9c72df"><code><strong>$ sudo curl -L --output-dir /tmp -O https://apache.org/dyn/closer.lua/guacamole/1.6.0/binary/guacamole-auth-totp-1.6.0.tar.gz?action=download</strong></code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="941" height="130" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_801_mfa_000.jpg" alt="" class="wp-image-3982" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_801_mfa_000.jpg 941w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_801_mfa_000-300x41.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_801_mfa_000-768x106.jpg 768w" sizes="auto, (max-width: 941px) 100vw, 941px" /></figure>



<p class="wp-block-paragraph">Décompressons l&rsquo;archive pour manipuler le .<strong>jar</strong><sup data-fn="3bed5515-9227-4db9-9741-b8dda1b78ada" class="fn"><a href="#3bed5515-9227-4db9-9741-b8dda1b78ada" id="3bed5515-9227-4db9-9741-b8dda1b78ada-link">28</a></sup>.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-9c7818b631e44d5b3773aebc7aa29c58"><code><strong>$ sudo tar -xzf guacamole-auth-totp-1.6.0.tar.gz</strong></code></pre>



<p class="wp-block-paragraph">Une fois décompressé, il faudra déplacer le plugins dans le répertoire extension de guacamole <strong>/etc/guacamole/extensions/</strong>. Néanmoins, il sera nécessaire d&rsquo;appliquer les permissions <strong>tomcat </strong>sur le fichier. Par flemme, j&rsquo;ai choisie d&rsquo;appliquer les droits directement au niveau du répertoire <strong>extensions</strong>.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-542543571a5435b7a99685125be66805"><code><strong>$ sudo cp /tmp/guacamole-auth-totp-1.6.0/guacamole-auth-totp-1.6.0.jar /etc/guacamole/extensions/
$ sudo chown -R tomcat:tomcat /etc/guacamole/extensions</strong></code></pre>



<p class="wp-block-paragraph">Je n&rsquo;aime pas rester avec les paramètres par défaut. Et donc en parcourant la documentation, j&rsquo;ai découvert qu&rsquo;il était possible de sérieusement durcir le token. Cela va se passer dans le fichier <strong>guacamole.properties</strong>.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-252b335ba48c3415a945705f46d2a24e"><code><strong>$ vim /etc/guacamole/guacamole.properties</strong></code></pre>



<pre class="wp-block-code"><code><strong># Paramètre TOTP
totp-issuer: Guacamole R-One
totp-digits: 8
totp-period: 30
totp-mode: sha512</strong></code></pre>



<p class="wp-block-paragraph">J&rsquo;ai choisi de nommer mon totp <strong>Guacamole R-One</strong> et d&rsquo;avoir <strong>8 digits</strong> en lieu et place de 6 digits. La durée de renouvellement est de <strong>30 secondes</strong> et l&rsquo;algorithme de génération du totp sera en <strong>sha512</strong>. Un petit reload des services tomcat et guacamole et hop Let&rsquo;s Go !</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Lors de la première authentification, il nous sera demandé de scanner le QRCode pour générer le totp.<br><br>Le reste c&rsquo;est toujours la même chose, on entre le totp et hop c&rsquo;est paramètré.<br><br><img loading="lazy" decoding="async" width="550" height="232" class="wp-image-3986" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_801_mfa_002.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_801_mfa_002.jpg 603w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_801_mfa_002-300x126.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="630" class="wp-image-3985" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_801_mfa_001.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_801_mfa_001.jpg 587w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_801_mfa_001-262x300.jpg 262w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr><tr><td>Il est possible de désactiver l&rsquo;authentification ou de réinitialiser la MFA pour un compte.<br>Il faut pour cela avoir les droits de gestion des utilisateurs et d&rsquo;éditer le profil.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="278" class="wp-image-3987" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_801_mfa_003.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_801_mfa_003.jpg 318w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_801_mfa_003-300x152.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Naturellement, il est possible de désactiver le TOTP, mais je ne le recommande pas. Cela me parait évident.</p>



<h3 class="wp-block-heading">Lock Brut Force</h3>



<p class="wp-block-paragraph">La lock brut force est sensiblement les mêmes technologies que Faillock ou Fail2ban, mais orienté application et non système. Cela va nous permettre de renforcer la sécurité en limitant le nombre de tentative d&rsquo;authentification infructueuse à notre bastion GUACAMOLE. L&rsquo;objectif ici est de retarder un maximum l&rsquo;individu malveillant à se connecter à notre système.</p>



<p class="wp-block-paragraph">Téléchargeons le plugin depuis le site officiel.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-1dcb3d83ccf38d61f1f47fbfb2dd9459"><code><strong>$ sudo curl -L --output-dir /tmp -O https://apache.org/dyn/closer.lua/guacamole/1.6.0/binary/guacamole-auth-ban-1.6.0.tar.gz?action=download</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="940" height="129" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_000.jpg" alt="" class="wp-image-3991" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_000.jpg 940w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_000-300x41.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_000-768x105.jpg 768w" sizes="auto, (max-width: 940px) 100vw, 940px" /></figure>
</div>


<p class="wp-block-paragraph">Décompressons l&rsquo;archive pour manipuler le.jar.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-74c446768643b1889cc8df28261479ed"><code><strong>$ sudo tar -xfz /tmp/guacamole-auth-ban-1.6.0.tar.gz</strong></code></pre>



<p class="wp-block-paragraph">Une fois décompressé, il faudra déplacer le plugins dans le répertoire extension de guacamole <strong>/etc/guacamole/extensions/</strong>. Néanmoins, il sera nécessaire d&rsquo;appliquer les permissions <strong>tomcat </strong>sur le fichier. Par flemme, j&rsquo;ai choisie d&rsquo;appliquer les droits directement au niveau du répertoire <strong>extensions</strong>. (J&rsquo;avais prévenu du copié, collé M&rsquo;sieurs, Dames les lecteurs).</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-3f44a012cff1533574492ef1b55b20f6"><code><strong>$ sudo cp /tmp/guacamole-auth-ban-1.6.0/guacamole-auth-ban-1.6.0.jar /etc/guacamole/extensions/
$ sudo chown -R tomcat:tomcat /etc/guacamole/extensions</strong></code></pre>



<p class="wp-block-paragraph">Encore une fois, les paramètres par défaut ce n&rsquo;est pas mon truc. Toujours en parcourant la documentation, j&rsquo;ai limité le nombre de tentatives à 3 est bloqué le compte pour une durée de 1900000 secondes. Cela va se passer dans le fichier <strong>guacamole.properties</strong>.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-252b335ba48c3415a945705f46d2a24e"><code><strong>$ vim /etc/guacamole/guacamole.properties</strong></code></pre>



<pre class="wp-block-code"><code><strong># Paramètres Ban
ban-max-invalid-attempts: 3
ban-address-duration: 1900000</strong></code></pre>



<p class="wp-block-paragraph">Après relance des services tomcat et guacd.</p>


<div class="kb-gallery-wrap-id-3875_4f3016-53 alignnone wp-block-kadence-advancedgallery"><div class="kb-gallery-ul kb-gallery-non-static kb-gallery-type-carousel kb-gallery-id-3875_4f3016-53 kb-gallery-caption-style-bottom-hover kb-gallery-filter-none" data-image-filter="none" data-lightbox-caption="true"><div class="kt-blocks-carousel splide kt-carousel-container-dotstyle-dark kt-carousel-arrowstyle-whiteondark kt-carousel-dotstyle-dark kb-slider-group-arrow kb-slider-arrow-position-center" data-columns-xxl="2" data-columns-xl="2" data-columns-md="2" data-columns-sm="2" data-columns-xs="1" data-columns-ss="1" data-slider-anim-speed="400" data-slider-scroll="1" data-slider-arrows="true" data-slider-dots="true" data-slider-hover-pause="false" data-slider-auto="" data-slider-speed="7000" data-slider-gap="10px" data-slider-gap-tablet="10px" data-slider-gap-mobile="10px" data-show-pause-button="false" data-slider-label="Photo Gallery Carousel"><div class="splide__track"><ul class="kt-blocks-carousel-init kb-gallery-carousel splide__list"><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land43 kb-has-image-ratio-land43" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_0-1.jpg" width="955" height="1038" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_0-1.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_0-1.jpg" data-id="3993" class="wp-image-3993 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_0-1.jpg 955w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_0-1-276x300.jpg 276w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_0-1-942x1024.jpg 942w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_0-1-768x835.jpg 768w" sizes="auto, (max-width: 955px) 100vw, 955px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land43 kb-has-image-ratio-land43" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001.jpg" width="1076" height="813" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001.jpg" data-id="3992" class="wp-image-3992 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001.jpg 1076w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001-300x227.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001-1024x774.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001-768x580.jpg 768w" sizes="auto, (max-width: 1076px) 100vw, 1076px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land43 kb-has-image-ratio-land43" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_1-1.jpg" width="954" height="1038" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_1-1.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_1-1.jpg" data-id="3994" class="wp-image-3994 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_1-1.jpg 954w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_1-1-276x300.jpg 276w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_1-1-941x1024.jpg 941w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_1-1-768x836.jpg 768w" sizes="auto, (max-width: 954px) 100vw, 954px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land43 kb-has-image-ratio-land43" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_2-1.jpg" width="955" height="1037" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_2-1.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_2-1.jpg" data-id="3995" class="wp-image-3995 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_2-1.jpg 955w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_2-1-276x300.jpg 276w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_2-1-943x1024.jpg 943w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_2-1-768x834.jpg 768w" sizes="auto, (max-width: 955px) 100vw, 955px" /></div></div></figure></div></div></li></ul></div></div></div></div>


<h3 class="wp-block-heading">Restriction de connexion améliorée</h3>



<p class="wp-block-paragraph">Une partie que j&rsquo;affectionne particulièrement puisque ce module permet de pousser plus loin les paramètres de connexion d&rsquo;un utilisateur. Par exemple de limiter ce dernier à se connecter uniquement durant les heures et jours ouvrés, depuis un site particulier et ou d&rsquo;interdire l&rsquo;accès sur un plage horaire etc.</p>



<p class="wp-block-paragraph">Cela devient alors d&rsquo;une vraie utilité lorsque l&rsquo;on souhaite restreindre un prestataire à se connecter à des ressources et de contraindre celui-ci à ne pas faire ce qu&rsquo;il veut.</p>



<p class="wp-block-paragraph">Téléchargeons le plugin depuis le site officiel.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-0ea3b771c6dd5c082bc2b1a86077d89c"><code><strong>$ sudo curl -L --output-dir /tmp -O https://apache.org/dyn/closer.lua/guacamole/1.6.0/binary/guacamole-auth-restrict-1.6.0.tar.gz?action=download</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="939" height="128" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_802_enhancedRestriction_000.jpg" alt="" class="wp-image-3997" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_802_enhancedRestriction_000.jpg 939w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_802_enhancedRestriction_000-300x41.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_802_enhancedRestriction_000-768x105.jpg 768w" sizes="auto, (max-width: 939px) 100vw, 939px" /></figure>
</div>


<p class="wp-block-paragraph">Décompressons l&rsquo;archive pour manipuler le.jar.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-c13692168c91d14280db82aa53866084"><code><strong>$ sudo tar -xzf guacamole-auth-restrict-1.6.0.tar.gz</strong></code></pre>



<p class="wp-block-paragraph">Une fois décompressé, il faudra déplacer le plugins dans le répertoire extension de guacamole <strong>/etc/guacamole/extensions/</strong>. Néanmoins, il sera nécessaire d&rsquo;appliquer les permissions <strong>tomcat </strong>sur le fichier. Par flemme, j&rsquo;ai choisie d&rsquo;appliquer les droits directement au niveau du répertoire <strong>extensions</strong>.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-8e430fde30ff1fb1de7f950b4457c585"><code><strong>$ sudo cp /tmp/guacamole-auth-restrict-1.6.0/guacamole-auth-restrict-1.6.0.jar /etc/guacamole/extensions/
$ sudo chown -R tomcat:tomcat /etc/guacamole/extensions</strong></code></pre>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Ici, nous n&rsquo;aurons pas besoin de modifier notre fichier de configuration Guacamole. Nous retrouverons dans la création de ressources ou dans la création d&rsquo;un compte utilisateur les paramètres suivants.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="389" class="wp-image-3998" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_802_enhancedRestriction_001.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_802_enhancedRestriction_001.jpg 577w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_802_enhancedRestriction_001-300x212.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Etonnant non ?</p>



<h3 class="wp-block-heading">Recording video</h3>



<p class="wp-block-paragraph">L&rsquo;un des modules de sécurité les plus important, intéressant et sur lequel je me suis bien cassé les dents. Ce qui me plaît avec GUACAMOLE (et surtout que j&rsquo;ai détourné sur la solution de bastion Systancia), c&rsquo;est de pouvoir enregistrer les flux https de connexion à distance peut importe le protocole utilisé.</p>



<p class="wp-block-paragraph">D&rsquo;avoir l&rsquo;enregistrement de la session vidéo permet de suivre au delà d&rsquo;une journalisation classique les actions effectuées par l&rsquo;utilisateur. Là où l&rsquo;application va plus loin (comme Systancia) c&rsquo;est de proposer l&rsquo;enregistrement des frapes claviers. Ce qui fait qu&rsquo;en temps réel sur la vidéo, j&rsquo;ai également la possibilité de relier une action physique à un évènement logique.</p>



<p class="wp-block-paragraph">Toutefois, il est à noter que cela va nécessiter un peu de ressource notamment point de vu stockage car les vidéos, ça prend vite de la place&#8230;</p>



<p class="wp-block-paragraph">Téléchargeons le plugin depuis le site officiel.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-96d4f217c79c60f1a68dbaa66905f944"><code><strong>$ sudo curl -L --output-dir /tmp -O https://apache.org/dyn/closer.lua/guacamole/1.6.0/binary/guacamole-history-recording-storage-1.6.0.tar.gz?action=download</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="941" height="151" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_803_record_000.jpg" alt="" class="wp-image-4000" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_803_record_000.jpg 941w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_803_record_000-300x48.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_803_record_000-768x123.jpg 768w" sizes="auto, (max-width: 941px) 100vw, 941px" /></figure>
</div>


<p class="wp-block-paragraph">Décompressons l&rsquo;archive pour manipuler le.jar.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-84673588839c12e3b22d457380468a25"><code><strong>$ sudo tar -xzf guacamole-history-recording-storage-1.6.0.tar.gz</strong></code></pre>



<p class="wp-block-paragraph">Une fois décompressé, il faudra déplacer le plugins dans le répertoire extension de guacamole <strong>/etc/guacamole/extensions/</strong>. Néanmoins, il sera nécessaire d&rsquo;appliquer les permissions <strong>tomcat </strong>sur le fichier. Par flemme, j&rsquo;ai choisie d&rsquo;appliquer les droits directement au niveau du répertoire <strong>extensions</strong>.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-7fe07b8e4e8039037bcc590040bfd77c"><code><strong>$ sudo cp /tmp/guacamole-history-recording-storage-1.6.0/guacamole-history-recording-storage-1.6.0.jar /etc/guacamole/extensions/
$ sudo chown -R tomcat:tomcat /etc/guacamole/extensions</strong></code></pre>



<p class="wp-block-paragraph">Il va être nécessaire de modifier le fichier de configuration de notre application Guacamole. Afin de ne pas saturer le système quant au stockage des sessions vidéos, j&rsquo;ai décidé de modifier l&#8217;emplacement par défaut. Naturellement, j&rsquo;ai dédié un disque ainsi qu&rsquo;un point de montage sécurisé pour stocker les enregistrements.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-252b335ba48c3415a945705f46d2a24e"><code><strong>$ vim /etc/guacamole/guacamole.properties</strong></code></pre>



<pre class="wp-block-code"><code><strong># Paramètre Recording
recording-search-path: /mnt/guac_records/recordings</strong></code></pre>



<p class="wp-block-paragraph">Notre point de montage étant montée, créons le répertoire recordings et attribuons les droits à l&rsquo;utilisateur qui exécute notre daemon guacd et au groupe utilisateur tomcat. Tomcat n&rsquo;aura besoin que des droits en lecture. </p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-02a1cd8208d087a0482fd71fbe928a85"><code><strong>$ sudo mkdir /mnt/guac_records/recordings
$ sudo chown guacamole:tomcat -R /mnt/guac_records/
$ sudo chmod 2750 /mnt/guac_records/recordings/</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="689" height="106" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_803_record_001.jpg" alt="" class="wp-image-4001" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_803_record_001.jpg 689w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_803_record_001-300x46.jpg 300w" sizes="auto, (max-width: 689px) 100vw, 689px" /></figure>
</div>


<p class="has-text-align-center wp-block-paragraph"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">Toutefois si nous lançons une session distante cette dernière va s&rsquo;ouvrir mais nous n&rsquo;aurons pas d&rsquo;enregistrement. Mais pourquoi ? Et c&rsquo;est là que je me suis cassé les dents à deux doigt d&rsquo;être</mark> <a href="https://www.youtube.com/watch?v=em-_u9vg3Uk&amp;list=RDem-_u9vg3Uk&amp;start_radio=1">Borracho Hombre</a> <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">!</mark></strong></p>



<p class="wp-block-paragraph">Un petit tour dans les logs guacamole est nécessaire.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-b97c6417930fc36d999dc0dbc5f15d12"><code><strong>$ sudo journalctl -u guacd -f</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="940" height="70" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_803_record_003.jpg" alt="" class="wp-image-4003" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_803_record_003.jpg 940w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_803_record_003-300x22.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_803_record_003-768x57.jpg 768w" sizes="auto, (max-width: 940px) 100vw, 940px" /></figure>
</div>


<p class="wp-block-paragraph">Le daemon guacamole n&rsquo;a pas le droit d&rsquo;écriture sur notre répertoire, uniquement les droits en lecture seule. Pourtant les droits défini précédemment sont correct. Qu&rsquo;est que c&rsquo;est que ce joyeux bord*l ?!</p>



<p class="wp-block-paragraph">Revenons sur notre service guacd généré dans la partie précédente.   Il y a en sécurité un scope qui définit là où le daemon peut interargir avec le système 🙂 Le hardening c&rsquo;est diabolique hein ?</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-8fa5081d97727a397ed5e1d6e68d4132"><code><strong>$ sudo vim /etc/systemd/system/guacd.service</strong></code></pre>



<p class="wp-block-paragraph">Ajoutons donc notre path.</p>



<pre class="wp-block-code"><code><strong>#Limiter accès filesystem
ReadWritePaths=/var/lib/guacd /mnt/guac_record</strong></code></pre>



<p class="wp-block-paragraph">Rechargeons nos service tomcat et guacd.</p>



<p class="wp-block-paragraph">Par défaut, l&rsquo;enregistrement vidéo n&rsquo;est pas activé sur les ressources sur lesquels nous allons nous connecter. L&rsquo;ajout précédemment du plugin vient ajouter une section supplémentaire.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Il y a 3 éléments important pour réaliser l&rsquo;enregistrement. Avoir un nom de fichier et un chemin valide et d&rsquo;activer la création automatique vers le chemin spécifier. Sans cela, vous êtes marron comme le disait un de mes anciens employeurs.<br><br><strong><span style="text-decoration: underline;">Chemin d&rsquo;enregistrement :</span></strong> Je renseigne le chemin absolu d&rsquo;enregistrement des session vidéo. Afin de garantir l&rsquo;unicité des enregistrements, je rajoute l&rsquo;UUID de connexion à la ressource. <strong><em><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">/mnt/guac_records/recordings/${HISTORY_UUID}</mark></em></strong><br><br><strong><span style="text-decoration: underline;">Nom de l&rsquo;enregistrement :</span></strong> Le nom du fichier. Il est important de préciser l&rsquo;extension .guacamole à la fin. J&rsquo;ai décidé d&rsquo;afficher en premier le nom de l&rsquo;utilisateur qui est authentifié puis le protocole et enfin la date de la session.<br><strong><em><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">${GUAC_USERNAME}-RDP_${GUAC_DATE}-${GUAC_TIME}.guac</mark></em></strong><br><br>On note ici que je n&rsquo;ai pas coché la case concernant les événements clavier. Effectivement, lorsque j&rsquo;active cette dernière, je ne peux plus lire mes vidéos. Je dois encore investiguer la chose&#8230;</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="218" class="wp-image-4004" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_803_record_002.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_803_record_002.jpg 627w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_803_record_002-300x119.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Si nous faisons un tour dans notre fichier de log et que nous relançons la connexion à une ressource, nous devrions voir maintenant le message suivant :</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="941" height="92" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_803_record_004.jpg" alt="" class="wp-image-4006" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_803_record_004.jpg 941w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_803_record_004-300x29.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_803_record_004-768x75.jpg 768w" sizes="auto, (max-width: 941px) 100vw, 941px" /></figure>
</div>


<p class="has-text-align-center wp-block-paragraph">(Oui je travaille le 01 Mai, mais ce que vous appelez travail, j&rsquo;appelle cela plaisir 🙂 )</p>



<p class="wp-block-paragraph">Et si nous regardons alors dans le répertoire où sont stockés les enregistrements vidéo nous retrouvons notre fichier avec l&rsquo;extension <strong>.guac</strong> (comme on peut le voir sur la capture ci-dessous, l&rsquo;enregistrement est là mais ne sera pas exploitable du fait de la mauvaise extension&#8230;). Ca, c&rsquo;est un autre sujet que j&rsquo;aborderai dans un prochain article.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="943" height="123" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_803_record_005.jpg" alt="" class="wp-image-4007" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_803_record_005.jpg 943w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_803_record_005-300x39.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_803_record_005-768x100.jpg 768w" sizes="auto, (max-width: 943px) 100vw, 943px" /></figure>
</div>


<p class="wp-block-paragraph">J&rsquo;ai parlé en début de cette partie que j&rsquo;avais utilisé l&rsquo;outil au delà de son but initial et c&rsquo;est vrai. L&rsquo;enregistrement des sessions vidéos me permet de réaliser simplement mes supports de formation professionnels comme personnels. Cela va largement mieux que le classique <strong>Win+G</strong> chez Microsoft 🙂  </p>



<p class="wp-block-paragraph">Je conçois que c&rsquo;est une partie plutôt longue et que j&rsquo;ai encore une fois fait de multiples digressions. Cependant, l&rsquo;aspect sécurité sur un sujet tel que celui-là joue un rôle primordiale. Cette partie doit être considéré comme une base de référence et non comme une source bête et méchante d&rsquo;implémentation.</p>



<p class="wp-block-paragraph">La partie qui va suivre sera plus courte et vise à créer les premières ressources sur notre environnement GUACAMOLE.</p>



<h2 class="wp-block-heading">Sources</h2>



<ul class="wp-block-list">
<li><a href="https://letsencrypt.org/docs/client-options/">Let&rsquo;s Encrypt : API OVH</a></li>



<li><a href="https://letsencrypt.org/fr/docs/challenge-types/">Let&rsquo;s Encrypt : Challenge</a></li>



<li><a href="https://guacamole.apache.org/doc/gug/totp-auth.html">GUACAMOLE : MFA TOTP</a></li>



<li><a href="https://guacamole.apache.org/doc/gug/auth-ban.html">GUACAMOLE : Lock Brut Force</a></li>



<li><a href="https://guacamole.apache.org/doc/gug/auth-restrict.html">GUACAMOLE : Login &amp; Connexion Restriction</a></li>



<li><a href="https://guacamole.apache.org/doc/gug/recording-playback.html">GUACAMOLE : Record Vidéo</a></li>
</ul>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><a href="https://erwanguillemard.com/apps-guacamole-partie-2-pratique/">Guacamole : Pratique<br>&lt;-</a></td><td class="has-text-align-center" data-align="center"><a href="https://erwanguillemard.com/apps-guacamole/">Apps Guacamole</a></td><td class="has-text-align-center" data-align="center"><a href="https://erwanguillemard.com/apps-guacamole-partie-4-configuration/">Guacamole : Configuration <br>-&gt;</a></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>


<ol class="wp-block-footnotes"><li id="1d1b664b-fe9b-4f72-b7ce-8b0d333554eb"><strong>HTTP :</strong> HyperText Transfert Protocol <a href="#1d1b664b-fe9b-4f72-b7ce-8b0d333554eb-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="d8064460-ab9c-4361-be16-8b9e269c6ea1"><strong>FAI :</strong> Fournisseur d&rsquo;Accès Internet <a href="#d8064460-ab9c-4361-be16-8b9e269c6ea1-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="da6a3665-8bb8-4564-81de-6944a53fa63f"><strong>DynDNS :</strong> DNS Dynamique <a href="#da6a3665-8bb8-4564-81de-6944a53fa63f-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="3f8f4f63-2794-4c80-81b9-6c4df62451df"><strong>NAT :</strong> Network Area Translation <a href="#3f8f4f63-2794-4c80-81b9-6c4df62451df-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="efc6f9f4-1895-49d7-9093-503ac015744b"><strong>PAT :</strong> Port Area Translation <a href="#efc6f9f4-1895-49d7-9093-503ac015744b-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="06bc6f10-60cf-4a95-9e53-418dd9bd9030"><strong>HTTPS :</strong> HyperText Transfert Protocol Secure  <a href="#06bc6f10-60cf-4a95-9e53-418dd9bd9030-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="d37ad423-ddde-4a53-9efd-f26627e564d0"><strong>UTM :</strong> Unified Thread Management <a href="#d37ad423-ddde-4a53-9efd-f26627e564d0-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="874d7f0f-180e-4855-9334-5b4b5ea7bdfd"><strong>API :</strong> Application Programming Interface <a href="#874d7f0f-180e-4855-9334-5b4b5ea7bdfd-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="f85f6906-3604-4087-a9c2-2501348606b6"><strong>DCV :</strong> Domain Control Validation <a href="#f85f6906-3604-4087-a9c2-2501348606b6-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="e613d56d-2675-4037-9a68-fd6043e9af50"><strong>TXT :</strong> Texte <a href="#e613d56d-2675-4037-9a68-fd6043e9af50-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li><li id="2549ae88-d682-4a1a-940a-3a532d5e6049"><strong>DNS :</strong> Domain Name Server <a href="#2549ae88-d682-4a1a-940a-3a532d5e6049-link" aria-label="Aller à la note de bas de page 11">↩︎</a></li><li id="dc7b3eff-f283-40bd-b431-dc18b5fabcba"><strong>INI :</strong> INItialization <a href="#dc7b3eff-f283-40bd-b431-dc18b5fabcba-link" aria-label="Aller à la note de bas de page 12">↩︎</a></li><li id="cf99568a-b38b-4b89-94d9-b0d1b1895aa4"><strong>ACME :</strong> Automated Certificate Management Environment (et non A Company Making Everything 🙂 )  <a href="#cf99568a-b38b-4b89-94d9-b0d1b1895aa4-link" aria-label="Aller à la note de bas de page 13">↩︎</a></li><li id="99acdab5-e69d-4084-9859-c65f1a649ab8"><strong>SSL :</strong> Secure Sockets Layer <a href="#99acdab5-e69d-4084-9859-c65f1a649ab8-link" aria-label="Aller à la note de bas de page 14">↩︎</a></li><li id="6a64ecd2-3302-444b-b0fe-074f05c75cf8"><strong>MIME :</strong> Multipurpose Internet Mail Extensions <a href="#6a64ecd2-3302-444b-b0fe-074f05c75cf8-link" aria-label="Aller à la note de bas de page 15">↩︎</a></li><li id="86d578bc-73b7-4f60-9781-5ec04d6f6dae"><strong>XSS :</strong> Cross-Site Scripting <a href="#86d578bc-73b7-4f60-9781-5ec04d6f6dae-link" aria-label="Aller à la note de bas de page 16">↩︎</a></li><li id="38a062d8-c34a-4b3a-8571-d3b04d9cae15"><strong>MITM :</strong> Man In The Middle <a href="#38a062d8-c34a-4b3a-8571-d3b04d9cae15-link" aria-label="Aller à la note de bas de page 17">↩︎</a></li><li id="ac21f214-3392-48ad-b5ea-3eba0d6ef1e5"><strong>IP :</strong> Internet Protocol <a href="#ac21f214-3392-48ad-b5ea-3eba0d6ef1e5-link" aria-label="Aller à la note de bas de page 18">↩︎</a></li><li id="44096659-cfa5-4994-ae3e-18f6772f65a5"><strong>VM :</strong> Virtual Machine <a href="#44096659-cfa5-4994-ae3e-18f6772f65a5-link" aria-label="Aller à la note de bas de page 19">↩︎</a></li><li id="7ca3db41-4a12-4737-84fd-d2942f4a3a26"><strong>URL :</strong> Uniform Resource Locator <a href="#7ca3db41-4a12-4737-84fd-d2942f4a3a26-link" aria-label="Aller à la note de bas de page 20">↩︎</a></li><li id="1b0a556b-75d7-4fd3-86fb-e0f74ac4ea3f"><strong>AD :</strong> Active Directory <a href="#1b0a556b-75d7-4fd3-86fb-e0f74ac4ea3f-link" aria-label="Aller à la note de bas de page 21">↩︎</a></li><li id="7c4d3a1f-9316-4c7c-b0a5-e380f170455a"><strong>SAML :</strong> Security Assertion Markup Language <a href="#7c4d3a1f-9316-4c7c-b0a5-e380f170455a-link" aria-label="Aller à la note de bas de page 22">↩︎</a></li><li id="790f9e58-020c-43d8-8404-e0efdc245d26"><strong>SSO :</strong> Single Sign-On <a href="#790f9e58-020c-43d8-8404-e0efdc245d26-link" aria-label="Aller à la note de bas de page 23">↩︎</a></li><li id="8b7814d8-8d08-447c-9910-048d75261ab4"><strong>MFA :</strong> Multi Factors Authentication <a href="#8b7814d8-8d08-447c-9910-048d75261ab4-link" aria-label="Aller à la note de bas de page 24">↩︎</a></li><li id="8fcee9f0-caf6-4aad-b186-01eb02d87f2a"><strong>RBAC :</strong>  Roles Based Access <a href="#8fcee9f0-caf6-4aad-b186-01eb02d87f2a-link" aria-label="Aller à la note de bas de page 25">↩︎</a></li><li id="316a44ac-8136-4881-8831-49e2286bcd77"><strong>RSSI :</strong> Responsable Sécurité des Systèmes d&rsquo;Information <a href="#316a44ac-8136-4881-8831-49e2286bcd77-link" aria-label="Aller à la note de bas de page 26">↩︎</a></li><li id="fa18feb0-e8c3-46f9-9fef-48c9e5db66ef"><strong>IAM :</strong> Identity Access Management <a href="#fa18feb0-e8c3-46f9-9fef-48c9e5db66ef-link" aria-label="Aller à la note de bas de page 27">↩︎</a></li><li id="3bed5515-9227-4db9-9741-b8dda1b78ada"><strong>JAR :</strong> Java ARchive  <a href="#3bed5515-9227-4db9-9741-b8dda1b78ada-link" aria-label="Aller à la note de bas de page 28">↩︎</a></li></ol>


<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Apps &#8211; GUACAMOLE Partie 2 : Pratique</title>
		<link>https://erwanguillemard.com/apps-guacamole-partie-2-pratique/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sat, 15 Aug 2026 09:38:23 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Bastion]]></category>
		<category><![CDATA[Guacamole]]></category>
		<category><![CDATA[Securité]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3873</guid>

					<description><![CDATA[Cet article, notamment la partie pratique a été un sacré défi. J&#8217;ai presque déposé les armes. J&#8217;ai fait un pas en avant puis deux en arrière. Pourquoi c&#8217;est vraiment si compliqué que ça d&#8217;installer Guacamole ? Non pas compliqué du tout, mais j&#8217;ai voulu faire les choses « simples » pour changer. Je n&#8217;ai pas souhaité installer...]]></description>
										<content:encoded><![CDATA[


<p class="wp-block-paragraph">Cet article, notamment la partie pratique a été un sacré défi. J&rsquo;ai presque déposé les armes. J&rsquo;ai fait un pas en avant puis deux en arrière. </p>



<p class="has-text-align-center wp-block-paragraph"><strong>Pourquoi c&rsquo;est vraiment si compliqué que ça d&rsquo;installer Guacamole ?</strong></p>



<p class="wp-block-paragraph">Non pas compliqué du tout, mais j&rsquo;ai voulu faire les choses « simples » pour changer. Je n&rsquo;ai pas souhaité installer Tomcat depuis le gestionnaire de package mais installer ce dernier depuis les sources et donc il ne faut pas suivre bêtement le guide Guacamole.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="496" class="wp-image-3901" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_013_tescatlipoca.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_013_tescatlipoca.jpg 550w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_013_tescatlipoca-300x271.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td>J&rsquo;ai tellement fumé des méninges que Tezcatlipoca n&rsquo;était pas loin de me couper les ailes et de me pousser à l&rsquo;exil&#8230; (Oui je pars en délire sur le monde amérindien et la culture mexicaine).</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Mais bon le sacrifice en vaut largement la chandelle car c&rsquo;est au bout de tout cela que je vais trouver mon El Dorado à l&rsquo;inverse de <a href="https://www.youtube.com/watch?v=EPMqeEElqik&amp;list=RDEPMqeEElqik&amp;start_radio=1">Cortés</a>.</p>



<p class="wp-block-paragraph">Normalement, si vous suivez ce guide et l&rsquo;ensemble des références vous devriez avoir un système bien durci. J&rsquo;aimerais d&rsquo;ailleurs bien trouver quelqu&rsquo;un pour pentester mon système.</p>



<p class="wp-block-paragraph">Place à l&rsquo;action !</p>



<h2 class="wp-block-heading">Dépendances</h2>



<p class="wp-block-paragraph">Pour les dépendances, j&rsquo;ai décidé de ne pas mélanger les sujets. Après réflexion, ayant déjà réalisé un article sur MariaDB, je me suis dit que j&rsquo;allais faire de même pour Tomcat et faire tout simplement une référence à ces derniers dans ce billet. Cela devrait rendre plus digeste le déploiement.</p>



<h3 class="wp-block-heading">SGBD : MariaDB</h3>



<p class="wp-block-paragraph">Pour la procédure, c&rsquo;est par là que ça se passe : <a href="https://erwanguillemard.com/apps-mariadb/">Lien</a></p>



<p class="wp-block-paragraph">Concernant la configuration de la BDD<sup data-fn="7c2942cf-d54c-44ad-b7a3-7203d1946b9d" class="fn"><a href="#7c2942cf-d54c-44ad-b7a3-7203d1946b9d" id="7c2942cf-d54c-44ad-b7a3-7203d1946b9d-link">1</a></sup> et des Users nous aborderons ce point dans la partie configuration.</p>



<h3 class="wp-block-heading">Tomcat</h3>



<p class="wp-block-paragraph">Pour la procédure, c&rsquo;est par là que ça se passe : <a href="https://erwanguillemard.com/apps-tomcat/">Lien</a> (Que d&rsquo;originalité&#8230; Merci, je sais).</p>



<h2 class="wp-block-heading">Guacamole</h2>



<p class="wp-block-paragraph">L&rsquo;installation se déroulera en deux temps. Un temps pour le serveur Guacamole et un second pour l&rsquo;application.</p>



<h3 class="wp-block-heading">Guacamole &#8211; Server</h3>



<p class="wp-block-paragraph">Toujours pour faire simple, je vais installer l&rsquo;application nativement et donc compiler cette dernière. Pour rester cohérent, je vais installer Guacamole à côté de Tomcat sous <strong>/opt</strong>.</p>



<p class="wp-block-paragraph">Qui dit installation par compilation dit ? Création d&rsquo;un groupe et utilisateur dédié à notre daemon Guacamole. Les SysAdmin qui font tout tourner en tant que root, je ne sais pas comment vous faites niveau sécu et diag de vos logs&#8230;</p>



<p class="wp-block-paragraph">Créons le groupe et l&rsquo;utilisateur de service guacamole</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-64b7390e158d513383cd396618d828c1"><code><strong>$ sudo groupadd --system guacamole
$ sudo useradd --system --gid guacamole --shell /sbin/nologin \
--home-dir /var/lib/guacd guacamole

$sudo mkdir -p /var/lib/guacd
$sudo chown -R guacamole:guacamole /var/lib/guacd
$sudo chmod 750 /var/lib/guacd</strong></code></pre>



<p class="wp-block-paragraph">Je vais plus loin en définissant le home du compte de service dans <strong>/var/lib/guacd</strong>. Il convient également de définir les bonnes permissions sur le répertoire home.</p>



<p class="wp-block-paragraph">Comme dit plus haut, nous allons installer notre daemon guacamole sous <strong>/opt</strong>, donc nous devons créer le répertoire adéquat.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-04ae1ea9040c0a4802d9f7a13ec015b8"><code><strong>$ sudo mkdir /opt/guacamole
$ cd /opt/guacamole</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="550" height="115" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_100_directory.jpg" alt="" class="wp-image-3904" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_100_directory.jpg 550w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_100_directory-300x63.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></figure>
</div>


<p class="wp-block-paragraph">Nous sommes maintenant parés pour l&rsquo;installation.</p>



<h4 class="wp-block-heading">Dépendances</h4>



<p class="wp-block-paragraph">Le daemon Guacamole (que nous appellerons <strong>guacd</strong>) nécessite des dépendances dont certaines se trouvent dans le répo en développement. Il faut ajouter ou plutôt autoriser les packages en développement CRB<sup data-fn="9efcccd1-2508-4d93-ac20-eef67e1a614f" class="fn"><a href="#9efcccd1-2508-4d93-ac20-eef67e1a614f" id="9efcccd1-2508-4d93-ac20-eef67e1a614f-link">2</a></sup>. En règle générale, si nous sommes amenés à réaliser des compilations, il est préférable d&rsquo;activer le repository.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-79b557913788fc681d721546835933bd"><code><strong>$ sudo crb enable</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="819" height="212" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_101_CRB.jpg" alt="" class="wp-image-3905" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_101_CRB.jpg 819w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_101_CRB-300x78.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_101_CRB-768x199.jpg 768w" sizes="auto, (max-width: 819px) 100vw, 819px" /></figure>
</div>


<p class="wp-block-paragraph">Le repository est bien présent. Il nous faut maintenant installer les dépendances en cours de développement (le fameux <strong>*-devel</strong> dans les noms des paquets). Il est possible selon les distributions que les noms changent.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-b7a8131f6e00eda3809d24710ac0e690"><code><strong>$ sudo dnf install cairo-devel libjpeg-turbo-devel libpng-devel libtool libuuid-devel</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="938" height="418" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_102_dnfinstall.jpg" alt="" class="wp-image-3907" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_102_dnfinstall.jpg 938w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_102_dnfinstall-300x134.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_102_dnfinstall-768x342.jpg 768w" sizes="auto, (max-width: 938px) 100vw, 938px" /></figure>
</div>


<p class="wp-block-paragraph">Niveau dépendance pour la compilation nous sommes au poil. Reste toutefois les dépendances propres à Guacamole pour se connecter aux ressources ainsi que pour l&rsquo;usage de certaines fonctionnalités. Pour ce faire, il va falloir ajouter un repo pour les packages vidéo (mpeg), rdp, ssh etc.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-358cbbfff05ca8514d3d1b5da0894413"><code><strong>$ sudo dnf install --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-$(rpm -E %rhel).noarch.rpm https://mirrors.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-$(rpm -E %rhel).noarch.rpm</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="943" height="466" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_103_0_repoFusion.jpg" alt="" class="wp-image-3908" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_103_0_repoFusion.jpg 943w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_103_0_repoFusion-300x148.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_103_0_repoFusion-768x380.jpg 768w" sizes="auto, (max-width: 943px) 100vw, 943px" /></figure>
</div>


<p class="wp-block-paragraph">Nous ne sommes pas obligés d&rsquo;installer toutes les fonctionnalités présentes dans Guacamole. Pour ma part je ne souhaite utiliser Guacamole que pour établir des connexions RDP<sup data-fn="b400116c-81e6-4d19-88c0-9f9d5a76be6e" class="fn"><a href="#b400116c-81e6-4d19-88c0-9f9d5a76be6e" id="b400116c-81e6-4d19-88c0-9f9d5a76be6e-link">3</a></sup> et SSH<sup data-fn="155684ad-5349-4aff-aa64-b2c2aaef4ca7" class="fn"><a href="#155684ad-5349-4aff-aa64-b2c2aaef4ca7" id="155684ad-5349-4aff-aa64-b2c2aaef4ca7-link">4</a></sup>. J&rsquo;ai également besoin des dépendances pour enregistrer les flux vidéo. Je n&rsquo;ai nullement besoin de VNC<sup data-fn="b7d49061-6b97-436d-8729-b823a03c6377" class="fn"><a href="#b7d49061-6b97-436d-8729-b823a03c6377" id="b7d49061-6b97-436d-8729-b823a03c6377-link">5</a></sup>, les websockets pour Kubernetes ou de telnet.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-7ddbb67d1b1d82a24767915b6dffc661"><code><strong>$ sudo dnf install ffmpeg-devel freerdp-devel pango-devel libssh2-devel openssl-devel libwebp-devel</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="938" height="429" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_103_1_repoFusion.jpg" alt="" class="wp-image-3909" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_103_1_repoFusion.jpg 938w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_103_1_repoFusion-300x137.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_103_1_repoFusion-768x351.jpg 768w" sizes="auto, (max-width: 938px) 100vw, 938px" /></figure>
</div>


<p class="wp-block-paragraph">Et voilà, c&rsquo;est tout. Nous avons déjà passé pas mal de temps ensemble déjà non ? Et bien il faut savoir que nous n&rsquo;avons pas encore réellement commencé à jouer avec Guacamole. Nous avons juste tourné autour.</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Là s&rsquo;arrêtent les dépendances, Ici commence Guacamole ! </strong></p>



<h4 class="wp-block-heading">Installation</h4>



<p class="wp-block-paragraph">L&rsquo;installation se passe par le téléchargement du package <strong>guacamole-server-1.6.0.tar.gz</strong> dans sa dernière version.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3873_58f774-c9 kt-accordion-has-4-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3873_da1da3-25"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>1 &#8211; Téléchargement</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">J&rsquo;ai pour habitude d&rsquo;utiliser <strong>curl </strong>et non <strong>wget</strong>, <strong>wget </strong>n&rsquo;étant pas nativement déployé sur RockyLinux. Bref, nous retrouverons cette commande tout au long de ce billet. C&rsquo;est pourquoi j&rsquo;expliquerai qu&rsquo;une seule fois les arguments de cette commande.</p>



<ul class="wp-block-list">
<li><strong>-L</strong> : Permet d&rsquo;autoriser les liens annexes lors du téléchargement</li>



<li><strong>&#8211;output-dir</strong> : Définir le répertoire où doit être stocké le fichier téléchargé</li>



<li><strong>-O</strong> : Préciser l&rsquo;URL<sup data-fn="40df8dc7-7e6c-451d-ae9b-4a20ee0eb140" class="fn"><a href="#40df8dc7-7e6c-451d-ae9b-4a20ee0eb140" id="40df8dc7-7e6c-451d-ae9b-4a20ee0eb140-link">6</a></sup> de l&rsquo;élément que nous voulons télécharger</li>
</ul>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-d2b86e8d48cce6be63b85aa1a6cecb5c"><code><strong>$ sudo curl -L --output-dir /opt/guacamole -O https://apache.org/dyn/closer.lua/guacamole/1.6.0/source/guacamole-server-1.6.0.tar.gz?action=download</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="940" height="130" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_104_curl.jpg" alt="" class="wp-image-3911" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_104_curl.jpg 940w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_104_curl-300x41.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_104_curl-768x106.jpg 768w" sizes="auto, (max-width: 940px) 100vw, 940px" /></figure>
</div>


<p class="wp-block-paragraph">Idem que pour l&rsquo;explication de la commande, j&rsquo;ai pour habitude de toujours vérifier les empreintes des éléments téléchargés.</p>



<p class="wp-block-paragraph">Pour deux raisons :</p>



<ul class="wp-block-list">
<li>Vérifier que la ressource n&rsquo;a pas été altérée</li>



<li>Vérifier que la ressource est complète</li>
</ul>



<p class="wp-block-paragraph">Je ne mettrai pas à chaque fois cette commande dans les multiples téléchargements qui vont être réalisés. Toutefois vous avez les éléments et savez comment faire, si vous l&rsquo;ignoriez 🙂</p>



<p class="wp-block-paragraph"></p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-0abb1b48eb6644c9ec077a09d9be9ab4"><code><strong>$ sha256sum /opt/guacamole/guacamole-server-1.6.0.tar.gz</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="941" height="65" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_105_SHA265.jpg" alt="" class="wp-image-3912" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_105_SHA265.jpg 941w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_105_SHA265-300x21.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_105_SHA265-768x53.jpg 768w" sizes="auto, (max-width: 941px) 100vw, 941px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3873_27bb67-5c"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>2 &#8211; Extraction</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Le hash est conforme. Hourra. Hourra ?! Nous pouvons donc extraire l&rsquo;archive tar.gz. Attention où vous êtes, vous devez être pour plus de simplicité dans <strong>/opt/guacamole</strong> 🙂</p>



<p class="wp-block-paragraph"></p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-c6b95000ef0a78171459bb674d1379ac"><code><strong>$ tar -xzf guacamole-server-1.6.0.tar.gz</strong></code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="941" height="273" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_106_untar.jpg" alt="" class="wp-image-3914" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_106_untar.jpg 941w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_106_untar-300x87.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_106_untar-768x223.jpg 768w" sizes="auto, (max-width: 941px) 100vw, 941px" /></figure>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3873_d66b97-72"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>3 &#8211; Compilation, Installation</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Déplacez-vous dans le répertoire que nous venons d&rsquo;extraire, puis lancez la configuration pour vérifier que tout est conforme et qu&rsquo;il ne manque pas une dépendance, la compilation afin que le MakeFile soit généré puis l&rsquo;installation de Guacamole.</p>



<p class="wp-block-paragraph">La dernière commande va mettre à jour les bibliothèques système et va mettre à jour le cache des liens symboliques. Sinon, nos programmes ne trouveront pas les bonnes bibliothèques.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-15dfe9be0973d4b369bee8f08c276ced"><code><strong>$ cd guacamole-server-1.6.0
$ ./configure</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="941" height="256" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_107_0_configure.jpg" alt="" class="wp-image-3915" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_107_0_configure.jpg 941w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_107_0_configure-300x82.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_107_0_configure-768x209.jpg 768w" sizes="auto, (max-width: 941px) 100vw, 941px" /><figcaption class="wp-element-caption">0 &#8211; Configure Start</figcaption></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="695" height="864" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_107_1_configure.jpg" alt="" class="wp-image-3916" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_107_1_configure.jpg 695w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_107_1_configure-241x300.jpg 241w" sizes="auto, (max-width: 695px) 100vw, 695px" /><figcaption class="wp-element-caption">1 &#8211; Configure Summary</figcaption></figure>
</div>


<p class="wp-block-paragraph">Nous avons donc le résultat que nous souhaitons et pas d&rsquo;erreur. La petite synthèse en fin de notre commande nous rassure quant à ce que nous allons réaliser comme opération. Certains SysAdmin vous diront que la compilation c&rsquo;est ce qu&rsquo;il y a de plus safe. C&rsquo;est la mentalité de la branche Slackware. J&rsquo;avais une ancienne connaissance de cette école et je pense que je vais m&rsquo;y mettre également.</p>



<p class="wp-block-paragraph"></p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-f1ec982c7cc40127288945407e1e9aaa"><code><strong>$ make
$ make install
$ ldconfig</strong></code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="940" height="260" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_108_make.jpg" alt="" class="wp-image-3917" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_108_make.jpg 940w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_108_make-300x83.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_108_make-768x212.jpg 768w" sizes="auto, (max-width: 940px) 100vw, 940px" /><figcaption class="wp-element-caption">2 &#8211; Make</figcaption></figure>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3873_bef4a8-ef"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>4 &#8211; Guacamole &amp; Systemd</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">L&rsquo;un des points négatifs de compiler ces applications c&rsquo;est que rien n&rsquo;est fait automatiquement comme lors de l&rsquo;usage de commandes dnf install par exemple. Et donc là il va falloir enregistrer notre service dans systemd afin que celui-ci puisse être démarré, arrêté, redémarré manuellement ou automatiquement.</p>



<p class="wp-block-paragraph">Pour cela, rien de plus simple, il suffit de créer le fichier sous <strong>/etc/systemd/system/</strong></p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-8fa5081d97727a397ed5e1d6e68d4132"><code><strong>$ sudo vim /etc/systemd/system/guacd.service</strong></code></pre>



<p class="wp-block-paragraph">Puis de renseigner ce dernier comme suit :</p>



<pre class="wp-block-code"><code>&#91;Unit]
Description=Guacamole proxy daemon (guacd)
After=network.target

&#91;Service]
Type=simple
User=guacamole
Group=guacamole

ExecStart=/usr/local/sbin/guacd -f -b 127.0.0.1 -l 4822

Restart=on-failure

#Hardening
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectControlGroups=true
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
MemoryDenyWriteExecute=true
LockPersonality=true

#Limiter accès filesystem
ReadWritePaths=/var/lib/guacd

&#91;Install]
WantedBy=multi-user.target
</code></pre>



<p class="wp-block-paragraph">Il faut garder ce fichier en tête. Car comme vous pouvez le constater, il y a une part de hardening sur laquelle, je reviendrai plus tard.</p>



<p class="wp-block-paragraph">Il ne reste plus qu&rsquo;à recharger le gestionnaire systemd puis à lancer notre daemon Guacamole. Si ce dernier est démarré, nous pouvons le configurer pour démarrer automatiquement.</p>



<p class="wp-block-paragraph"></p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-f1a46af99aabf968a38f885c2b400a41"><code><strong>$ sudo systemctl daemon-reload</strong>
<strong>$ sudo systemctl enable guacd
$ sudo systemctl start guacd</strong></code></pre>
</div></div></div>
</div></div></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Le plus gros du chemin a été fait. Notre daemon Guacamole est fonctionnel et opérationnel.</p>



<h3 class="wp-block-heading">Guacamole &#8211; Client</h3>



<p class="wp-block-paragraph">Là encore une fois, j&rsquo;ai voulu faire bien et je me suis tellement compliqué la vie que j&rsquo;ai décidé d&rsquo;abandonner.</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Donc tu nous lâches à la moitié du chemin ? Tu aurais pu nous informer avant non tu crois pas ? Espèce d&rsquo;enf**ré ! </strong></p>



<p class="wp-block-paragraph">Je comprends que dit comme ça, cela peut porter à confusion. En réalité, je vais mettre deux méthodes pour utiliser Guacamole. L&rsquo;une via la compilation du client (qui m&rsquo;a frustré) et le téléchargement de l&rsquo;application directement. Comme ça libre à vous de reprendre mes travaux là où je les ai stoppés.</p>



<h4 class="wp-block-heading">Installation</h4>



<p class="wp-block-paragraph">J&rsquo;ai dans un premier temps voulu compiler mon client Guacamole comme j&rsquo;ai compilé mon serveur Guacamole. Jusque-là, logique non ? Puis lors de la compilation ça fail sur une librairie java&#8230; Je me farcis donc les logs de compilation et me rend compte que cela est dû à la génération de la javadoc&#8230; Après investigation, il est possible de bypass cette erreur en excluant la partie documentation.</p>



<p class="wp-block-paragraph">J&rsquo;ai lâché l&rsquo;affaire à ce moment-là. Frustré. J&rsquo;aurais pu persévérer mais voyez-vous, je sais que le mieux est l&rsquo;ennemi du bien. Donc, pour ne pas tomber dans le piège du perfectionniste qui aura un paquet fonctionnel mais possiblement avec des dysfonctionnements à moyen ou longs termes, j&rsquo;ai décidé de changer mon fusil d&rsquo;épaule et d&rsquo;appeler <a href="https://www.youtube.com/watch?v=XOAiHsFVvtw&amp;list=RDXOAiHsFVvtw&amp;start_radio=1">Zorro</a>.</p>



<p class="wp-block-paragraph">J&rsquo;ai donc pris la dure décision de télécharger directement l&rsquo;application au point <strong>.war</strong> depuis le site officiel.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-7ad4a5fe4018b9d543a83a0f77d03f9d"><code><strong>$ sudo curl -L --output-dir /tmp -O https://apache.org/dyn/closer.lua/guacamole/1.6.0/binary/guacamole-1.6.0.war?action=download

$ sha256sum /guacamole/guacamole-1.6.0.war</strong></code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="939" height="151" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_200_dLWar.jpg" alt="" class="wp-image-3923" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_200_dLWar.jpg 939w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_200_dLWar-300x48.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_200_dLWar-768x124.jpg 768w" sizes="auto, (max-width: 939px) 100vw, 939px" /></figure>



<p class="wp-block-paragraph">Une fois télécharger, il convient alors de déplacer le fichier directement dans le répertoire webapps de tomcat. Vous noterez que j&rsquo;ai renommé le <strong>guacamole-1.6.0.war</strong> en <strong>guacamole.war</strong>. Cela aura son importance dans notre URL d&rsquo;accès. Il est nécessaire de définir la propriété a l&rsquo;utilisateur de service tomcat sur notre application. Sinon elle ne pourra pas être lancé par Tomcat.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-a64310c19659bfc9e071c0d172beb6f6"><code><strong>$ cp /tmp/guacamole-1.6.0.war /opt/tomcat/webapps/guacamole.war
$ chown tomcat:tomcat /opt/tomcat/webapps/guacamole.war</strong></code></pre>



<p class="wp-block-paragraph">Et maintenant c&rsquo;est terminée pour Guacamole. Le reste sera que de la configuration&#8230;</p>



<h2 class="wp-block-heading">Configuration</h2>



<p class="wp-block-paragraph">Il va falloir être rigoureux car la configuration à la moindre erreur peut devenir aussi punitive qu&rsquo;un mauvais pattern dans un fromsoftware&#8230; Oui je suis de ce genre de type à prendre du plaisir sur les Souls Like, à la limite du masochisme&#8230; 🙂</p>



<p class="wp-block-paragraph">Le commencement sera donc de créer le répertoire de notre service guacamole. Ce répertoire contiendra le fichier de configuration ainsi que le répertoire propre aux extensions ainsi que le répertoire pour les bibliothèques.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-25c6494550bf789913b0d8f7707a2b50"><code><strong>$ sudo mkdir /etc/guacamole</strong>
<strong>$ sudo mkdir /etc/guacamole/{extensions,lib}</strong></code></pre>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3873_c78d7c-50 kt-accordion-has-4-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3873_b6250d-36"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>SGBD &#8211; MariaDB</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Il subsiste un petite putass**ie pour le connecteur MariaDB avec Guacamole. Je me suis dit et en suivant le guide officiel qu&rsquo;utilisant MariaDB il me faudrait uniquement le connecteur Java MariaDB&#8230; <a href="https://www.youtube.com/watch?v=d4JMep1LcJo">Erreur Grave</a> dirait Coluche&#8230;</p>



<p class="wp-block-paragraph">Bref, j&rsquo;ai installé le paquet depuis le repo puis j&rsquo;ai déplacer le .jar dans le répertoire <strong>/etc/guacamole/lib</strong> (avec les bons droits).</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-fa9f7f383b6e2e246f393503e65b0e5b"><code><strong>$ sudo dnf install mariadb-java-client</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="937" height="335" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_305_connecteur.jpg" alt="" class="wp-image-3926" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_305_connecteur.jpg 937w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_305_connecteur-300x107.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_305_connecteur-768x275.jpg 768w" sizes="auto, (max-width: 937px) 100vw, 937px" /></figure>
</div>


<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-1da9f2184fbbae5708755528babe7a07"><code><strong>#Où est installé le paquet
$ sudo rpm -ql mariadb-java-client | grep jar

$ sudo ln -s /usr/lib/java/mariadb-java-client.jar /etc/guacamole/lib/</strong>
<strong>$ sudo chown tomcat:tomcat -R /etc/guacamole/lib/</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="943" height="253" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_306_LNConnector.jpg" alt="" class="wp-image-3927" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_306_LNConnector.jpg 943w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_306_LNConnector-300x80.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_306_LNConnector-768x206.jpg 768w" sizes="auto, (max-width: 943px) 100vw, 943px" /></figure>
</div>


<p class="wp-block-paragraph">Pourtant si je regarde les logs catalina.out il nous sera retourné que l&rsquo;application Guacamole n&rsquo;arrive pas a établir de connexion avec la base de données. Et là croyez-moi, j&rsquo;ai pas mal cherché si c&rsquo;était côté hardening de mon côté ou si c&rsquo;était sur la couche 7. Et donc conclusion ? Il nous faut le connecteur java pour mysql également&#8230;</p>



<p class="wp-block-paragraph">Bref, on télécharge le connecteur sur le site officiel mysql, on check le hash, on décompresse et l&rsquo;on déplace le <strong>.jar</strong> sous <strong>/etc/guacamole/lib</strong>.</p>



<p class="wp-block-paragraph"></p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-86ec379ed7cc86242c26d8edd2ee916e"><code><strong>$ sudo curl -L --output-dir /tmp -O https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-j-9.7.0.tar.gz
$ sudo tar -xzf /tmp/mysql-connector-j-9.7.0.tar.gz
$ sudo cp /tmp/mysql-connector-j-9.7.0/mysql-connector-j-9.7.0.jar /etc/guacamole/lib/
$ sudo chown tomcat:tomcat -R /etc/guacamole/lib/</strong></code></pre>



<p class="wp-block-paragraph">Nous allons préparer et configurer notre base de données Mariadb. Connectons nous directement à notre BDD en root.</p>



<p class="wp-block-paragraph"></p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-0368bc02b4bb9932032a5557a2e3162d"><code><strong>$ sudo mysql -u root -p</strong></code></pre>



<p class="wp-block-paragraph">A partir de maintenant toutes les commandes seront des commandes SQLs<sup data-fn="98093110-c3b8-4621-8975-26a6269bf85d" class="fn"><a href="#98093110-c3b8-4621-8975-26a6269bf85d" id="98093110-c3b8-4621-8975-26a6269bf85d-link">7</a></sup>. Je vais créer la base de données (vide naturellement) et définir notre utilisateurs et les permissions de ce dernier sur la base.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-12-background-color has-text-color has-background has-link-color wp-elements-0afb39cf32affbedc3c8cd5aa903c2b3"><code><strong>&gt; CREATE DATABASE guacamole_db;</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="527" height="58" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_300_MariaDB.jpg" alt="" class="wp-image-3929" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_300_MariaDB.jpg 527w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_300_MariaDB-300x33.jpg 300w" sizes="auto, (max-width: 527px) 100vw, 527px" /></figure>
</div>


<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-12-background-color has-text-color has-background has-link-color wp-elements-dc6f4f54cd4700b9ce3a8720ce486e65"><code><strong>&gt; CREATE USER 'guacamole_user'@'localhost' IDENTIFIED BY 'some_password';

&gt; GRANT SELECT,INSERT,UPDATE,DELETE ON guacamole_db.* TO 'guacamole_user'@'localhost';

&gt; FLUSH PRIVILEGES;</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="940" height="218" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_304_grantPrivileged.jpg" alt="" class="wp-image-3930" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_304_grantPrivileged.jpg 940w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_304_grantPrivileged-300x70.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_304_grantPrivileged-768x178.jpg 768w" sizes="auto, (max-width: 940px) 100vw, 940px" /></figure>
</div>


<p class="wp-block-paragraph">Naturellement, libre à vous de changer le nom de la BDD ou de l&rsquo;utilisateur ainsi que du mot de passe. Une fois les privilèges flush, quittez le terminal et vérifiez que vous pouvez vous connecter à la base de données guacamole avec notre utilisateur fraichement créé. (Oui la capture d&rsquo;écran n&rsquo;est pas le reflet exact des commandes tapées :)).</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-ce8af25977d5794efe3843a5346c4e9a"><code><strong>$ mysql -u guacamole_r-one -p -b guacamole_db</strong></code></pre>



<p class="wp-block-paragraph">Maintenant que notre instance est prête, allons chercher la structure ainsi que le connecteur JDBC<sup data-fn="2f694f38-23cc-4fce-a971-66001650dc6a" class="fn"><a href="#2f694f38-23cc-4fce-a971-66001650dc6a" id="2f694f38-23cc-4fce-a971-66001650dc6a-link">8</a></sup> guacamole. Pour se faire téléchargeons le connecteur depuis le site officiel Guacamole :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-1fd686b491cfcd4dd205a31c0e290343"><code><strong>$ sudo curl -L --output-dir /tmp -O https://apache.org/dyn/closer.lua/guacamole/1.6.0/binary/guacamole-auth-jdbc-1.6.0.tar.gz?action=download</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="940" height="150" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_301_jdbcDL.jpg" alt="" class="wp-image-3934" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_301_jdbcDL.jpg 940w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_301_jdbcDL-300x48.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_301_jdbcDL-768x123.jpg 768w" sizes="auto, (max-width: 940px) 100vw, 940px" /></figure>
</div>


<p class="wp-block-paragraph">Vérifions son empreinte puis réalisons l&rsquo;extraction. Attention où vous vous situez 🙂</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-ee9056732e5fc1c72583ebefa689116b"><code><strong>$ tar -xzf guacamole-auth-jdbc-1.6.0.tar.gz</strong></code></pre>



<p class="wp-block-paragraph">Déplacez vous dans le répertoire fraichement extrait <strong>/tmp/guacamole-auth-jdbc-1.6.0/mysql</strong>. Naturellement si vous avez choisi en SGBD<sup data-fn="05ded032-d1b6-4279-9d13-2532f3eb9be7" class="fn"><a href="#05ded032-d1b6-4279-9d13-2532f3eb9be7" id="05ded032-d1b6-4279-9d13-2532f3eb9be7-link">9</a></sup> PostgreSQL ou MSSQL<sup data-fn="bb219ad0-003f-4448-81c3-d063eda9ac32" class="fn"><a href="#bb219ad0-003f-4448-81c3-d063eda9ac32" id="bb219ad0-003f-4448-81c3-d063eda9ac32-link">10</a></sup> vous n&rsquo;allez pas dans ce répertoire. Il ne faut pas suivre le guide aveuglément&#8230; A l&rsquo;intérieur du répertoire nous avons deux fichier *.sql. Un fichier qui va créer la structure de notre BDD et le second fichier pour créer l&rsquo;utilisateur guacadmin. Exécutons les deux fichiers.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-d8caca65188d9f9ec4eacc4df0a40e6f"><code><strong>$ cd /tmp/guacamole-auth-jdbc-1.6.0/mysql
$ cat schema/*.sql | mysql -u root -p guacamole_db</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="901" height="70" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_302_initBDD-1.jpg" alt="" class="wp-image-3933" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_302_initBDD-1.jpg 901w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_302_initBDD-1-300x23.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_302_initBDD-1-768x60.jpg 768w" sizes="auto, (max-width: 901px) 100vw, 901px" /></figure>
</div>


<p class="wp-block-paragraph">Nous pouvons vérifier que tout est fonctionnel en affichant par exemple les tables de la BDD guacamole.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="732" height="719" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_303_checkBDD.jpg" alt="" class="wp-image-3935" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_303_checkBDD.jpg 732w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_303_checkBDD-300x295.jpg 300w" sizes="auto, (max-width: 732px) 100vw, 732px" /></figure>
</div>


<p class="wp-block-paragraph">Dernière étape pour en finir avec la configuration de la base de données, il nous faut déplacer le connecteur jdbc pour guacamole dans le répertoire /etc/guacamole/extensions.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-bd2f1b39a97eb6d6ee4fce12fb6b4266"><code><strong>$ cp /tmp/guacamole-auth-jdbc-1.6.0/mysql/guacamole-auth-jdbc-mysql-1.6.0.jar /etc/guacamole/extensions/</strong>
<strong>$ sudo chown tomcat:tomcat -R /etc/guacamole/extensions/</strong></code></pre>



<p class="wp-block-paragraph">Normalement nous avons fait le plus gros du travail. Le reste sera une parti de plaisir à côté de ça.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3873_27a9ab-93"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Serveur Web &#8211; Tomcat</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Maintenant il va falloir dire avec tact et diplomatie à notre serveur Tomcat les variables d&rsquo;environnement liées à Guacamole et où ce dernier doit aller chercher les ressources.</p>



<p class="wp-block-paragraph">Pour ce faire, nous allons créer un fichier setenv.sh sous le répertoire binaire de tomcat <strong>/opt/tomcat/bin</strong>.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-db9ec2d38a236b1f9fb22aabe566e0bc"><code><strong>$ sudo vim /opt/tomcat/bin/setenv.sh</strong></code></pre>



<p class="wp-block-paragraph">Nous précisons où pointe la variable <strong>GUACAMOLE_HOME</strong> puis nous allons mettre à jour sans écraser le contenu de la variable <strong>JAVA_OPTS</strong> pour définir la propriété système <strong>guacamole.home</strong> soit initialisé à <strong>/etc/guacamole</strong>.</p>



<pre class="wp-block-code"><code>GUACAMOLE_HOME=/etc/guacamole
export JAVA_OPTS="$JAVA_OPTS -Dguacamole.home=/etc/guacamole"</code></pre>



<p class="wp-block-paragraph">Nous ajustons les permissions pour que tomcat puisse exécuter le fichier.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-3a2a699320a8aad16f7d0d91c592dc32"><code><strong>$ sudo chgrp tomcat /opt/tomcat/bin/setenv.sh
$ sudo chmod 750 /opt/tomcat/bin/setenv.sh</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="848" height="722" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_401_tomcat_setenv_perm.jpg" alt="" class="wp-image-3940" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_401_tomcat_setenv_perm.jpg 848w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_401_tomcat_setenv_perm-300x255.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_401_tomcat_setenv_perm-768x654.jpg 768w" sizes="auto, (max-width: 848px) 100vw, 848px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3873_390f66-88"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Firewall</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Il nous faut autoriser notre application Guacamole a être accessible sur notre firewall. Il va donc falloir autoriser notre bon vieux protocole http sur le port 8080/tcp.</p>



<p class="has-text-align-center wp-block-paragraph"><strong>T&rsquo;es sérieux là ?</strong></p>



<p class="wp-block-paragraph">Oui bah c&rsquo;est comme ça que ça vous plaise ou non. Il n&rsquo;y a pas de possibilité avec Guacamole de faire du HTTPS<sup data-fn="9374d202-1135-4b05-a2e4-5d2a359478fa" class="fn"><a href="#9374d202-1135-4b05-a2e4-5d2a359478fa" id="9374d202-1135-4b05-a2e4-5d2a359478fa-link">11</a></sup> nativement. Mais soyez certains que je vais remédier à cela dans la partie sécurité. Pour le moment nous nous suffirons de ça.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-978fdf9ca02b827f822fe1ce1d7cf8c7"><code><strong>$ sudo firewall-cmd --permanent --add-port=8080/tcp
$ sudo firewall-cmd --reload</strong></code></pre>



<p class="wp-block-paragraph"></p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3873_8f25b5-32"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Guacamole</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="has-text-align-center wp-block-paragraph"><strong><em>Dernière arrêt, Acapulco les enfants, terminus de notre voyage. Nous pourrons admirer les anges volants tout en admirant l&rsquo;animosité pacifique de l&rsquo;océan.</em></strong></p>



<p class="wp-block-paragraph">Nous allons créer le fichier de propriété de guacamole pour que ce dernier puisse se connecter aux différentes ressources (bdd, serveur guacamole). Ce fichier évoluera dans la partie suivante.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-252b335ba48c3415a945705f46d2a24e"><code><strong>$ vim /etc/guacamole/guacamole.properties</strong></code></pre>



<pre class="wp-block-code"><code><strong># Paramètres MariaDB</strong>
mysql-driver: mysql
mysql-hostname: 127.0.0.1
mysql-port: 3306
mysql-database: guacamole_db
mysql-username: guacamole_user
mysql-password: VotreMotDePasseFort

<strong># Paramètres guacd</strong>
guacd-hostname: localhost
guacd-port: 4822</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="378" height="230" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_500_guac_settings.jpg" alt="" class="wp-image-3941" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_500_guac_settings.jpg 378w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_500_guac_settings-300x183.jpg 300w" sizes="auto, (max-width: 378px) 100vw, 378px" /></figure>
</div>


<p class="wp-block-paragraph">Il nous faut alors définir les droits et s&rsquo;assurer du bon niveau de sécurité.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-cee37b7379dcf8d615efa0f6bd98a9af"><code><strong>$ sudo chmod 640 /etc/guacamole/guacamole.properties
$ sudo chmod 755 /etc/guacamole
$ sudo chown -R tomcat:tomcat /etc/guacamole
$ sudo systemctl restart tomcat guacd</strong></code></pre>



<p class="wp-block-paragraph"></p>
</div></div></div>
</div></div></div>



<p class="wp-block-paragraph"></p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>C&rsquo;est maintenant l&rsquo;heure de se servir une cerveza bien fraiche avec quelques nachos et de taper dans notre Guacamole pour voir quel gout il a !</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="733" class="wp-image-3821" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_017_000_font-scaled.jpg" alt="https://unsplash.com/fr/photos/plat-cuisine-m3M8TC_3rGY" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_017_000_font-scaled.jpg 1920w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_017_000_font-225x300.jpg 225w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_017_000_font-768x1024.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_017_000_font-1152x1536.jpg 1152w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_017_000_font-1536x2048.jpg 1536w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<h2 class="wp-block-heading">Test</h2>



<p class="wp-block-paragraph">Il ne faut pas oublier de passer sur notre UTM<sup data-fn="38cf0c03-2fef-4dd6-a100-09a588fab741" class="fn"><a href="#38cf0c03-2fef-4dd6-a100-09a588fab741" id="38cf0c03-2fef-4dd6-a100-09a588fab741-link">12</a></sup> en amont pour autoriser dans un premier temps notre rebond à communiquer avec notre VM<sup data-fn="59f7d05b-d404-40f6-9b19-9d7756c3ed84" class="fn"><a href="#59f7d05b-d404-40f6-9b19-9d7756c3ed84" id="59f7d05b-d404-40f6-9b19-9d7756c3ed84-link">13</a></sup> Guacamole sur le port 8080/tcp.</p>



<p class="wp-block-paragraph">Dans notre navigateur web, rendons-nous à l&rsquo;URL <strong>http://ip-srv:8080/guacamole</strong>. Si tout va bien, nous devrions voir s&rsquo;afficher la page d&rsquo;authentification de notre serveur Guacamole.</p>



<p class="wp-block-paragraph">Authentifions nous avec le login et mot de passe par défaut <strong>guacadmin/guacadmin</strong>.</p>


<div class="kb-gallery-wrap-id-3873_b958b5-1c alignnone wp-block-kadence-advancedgallery"><div class="kb-gallery-ul kb-gallery-non-static kb-gallery-type-slider kb-gallery-id-3873_b958b5-1c kb-gallery-caption-style-bottom-hover kb-gallery-filter-none" data-image-filter="none" data-lightbox-caption="true"><div class="kt-blocks-carousel splide kt-carousel-container-dotstyle-dark kt-carousel-arrowstyle-whiteondark kt-carousel-dotstyle-dark kb-slider-group-arrow kb-slider-arrow-position-center" data-slider-anim-speed="400" data-slider-scroll="1" data-slider-arrows="true" data-slider-fade="true" data-slider-dots="true" data-slider-type="slider" data-slider-hover-pause="false" data-slider-auto="" data-slider-speed="7000" data-show-pause-button="false"><div class="splide__track"><ul class="kt-blocks-carousel-init kb-blocks-slider splide__list"><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land43 kb-has-image-ratio-land43" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_0-942x1024.jpg" width="942" height="1024" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_0.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_0.jpg" data-id="3944" class="wp-image-3944 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_0-942x1024.jpg 942w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_0-276x300.jpg 276w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_0-768x835.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_0.jpg 955w" sizes="auto, (max-width: 942px) 100vw, 942px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land43 kb-has-image-ratio-land43" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_1-941x1024.jpg" width="941" height="1024" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_1.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_1.jpg" data-id="3945" class="wp-image-3945 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_1-941x1024.jpg 941w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_1-276x300.jpg 276w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_1-768x836.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_1.jpg 954w" sizes="auto, (max-width: 941px) 100vw, 941px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land43 kb-has-image-ratio-land43" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_2-943x1024.jpg" width="943" height="1024" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_2.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_2.jpg" data-id="3946" class="wp-image-3946 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_2-943x1024.jpg 943w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_2-276x300.jpg 276w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_2-768x834.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_800_ban_001_2.jpg 955w" sizes="auto, (max-width: 943px) 100vw, 943px" /></div></div></figure></div></div></li></ul></div></div></div></div>


<p class="wp-block-paragraph">Il ne nous reste alors qu&rsquo;à créer un nouvel super administrateur et désactiver/supprimer le compte <strong>guacadmin </strong>par sécurité. Dans l&rsquo;état, notre bastion est opérationnel. Il faut tout de même sécuriser et renforcer la sécurité de ce dernier.</p>



<p class="wp-block-paragraph">Je ne pense pas utile de me poser sur la configuration de création et de connexion à une ressource. Je ferai cela dans une partie 4 dans une vidéo de démo.</p>



<p class="wp-block-paragraph">Place à l&rsquo;assaisonnement de notre serveur Guacamole, pardon à sa sécurisation 🙂 </p>



<h2 class="wp-block-heading">Sources</h2>



<ul class="wp-block-list">
<li><a href="https://erwanguillemard.com/apps-mariadb/">Erwan GUILLEMARD : Billet MariaDB</a></li>



<li><a href="https://erwanguillemard.com/apps-tomcat/">Erwan GUILLEMARD : Billet Tomcat</a></li>
</ul>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><a href="https://erwanguillemard.com/apps-guacamole-partie-1-theorie/">Guacamole : Théorie<br>&lt;-</a></td><td class="has-text-align-center" data-align="center"><a href="https://erwanguillemard.com/apps-guacamole/">Apps Guacamole</a></td><td class="has-text-align-center" data-align="center"><a href="https://erwanguillemard.com/apps-guacamole-partie-3-securisation/">Guacamole : Sécurité </a><br><a href="https://erwanguillemard.com/apps-guacamole-partie-3-securisation/">-&gt;</a></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>


<ol class="wp-block-footnotes"><li id="7c2942cf-d54c-44ad-b7a3-7203d1946b9d"><strong>BDD :</strong> Base De Données <a href="#7c2942cf-d54c-44ad-b7a3-7203d1946b9d-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="9efcccd1-2508-4d93-ac20-eef67e1a614f"><strong>CRB :</strong> CodeReady Builder <a href="#9efcccd1-2508-4d93-ac20-eef67e1a614f-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="b400116c-81e6-4d19-88c0-9f9d5a76be6e"><strong>RDP :</strong> Remote Desktop Protocol <a href="#b400116c-81e6-4d19-88c0-9f9d5a76be6e-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="155684ad-5349-4aff-aa64-b2c2aaef4ca7"><strong>SSH :</strong> Secure SHell <a href="#155684ad-5349-4aff-aa64-b2c2aaef4ca7-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="b7d49061-6b97-436d-8729-b823a03c6377"><strong>VNC :</strong> Virtual Network Computing <a href="#b7d49061-6b97-436d-8729-b823a03c6377-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="40df8dc7-7e6c-451d-ae9b-4a20ee0eb140"><strong>URL :</strong> Uniform Resource Locator <a href="#40df8dc7-7e6c-451d-ae9b-4a20ee0eb140-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="98093110-c3b8-4621-8975-26a6269bf85d"><strong>SQL :</strong> Structured Query Language <a href="#98093110-c3b8-4621-8975-26a6269bf85d-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="2f694f38-23cc-4fce-a971-66001650dc6a"><strong>JDBC :</strong> Java DataBase Connectivity <a href="#2f694f38-23cc-4fce-a971-66001650dc6a-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="05ded032-d1b6-4279-9d13-2532f3eb9be7"><strong>SGBD :</strong> Système de Gestion de Base de Données <a href="#05ded032-d1b6-4279-9d13-2532f3eb9be7-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="bb219ad0-003f-4448-81c3-d063eda9ac32"><strong>MSSQL :</strong> Microsoft Server SQL <a href="#bb219ad0-003f-4448-81c3-d063eda9ac32-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li><li id="9374d202-1135-4b05-a2e4-5d2a359478fa"><strong>HTTPS :</strong> HyperText Transfer Protocol Secure <a href="#9374d202-1135-4b05-a2e4-5d2a359478fa-link" aria-label="Aller à la note de bas de page 11">↩︎</a></li><li id="38cf0c03-2fef-4dd6-a100-09a588fab741"><strong>UTM :</strong> Unified Thread Management <a href="#38cf0c03-2fef-4dd6-a100-09a588fab741-link" aria-label="Aller à la note de bas de page 12">↩︎</a></li><li id="59f7d05b-d404-40f6-9b19-9d7756c3ed84"><strong>VM :</strong> Virtual Machine <a href="#59f7d05b-d404-40f6-9b19-9d7756c3ed84-link" aria-label="Aller à la note de bas de page 13">↩︎</a></li></ol>


<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Apps &#8211; GUACAMOLE Partie 1: Théorie</title>
		<link>https://erwanguillemard.com/apps-guacamole-partie-1-theorie/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sat, 15 Aug 2026 09:38:14 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Bastion]]></category>
		<category><![CDATA[Guacamole]]></category>
		<category><![CDATA[Securité]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3870</guid>

					<description><![CDATA[Avant de rentrer dans le vif du sujet je pense que nous devons regarder et poser la définition d&#8217;un bastion. Bastion (nom masculin) : Ouvrage polygonal à deux faces et deux flancs en saillie sur une enceinte ; Point fort d&#8217;une ligne de défense ; Ce qui forme une défense solide, un soutien inébranlable de...]]></description>
										<content:encoded><![CDATA[


<p class="wp-block-paragraph">Avant de rentrer dans le vif du sujet je pense que nous devons regarder et poser la définition d&rsquo;un bastion.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="has-small-font-size wp-block-paragraph"><em><strong>Bastion (nom masculin) :</strong>  Ouvrage polygonal à deux faces et deux flancs en saillie sur une enceinte ; <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">Point fort d&rsquo;une ligne de défense</mark> ; <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">Ce qui forme une défense solide, un soutien inébranlable de quelque chose</mark></em></p>
<cite><a href="https://www.larousse.fr/dictionnaires/francais/bastion/8296">Dictionnaire Larousse</a></cite></blockquote>



<p class="wp-block-paragraph">La solution Guacamole se pose donc comme une solution qui doit servir de défense solide et soutien inébranlable à notre SI<sup data-fn="28c81d49-2940-4fd8-a831-172bab6c5719" class="fn"><a href="#28c81d49-2940-4fd8-a831-172bab6c5719" id="28c81d49-2940-4fd8-a831-172bab6c5719-link">1</a></sup>. Il doit être avec notre UTM<sup data-fn="38dca966-172f-4cee-a1bd-420ab6834b75" class="fn"><a href="#38dca966-172f-4cee-a1bd-420ab6834b75" id="38dca966-172f-4cee-a1bd-420ab6834b75-link">2</a></sup> le point fort de notre ligne de j&rsquo;ose l&rsquo;écrire cyberdéfense (que c&rsquo;est beau) !</p>



<p class="wp-block-paragraph">Son objectif ? Contrôler les flux d&rsquo;entrée et les accès à notre SI.</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Et le comment Monsieur ? Ca nous allons voir la théorie dans cette partie ainsi que l&rsquo;architecture</strong></p>



<h2 class="wp-block-heading">Qué es el Guacamole?</h2>



<p class="wp-block-paragraph">Le premier qui me dit que c&rsquo;est un plat culinaire, je lui balance mon avocat commis d&rsquo;office ! En plus je ne sais pas ce que j&rsquo;ai écrit en titre de partie, je n&rsquo;ai pas appris l&rsquo;espagnol. Toutefois cela ne me semble pas faux&#8230; </p>



<p class="wp-block-paragraph">Bref, après cette entrée en matière plus que discutable, Guacamole est né de Michael Jumper en 2010 (sous le nom RealMint) dont l&rsquo;objectif principal est de mettre en place une passerelle d&rsquo;accès sans client pour se connecter à des ressources via les protocoles RDP<sup data-fn="4efcabfd-d520-4f5f-87e9-5f1375afa3e6" class="fn"><a href="#4efcabfd-d520-4f5f-87e9-5f1375afa3e6" id="4efcabfd-d520-4f5f-87e9-5f1375afa3e6-link">3</a></sup>, VNC<sup data-fn="ee9537bf-208d-4cd1-ac2c-8b876b102644" class="fn"><a href="#ee9537bf-208d-4cd1-ac2c-8b876b102644" id="ee9537bf-208d-4cd1-ac2c-8b876b102644-link">4</a></sup>, SSH<sup data-fn="8437d457-00ab-41ae-a45f-139ad955e3f7" class="fn"><a href="#8437d457-00ab-41ae-a45f-139ad955e3f7" id="8437d457-00ab-41ae-a45f-139ad955e3f7-link">5</a></sup> à travers un navigateur internet. C&rsquo;est en 2016 que le projet est donné à la Fondation Apache qui reprend le projet top level en incubation . C&rsquo;est alors en 2017 naît Guacamole sous licence Apache voit le jour.</p>



<p class="wp-block-paragraph">Guacamole étant utilisé à des fins internes et étant issu du monde libre (opensource), il est difficile de définir l&rsquo;utilisation de la solution dans le monde de l&rsquo;IT. Pour autant, cela reste une bonne solution pour se passer d&rsquo;outils de prise en main à distance.</p>



<p class="wp-block-paragraph">Cependant, il est nécessaire de garder à l&rsquo;esprit qu&rsquo;un outil opensource n&rsquo;est pas gratuit. <strong>Ah bon ? Tu as sorti la CB ? </strong>Ce que je veux dire par là et pour l&rsquo;avoir expliqué maintes et maintes fois à des clients, DGs<sup data-fn="e443b816-1818-4243-92a3-b73b68a767dd" class="fn"><a href="#e443b816-1818-4243-92a3-b73b68a767dd" id="e443b816-1818-4243-92a3-b73b68a767dd-link">6</a></sup> et autres DSIs<sup data-fn="9371f14a-3bf2-41fd-83fb-44569521ea3c" class="fn"><a href="#9371f14a-3bf2-41fd-83fb-44569521ea3c" id="9371f14a-3bf2-41fd-83fb-44569521ea3c-link">7</a></sup> la solution est gratuite, mais le temps ETP<sup data-fn="641e5ee2-0c1e-4d98-9581-5c8f82bfa23a" class="fn"><a href="#641e5ee2-0c1e-4d98-9581-5c8f82bfa23a" id="641e5ee2-0c1e-4d98-9581-5c8f82bfa23a-link">8</a></sup> ne l&rsquo;est pas. Certaines fois il est préférable de lâcher un petit billet et avoir un support que ne rien lâcher et subir une indisponibilité de service qui dure, qui dure&#8230;</p>



<h2 class="wp-block-heading">Architecture &amp; Best Practices</h2>



<p class="wp-block-paragraph">Pour cette partie, je pense qu&rsquo;il va falloir préciser une nouvelle fois que la petite infrastructure que j&rsquo;ai ne me permet pas de respecter les règles de bonnes pratiques. Mais encore une fois, je ne passerai pas outre et je propose de voir l&rsquo;architecture de mes rêves et l&rsquo;architecture du moindre mal que je vais mettre en place 🙂</p>



<p class="wp-block-paragraph">Guacamole est une application que se décompose en deux parties, une partie application web et une partie serveur.</p>



<p class="wp-block-paragraph">Donc qui dit application et serveur dit d&rsquo;office un front et un back end. De plus ai-je écrit web ?</p>



<p class="wp-block-paragraph">Effectivement, l&rsquo;application guacamole est un .jar. Un servlet dans notre jargon, soit une application web sous java. Il nous faudra donc un serveur tomcat et java.</p>



<p class="wp-block-paragraph">Les données guacamole sont stockées dans un SGBD<sup data-fn="ee626178-54eb-4241-acab-b6585b66fdbc" class="fn"><a href="#ee626178-54eb-4241-acab-b6585b66fdbc" id="ee626178-54eb-4241-acab-b6585b66fdbc-link">9</a></sup>. Là dessus, Guacamole est sympa, le choix nous est laissé de choisir entre PostgreSQL, MySQL/Mariadb et MSSQL<sup data-fn="5a561c5e-bd35-4b29-a4b1-c412f7eb4fe3" class="fn"><a href="#5a561c5e-bd35-4b29-a4b1-c412f7eb4fe3" id="5a561c5e-bd35-4b29-a4b1-c412f7eb4fe3-link">10</a></sup>.</p>



<p class="wp-block-paragraph">Donc cela nous donnerait, un serveur en DMZ pour la partie Web avec l&rsquo;application Guacamole et un serveur Guacamole isolé avec la base de données.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="651" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_010_archiBP-1024x651.jpg" alt="" class="wp-image-3890" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_010_archiBP-1024x651.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_010_archiBP-300x191.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_010_archiBP-768x488.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_010_archiBP.jpg 1125w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Le schéma ci-haut, serait applicable si c&rsquo;était en entreprise et encore, je dédierai un serveur pour la partie SQL pour éviter toutes corruptions de données éventuelles. Mais voilà, je n&rsquo;ai pas de ressources (ou du moins, il ne m&rsquo;en reste plus des masses avec les VMs qui poussent dans tous les sens&#8230; J&rsquo;ose même claquer un LOL des familles 🙂 <strong>#vieuxmec</strong>).</p>



<p class="wp-block-paragraph">Donc ma cible sera plutôt ce type d&rsquo;infrastructure All-In-One.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="565" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_011_Myarchi-1024x565.jpg" alt="" class="wp-image-3891" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_011_Myarchi-1024x565.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_011_Myarchi-300x166.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_011_Myarchi-768x424.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_011_Myarchi.jpg 1058w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Oui niveau sécurité, je mise tout sur mon firewall et son proxy et le hardening de mon OS<sup data-fn="9f57aec2-099b-4020-9b4f-c162b16c9ff5" class="fn"><a href="#9f57aec2-099b-4020-9b4f-c162b16c9ff5" id="9f57aec2-099b-4020-9b4f-c162b16c9ff5-link">11</a></sup> Linux. Par contre je reviendrai en détail sur certains mécanismes de sécurité que j&rsquo;ai mis en place.</p>



<h2 class="wp-block-heading">Performances et Recommandations</h2>



<p class="wp-block-paragraph">Côté performances tout va dépendre de notre environnement et de notre usage. Si c&rsquo;est juste pour une personne pour intervenir sur un serveur, autant ne pas trop se prendre la tête. A l&rsquo;inverse, si c&rsquo;est pour faire de la grosse production avec de la charge, une architecture avec répartition de charge sera nécessaire (LoadBalancing pour les intimes).</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:100%">
<figure class="wp-block-table is-style-stripes"><table class="has-fixed-layout"><tbody><tr><td class="has-text-align-center" data-align="center"></td><td class="has-text-align-center" data-align="center"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-11-color">Petite Infra</mark></strong></td><td class="has-text-align-center" data-align="center"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-14-color">PME</mark></strong></td><td class="has-text-align-center" data-align="center"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">Entreprise</mark></strong></td></tr><tr><td class="has-text-align-center" data-align="center"><strong># Session Simultanée</strong></td><td class="has-text-align-center" data-align="center">5 &#8211; 10</td><td class="has-text-align-center" data-align="center">20 &#8211; 50</td><td class="has-text-align-center" data-align="center">+100</td></tr><tr><td class="has-text-align-center" data-align="center"><strong>Guacamole Apps</strong></td><td class="has-text-align-center" data-align="center">2 vCPU<br>4 Go RAM</td><td class="has-text-align-center" data-align="center">2vCPU<br>4 Go RAM </td><td class="has-text-align-center" data-align="center">4 vCPU<br>8 Go RAM</td></tr><tr><td class="has-text-align-center" data-align="center"><strong>Guacamole Server</strong></td><td class="has-text-align-center" data-align="center">N/A</td><td class="has-text-align-center" data-align="center">4 vCPU<br>8 Go RAM</td><td class="has-text-align-center" data-align="center">8-16 vCPU<br>16-32 Gio RAM</td></tr><tr><td class="has-text-align-center" data-align="center"><strong>BDD</strong></td><td class="has-text-align-center" data-align="center">N/A</td><td class="has-text-align-center" data-align="center">2vCPU<br>4 Go RAM</td><td class="has-text-align-center" data-align="center">4 vCPU<br>8 Go RAM</td></tr></tbody></table></figure>
</div>
</div>



<p class="wp-block-paragraph">Sympa les ressources hein ? Vous comprendrez qu&rsquo;entre deux petites tequilas frappées, je préfère la petite infra all in one ? 🙂</p>



<p class="has-text-align-center wp-block-paragraph"><strong>[Dans le cadre de la loi Evin, l&rsquo;abus d&rsquo;alcool est dangereux pour la santé et doit être consommé avec modération]</strong></p>



<p class="wp-block-paragraph">Je n&rsquo;aborde pas le sujet du stockage car ce dernier incombe à chacun de savoir ce qu&rsquo;il doit faire. Mais s&rsquo;il vous plaît éviter la mono partition et des tailles de disque ridicules. En d&rsquo;autres termes, ne soyez pas radin mais ne tombez pas non plus dans le surprovisionning.</p>



<h2 class="wp-block-heading">Les choix du gringo</h2>



<p class="wp-block-paragraph">C&rsquo;est autour d&rsquo;une petite <strong>cerveza </strong>des familles que j&rsquo;écris ces lignes (la <strong>San José</strong> ce n&rsquo;est pas ce que je préfère le plus au monde&#8230; Par contre j&rsquo;ai le souvenir d&rsquo;une petite <strong>mezcal </strong>direct du Mexique. Un délice), le gringo que je suis doit prendre des décisions.</p>



<p class="wp-block-paragraph">Il existe deux grands moyens d&rsquo;installer Guacamole&#8230; La version docker et la version application native. Je sais clairement que je ne vais pas me faire des amigos avec cet article. Je ne <strong>CROIS PAS</strong> en <strong>DOCKER</strong>. </p>



<p class="has-text-align-center wp-block-paragraph"><strong>Oui, bah je vous laisse râler</strong> <strong>et pester contre moi.</strong> <strong>Quitte à me balancer à <a href="https://www.youtube.com/watch?v=DwbG64YC-vQ">Machete</a>, je ne changerai pas d&rsquo;avis !</strong></p>



<p class="wp-block-paragraph">Pourquoi je ne crois pas en docker ? Docker et pour moi utile pour les environnements de développement. La conteneurisation est quelque chose qui a révolutionné le monde de l&rsquo;informatique mais je ne vois pas sa valeur ajoutée dans le monde de l&rsquo;infrastructure. Egalement et de ce que j&rsquo;ai pu constaté, rares sont les SysAdmins qui configurent et sécurisent proprement leurs environnements GNU/Linux alors imaginez la sécurisation en surcouche des conteneurs ? A maintenir dans le temps ce n&rsquo;est pas selon moi une solution viable. Alors oui c&rsquo;est rapide à déployer, mais personnellement cela ne m&rsquo;intéresse pas de réaliser ce genre de chose.</p>



<p class="wp-block-paragraph">J&rsquo;ai donc décidé de me casser les dents sur une installation native. Et là je peux vous dire que des choses j&rsquo;en ai apprises et des Stacks Traces Java dans les journaux j&rsquo;en ai mangé autant que je mange de <strong>quesadillas</strong>. <strong>Si Senor !</strong></p>



<p class="wp-block-paragraph">Côté SGBD, j&rsquo;ai décidé de repartir sur mon premier amour MariaDB. J&rsquo;avoue avoir longtemps hésité avec PostgreSQL ne pouvant me décider, j&rsquo;ai fait un plouf plouf avec ma fille. L&rsquo;otarie a gagné contre l&rsquo;éléphant.</p>



<p class="wp-block-paragraph">Donc résumons :</p>



<ul class="wp-block-list">
<li><strong>Serveur Guacamole :</strong>
<ul class="wp-block-list">
<li><strong>Système :</strong> RockyLinux 10
<ul class="wp-block-list">
<li>Durcissement ANSSI<sup data-fn="8ac40c20-a07e-418d-9074-84baf6b546ab" class="fn"><a href="#8ac40c20-a07e-418d-9074-84baf6b546ab" id="8ac40c20-a07e-418d-9074-84baf6b546ab-link">12</a></sup> de l&rsquo;OS</li>



<li>Disque dédié à l&rsquo;OS</li>



<li>Disque dédié à la BDD<sup data-fn="139dca8f-8946-4318-9fe0-34fb4dfc49d8" class="fn"><a href="#139dca8f-8946-4318-9fe0-34fb4dfc49d8" id="139dca8f-8946-4318-9fe0-34fb4dfc49d8-link">13</a></sup></li>



<li>Disque dédié aux enregistrements vidéos (<em>chutttt sinon c&rsquo;est vous spoiler&#8230;</em>)</li>
</ul>
</li>



<li><strong>Guacamole :</strong> version 1.6 [dernière en date]</li>



<li><strong>SGBD :</strong> MariaDB 15.X [dernière sous version en date]</li>



<li><strong>Tomcat :</strong> version 9.X [dernière sous version en date]
<ul class="wp-block-list">
<li><em><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">La version 10 n&rsquo;est pas compatible&#8230;</mark></em></li>
</ul>
</li>



<li><strong>JAVA :</strong> version 21</li>
</ul>
</li>
</ul>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Maintenant que nous avons tout ce qu&rsquo;il nous faut en guise d&rsquo;informations, il est temps de se lancer dans l&rsquo;aventure du déploiement de Guacamole et laissons nous pousser des ailes comme Quetzalcóatl et en route pour la partie suivante &lt;3</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="825" class="wp-image-3897" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_012_quetzalcoatl.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_012_quetzalcoatl.jpg 250w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_012_quetzalcoatl-200x300.jpg 200w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Oui, je ne parle pas de sécurité dans cette partie contrairement à certains de mes précédents billets. Le sujet étant assez important, j&rsquo;ai pris le parti de faire une partie complètement dédiée. C&rsquo;est pour vous montrer une fois encore que je ne veux pas prendre le sujet à la légère et qu&rsquo;il y a matière à dire et à faire.</p>



<h2 class="wp-block-heading">Modèle RACI</h2>



<p class="wp-block-paragraph">Je ne suis pas un grand habitué des matrices RACI. J&rsquo;ai toujours vu ces dernières comme un casse tête à rédiger (ce que j&rsquo;adore honnêtement) mais surtout comme une horreur à faire appliquer. Néanmoins au vu de la criticité de notre application et de ce que je chercher à implémenter, il me parait opportun et surtout cruciale de définir cette dernière. </p>



<p class="wp-block-paragraph">Je suis d&rsquo;accord, cela devrait être dans la partie sécurisation, mais personnellement mettre ce dernier en début de document/billet me parait plus important et de se donner la ligne à suivre.</p>


<div class="kb-table-container kb-table-container3870_71ea55-76 wp-block-kadence-table"><table class="kb-table kb-table3870_71ea55-76">
<tr class="kb-table-row kb-table-row3870_e8dcd4-e1">
<th  scope="col" class="kb-table-data kb-table-data3870_da6b0b-70">

<p class="wp-block-paragraph">Rôles</p>

</th>

<th  scope="col" class="kb-table-data kb-table-data3870_369e7d-e2">

<p class="wp-block-paragraph">Légendes</p>

</th>
</tr>

<tr class="kb-table-row kb-table-row3870_bde1f4-2c">
<td  class="kb-table-data kb-table-data3870_5bac75-a4">

<ul class="wp-block-list">
<li><strong><span style="text-decoration: underline;">AdminSys :</span></strong> Administrateur Système qui gére l&rsquo;infrastructure et l&rsquo;application Guacamole</li>



<li><strong><span style="text-decoration: underline;">AdminIAM :</span></strong> Administrateur qui gère les accès et habilitation</li>



<li><span style="text-decoration: underline;"><strong>RSSI :</strong></span> Responsable Sécurité des Systèmes d&rsquo;Information qui contrôle la conformité et la sécurité</li>



<li><span style="text-decoration: underline;"><strong>Helpdesk :</strong></span> Assistance utilisateur et exploitation quotidienne</li>



<li><span style="text-decoration: underline;"><strong>Auditeur :</strong></span> Vérification des traces et contrôles des conformitées</li>



<li><span style="text-decoration: underline;"><strong>Utilisateur :</strong></span> Utilisateur final</li>
</ul>

</td>

<td  class="kb-table-data kb-table-data3870_8eb0f0-e4">

<ul class="wp-block-list">
<li><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">R</mark></strong> : Responsible (réalise l&rsquo;action)</li>



<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-6-color"><strong>A</strong></mark> : Accountable (responsable qui valide)</li>



<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color"><strong>C</strong></mark> : Consulted</li>



<li><strong>I</strong> : Informed</li>
</ul>

</td>
</tr>
</table></div>


<p class="wp-block-paragraph">Ce qui me permet de définir la matrice suivante dans un monde idéal où l&rsquo;ensemble des services IT<sup data-fn="3fc5de99-8c0b-42f8-abb2-f59207c60691" class="fn"><a href="#3fc5de99-8c0b-42f8-abb2-f59207c60691" id="3fc5de99-8c0b-42f8-abb2-f59207c60691-link">14</a></sup> sont présents au sein d&rsquo;une organisation.</p>


<div class="kb-table-container kb-table-container3870_e5d4c8-b1 wp-block-kadence-table"><table class="kb-table kb-table3870_e5d4c8-b1">
<tr class="kb-table-row kb-table-row3870_3b58a8-81">
<th  scope="col" class="kb-table-data kb-table-data3870_abb795-9c">

<p class="wp-block-paragraph">Activité</p>

</th>

<th  scope="col" class="kb-table-data kb-table-data3870_df48f5-98">

<p class="wp-block-paragraph">AdminSys</p>

</th>

<th  scope="col" class="kb-table-data kb-table-data3870_3b294e-f2">

<p class="wp-block-paragraph">AdminIAM</p>

</th>

<th  scope="col" class="kb-table-data kb-table-data3870_032ab8-ef">

<p class="wp-block-paragraph">RSSI</p>

</th>

<th  scope="col" class="kb-table-data kb-table-data3870_5a1f94-36">

<p class="wp-block-paragraph">Helpdesk</p>

</th>

<th  scope="col" class="kb-table-data kb-table-data3870_43aad8-31">

<p class="wp-block-paragraph">Auditeur</p>

</th>

<th  scope="col" class="kb-table-data kb-table-data3870_d3989f-a6">

<p class="wp-block-paragraph">Utilisateur</p>

</th>
</tr>

<tr class="kb-table-row kb-table-row3870_4f7f01-27">
<td  class="kb-table-data kb-table-data3870_882a69-c0">

<p class="wp-block-paragraph">Installation de Guacamole</p>

</td>

<td  class="kb-table-data kb-table-data3870_ca084b-b7">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">R/A</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_497a76-5f">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_b15203-d2">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color">C</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_d3a9b8-b3">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_e71d07-42">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_54ae9a-3e">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row3870_9e1d2d-33">
<td  class="kb-table-data kb-table-data3870_cd3e78-18">

<p class="wp-block-paragraph">Mise à jour de la plateforme</p>

</td>

<td  class="kb-table-data kb-table-data3870_b2a1ba-b9">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">R/A</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_3feb50-74">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_d3cbba-d8">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color">C</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_c1edf6-1c">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_97d059-7b">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_0e7a6f-6c">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row3870_86d104-af">
<td  class="kb-table-data kb-table-data3870_112596-6f">

<p class="wp-block-paragraph">Configuration LDAP / SSO / MFA</p>

</td>

<td  class="kb-table-data kb-table-data3870_98828b-67">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">R</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_ae316e-b8">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-6-color">A</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_369b44-ab">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color">C</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_f5fee7-4b">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_99cd1f-f8">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_a6250c-14">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row3870_1fcd38-ef">
<td  class="kb-table-data kb-table-data3870_139a09-35">

<p class="wp-block-paragraph">Création des utilisateurs</p>

</td>

<td  class="kb-table-data kb-table-data3870_899942-8c">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_d1383d-4b">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">R/A</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_c306f6-9b">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color">C</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_29c8a5-aa">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color">C</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_e74921-d6">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_db304d-66">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row3870_96faf9-c2">
<td  class="kb-table-data kb-table-data3870_f1d889-81">

<p class="wp-block-paragraph">Gestion des groupes utilisateurs</p>

</td>

<td  class="kb-table-data kb-table-data3870_e5dabc-80">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_0b7553-73">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">R/A</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_fe2844-bd">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color">C</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_d2109e-40">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_92c3a7-b4">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_13b1f4-d5">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row3870_34e3fc-4c">
<td  class="kb-table-data kb-table-data3870_faae5f-2f">

<p class="wp-block-paragraph">Attribution des droits d’accès</p>

</td>

<td  class="kb-table-data kb-table-data3870_9b9d8b-5b">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color">C</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_924967-15">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">R/A</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_ce58d5-50">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color">C</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_2c88f2-a3">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_fa3c2a-0e">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_6609f5-7c">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row3870_1c0325-8c">
<td  class="kb-table-data kb-table-data3870_08fa1f-fa">

<p class="wp-block-paragraph">Création des connexions RDP/SSH/VNC</p>

</td>

<td  class="kb-table-data kb-table-data3870_df233f-61">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">R/A</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_552312-96">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color">C</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_71d33b-2f">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color">C</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_b2e458-24">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_7632bb-35">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_0f7f86-60">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row3870_d8ee94-39">
<td  class="kb-table-data kb-table-data3870_a91bd8-3c">

<p class="wp-block-paragraph">Création des groupes de connexions</p>

</td>

<td  class="kb-table-data kb-table-data3870_47fb83-ca">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">R/A</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_50d5c5-a6">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color">C</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_b907ae-e6">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_9c97d5-22">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_a603e5-12">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_3353d5-cc">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row3870_a106e0-2c">
<td  class="kb-table-data kb-table-data3870_dec2bc-c1">

<p class="wp-block-paragraph">Gestion des profils de partage</p>

</td>

<td  class="kb-table-data kb-table-data3870_8acc7f-65">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">R</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_801a50-6a">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color">C</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_31916a-00">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-6-color">A</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_e8619d-39">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color">C</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_7cd75a-34">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_0cc11b-6d">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row3870_f7b342-9c">
<td  class="kb-table-data kb-table-data3870_af871e-a6">

<p class="wp-block-paragraph">Supervision des sessions</p>

</td>

<td  class="kb-table-data kb-table-data3870_08756b-a9">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">R</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_dd8fc8-c4">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_d4bda0-2f">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-6-color">A</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_ab648c-16">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color">C</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_882c4c-ea">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_a27f1a-7d">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row3870_887902-d4">
<td  class="kb-table-data kb-table-data3870_a2aafc-a5">

<p class="wp-block-paragraph">Consultation des logs et audits</p>

</td>

<td  class="kb-table-data kb-table-data3870_5c6c60-40">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color">C</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_6eb91e-44">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_af124e-f7">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">R/A</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_33e73f-e5">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_a1319d-70">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color">C</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_80e67c-7a">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row3870_8b4f61-1b">
<td  class="kb-table-data kb-table-data3870_4be346-7f">

<p class="wp-block-paragraph">Réponse aux incidents de sécurité</p>

</td>

<td  class="kb-table-data kb-table-data3870_2e70d7-49">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">R</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_8b6beb-99">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color">C</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_fbea1e-16">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-6-color">A</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_46dfe5-a1">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color">C</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_969464-1d">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_aae161-fd">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row3870_5c0b3b-0f">
<td  class="kb-table-data kb-table-data3870_ad75a8-f6">

<p class="wp-block-paragraph">Support utilisateurs</p>

</td>

<td  class="kb-table-data kb-table-data3870_3437e9-68">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_6380ce-37">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_7144e7-5e">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_2073ec-54">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">R/A</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_c62a0f-01">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_cc01a3-55">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color">C</mark></p>

</td>
</tr>

<tr class="kb-table-row kb-table-row3870_6ddbbb-6d">
<td  class="kb-table-data kb-table-data3870_c96d8b-c5">

<p class="wp-block-paragraph">Révocation des accès</p>

</td>

<td  class="kb-table-data kb-table-data3870_0ebb81-cd">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_355d8f-a0">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">R/A</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_5bedfe-4c">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color">C</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_3bb419-76">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_d67ce5-90">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_bb0651-6d">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row3870_e9253e-79">
<td  class="kb-table-data kb-table-data3870_ef7b52-ba">

<p class="wp-block-paragraph">Sauvegarde et restauration</p>

</td>

<td  class="kb-table-data kb-table-data3870_68b0da-48">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">R/A</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_10e969-df">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_ff7d4d-06">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color">C</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_f8948f-73">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_949720-df">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_4394e0-20">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row3870_145ee4-0b">
<td  class="kb-table-data kb-table-data3870_4c9712-d0">

<p class="wp-block-paragraph">Contrôle de conformité</p>

</td>

<td  class="kb-table-data kb-table-data3870_360816-be">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_e70efc-78">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color">C</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_72fcce-8d">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">R</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_e4acc9-b0">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>

<td  class="kb-table-data kb-table-data3870_18d4d3-91">

<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-6-color">A</mark></p>

</td>

<td  class="kb-table-data kb-table-data3870_26ad1a-da">

<p class="has-text-align-center wp-block-paragraph">I</p>

</td>
</tr>
</table></div>


<h2 class="wp-block-heading">Source</h2>



<ul class="wp-block-list">
<li><a href="https://www.larousse.fr/dictionnaires/francais/bastion/8296">Larousse : définition bastion</a></li>



<li><a href="https://en.wikipedia.org/wiki/Apache_Guacamole">Wikipédia : Guacamole</a> </li>
</ul>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td></td><td class="has-text-align-center" data-align="center"><a href="https://erwanguillemard.com/apps-guacamole/">Apps Guacamole</a></td><td class="has-text-align-center" data-align="center"><a href="https://erwanguillemard.com/apps-guacamole-partie-2-pratique/">Guacamole : Pratique</a><br><a href="https://erwanguillemard.com/apps-guacamole-partie-2-pratique/">-&gt;</a></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>


<ol class="wp-block-footnotes"><li id="28c81d49-2940-4fd8-a831-172bab6c5719"><strong>SI :</strong> Système d&rsquo;Information <a href="#28c81d49-2940-4fd8-a831-172bab6c5719-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="38dca966-172f-4cee-a1bd-420ab6834b75"><strong>UTM :</strong> Unified Threat Management <a href="#38dca966-172f-4cee-a1bd-420ab6834b75-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="4efcabfd-d520-4f5f-87e9-5f1375afa3e6"><strong>RDP </strong>: Remote Desktop Protocol <a href="#4efcabfd-d520-4f5f-87e9-5f1375afa3e6-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="ee9537bf-208d-4cd1-ac2c-8b876b102644"><strong>VNC :</strong> Virtual Network Computing <a href="#ee9537bf-208d-4cd1-ac2c-8b876b102644-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="8437d457-00ab-41ae-a45f-139ad955e3f7"><strong>SSH :</strong> Secure SHell <a href="#8437d457-00ab-41ae-a45f-139ad955e3f7-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="e443b816-1818-4243-92a3-b73b68a767dd"><strong>DG :</strong> Directeur Général <a href="#e443b816-1818-4243-92a3-b73b68a767dd-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="9371f14a-3bf2-41fd-83fb-44569521ea3c"><strong>DSI :</strong> Directeur des Systèmes d&rsquo;Informations <a href="#9371f14a-3bf2-41fd-83fb-44569521ea3c-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="641e5ee2-0c1e-4d98-9581-5c8f82bfa23a"><strong>ETP :</strong> Employé Temps Plein <a href="#641e5ee2-0c1e-4d98-9581-5c8f82bfa23a-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="ee626178-54eb-4241-acab-b6585b66fdbc"><strong>SGBD :</strong> Système de Gestion de Base de Données <a href="#ee626178-54eb-4241-acab-b6585b66fdbc-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="5a561c5e-bd35-4b29-a4b1-c412f7eb4fe3"><strong>MSSQL :</strong> Microsoft Server SQL <a href="#5a561c5e-bd35-4b29-a4b1-c412f7eb4fe3-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li><li id="9f57aec2-099b-4020-9b4f-c162b16c9ff5"><strong>OS :</strong> Operating System <a href="#9f57aec2-099b-4020-9b4f-c162b16c9ff5-link" aria-label="Aller à la note de bas de page 11">↩︎</a></li><li id="8ac40c20-a07e-418d-9074-84baf6b546ab"><strong>ANSSI :</strong> Agence National de la Sécurité des Systèmes d&rsquo;Informations <a href="#8ac40c20-a07e-418d-9074-84baf6b546ab-link" aria-label="Aller à la note de bas de page 12">↩︎</a></li><li id="139dca8f-8946-4318-9fe0-34fb4dfc49d8"><strong>BDD :</strong> Base De Données <a href="#139dca8f-8946-4318-9fe0-34fb4dfc49d8-link" aria-label="Aller à la note de bas de page 13">↩︎</a></li><li id="3fc5de99-8c0b-42f8-abb2-f59207c60691"><strong>IT :</strong> Information Technologie <a href="#3fc5de99-8c0b-42f8-abb2-f59207c60691-link" aria-label="Aller à la note de bas de page 14">↩︎</a></li></ol>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Apps &#8211; GUACAMOLE</title>
		<link>https://erwanguillemard.com/apps-guacamole/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sat, 15 Aug 2026 09:38:05 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Bastion]]></category>
		<category><![CDATA[Guacamole]]></category>
		<category><![CDATA[Securité]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3751</guid>

					<description><![CDATA[La prise en main à distance sur les SIs est un sujet qui questionne toujours. Certains vous diront qu&#8217;il est question de sécurité, d&#8217;autres de flexibilité ou encore de disponibilité&#8230; C&#8217;est ainsi qu&#8217;un certain nombres d&#8217;équipes informatiques utilisent : Je vois cela d&#8217;un autre regard et sous un autre angle. Je veux parler du regard...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">La prise en main à distance sur les SIs<sup data-fn="b23a0fec-6c5b-46e0-8d6e-eeece1a2f766" class="fn"><a href="#b23a0fec-6c5b-46e0-8d6e-eeece1a2f766" id="b23a0fec-6c5b-46e0-8d6e-eeece1a2f766-link">1</a></sup> est un sujet qui questionne toujours. Certains vous diront qu&rsquo;il est question de sécurité, d&rsquo;autres de flexibilité ou encore de disponibilité&#8230;</p>



<p class="wp-block-paragraph">C&rsquo;est ainsi qu&rsquo;un certain nombres d&rsquo;équipes informatiques utilisent :</p>



<ul class="wp-block-list">
<li>VPN SSL<sup data-fn="451eaba6-4b2d-47cd-87ad-683a8801b884" class="fn"><a href="#451eaba6-4b2d-47cd-87ad-683a8801b884" id="451eaba6-4b2d-47cd-87ad-683a8801b884-link">2</a></sup></li>



<li>RDS<sup data-fn="d2294f0d-f3f5-438c-8056-dee10df02f95" class="fn"><a href="#d2294f0d-f3f5-438c-8056-dee10df02f95" id="d2294f0d-f3f5-438c-8056-dee10df02f95-link">3</a></sup> via TSGW<sup data-fn="e0d3d39a-a480-46c8-a565-400c3e99f864" class="fn"><a href="#e0d3d39a-a480-46c8-a565-400c3e99f864" id="e0d3d39a-a480-46c8-a565-400c3e99f864-link">4</a></sup></li>



<li>Solution de prise en main à distance (TeamViewer, LogMeIn, NinjaRMM et j&rsquo;en passe)</li>
</ul>



<p class="wp-block-paragraph">Je vois cela d&rsquo;un autre regard et sous un autre angle. Je veux parler du regard du contrôle, de l&rsquo;audit et de la non-répudiation ! Du respect du RGPD<sup data-fn="ffad01f9-20fe-4d7a-b264-a5a83f01c0c6" class="fn"><a href="#ffad01f9-20fe-4d7a-b264-a5a83f01c0c6" id="ffad01f9-20fe-4d7a-b264-a5a83f01c0c6-link">5</a></sup> et des données stockées. Oui, je fais partie de ces SysAdmins là, ceux qui croient en l&rsquo;ISO27001 et HDS<sup data-fn="658f9d5f-2a83-4303-9299-6ace8b6ea93a" class="fn"><a href="#658f9d5f-2a83-4303-9299-6ace8b6ea93a" id="658f9d5f-2a83-4303-9299-6ace8b6ea93a-link">6</a></sup>, ceux qui croient au BASTION &lt;3</p>



<p class="wp-block-paragraph">Je ne vais pas cracher sur TeamViewer car je l&rsquo;ai longtemps utilisé à des fins personnelles pour me connecter à mon lab, mais bon niveau sécurité c&rsquo;est loin d&rsquo;être fou et encore une fois, où sont mes données ? Et il est toujours borderline dans son utilisation commerciale ou non&#8230;</p>



<p class="wp-block-paragraph">Dans le monde professionnel, j&rsquo;ai eu le loisir d&rsquo;utiliser et d&rsquo;implémenter une solution française de BASTION. Cette solution est super (je n&rsquo;ai pas d&rsquo;action chez eux mais c&rsquo;est avec grand plaisir que je réaliserais de nouveau l&rsquo;implémentation de cette solution) et les équipes support et commercial sont très compétentes.</p>



<p class="has-text-align-center wp-block-paragraph"><strong><em>Quoi ? Le nom de la solution ? Cleanroom/Cyberelement par SYSTANCIA</em></strong></p>



<p class="has-text-align-left wp-block-paragraph">Mais voilà. Bien qu&rsquo;une super solution, moi pauvre petit AdminSys je ne peux pas me payer la solution voyez vous et bonjour l&rsquo;usage pour du lab. C&rsquo;est alors que j&rsquo;ai dû me tourner vers le monde de l&rsquo;open source&#8230;</p>



<p class="has-text-align-left wp-block-paragraph">J&rsquo;ai fait fumer mes méninges et avec <a href="https://www.youtube.com/watch?v=y-ewGIghpyo&amp;list=RDy-ewGIghpyo&amp;start_radio=1">la grosse Adrienne de mon talant</a> (où Montalant ? 🙂 ) je me suis lancé dans l&rsquo;implémentation d&rsquo;un bastion GUACAMOLE ! OLE !</p>



<p class="has-text-align-left wp-block-paragraph">En réalité, ce n&rsquo;est pas ma première tentative d&rsquo;implémentation du bastion Guacamole, mais je n&rsquo;ai jamais aimé l&rsquo;approche Docker et je n&rsquo;ai jamais eu le temps de vraiment étudier la solution. Pis là bah, je me suis dit c&rsquo;est le moment de réaliser ce que je n&rsquo;ai jamais réussi à concrétiser 🙂</p>





<h2 class="wp-block-heading">Avant-Propos</h2>



<p class="wp-block-paragraph">Cet article va être plutôt conséquent. Donc il est préférable de se prendre un petit pack de cerveza (pourquoi petit ?) pour ne pas se déshydrater pendant ce billet.</p>



<p class="wp-block-paragraph">Pour rendre ce dernier plus digeste, j&rsquo;ai pris le parti de scinder quelques fonctionnalités dans des billets dédiés et de couper l&rsquo;article en plusieurs sous-articles. L&rsquo;implémentation d&rsquo;un bastion nécessite un certain nombre de composants tiers et surtout une grande réflexion quant à l&rsquo;architecture et aux fonctionnalités.</p>



<p class="wp-block-paragraph">Bref, j&rsquo;ai fait le choix encore une fois de partir sur un environnement LINUX, RHEL<sup data-fn="067f23cc-88b8-45bc-bf6b-6bbb5ac4899d" class="fn"><a href="#067f23cc-88b8-45bc-bf6b-6bbb5ac4899d" id="067f23cc-88b8-45bc-bf6b-6bbb5ac4899d-link">7</a></sup> comme OS<sup data-fn="2fe2ddbd-72f5-40e2-9044-cfc779fee5bd" class="fn"><a href="#2fe2ddbd-72f5-40e2-9044-cfc779fee5bd" id="2fe2ddbd-72f5-40e2-9044-cfc779fee5bd-link">8</a></sup> et d&rsquo;appliquer comme d&rsquo;accoutumée le durcissement de l&rsquo;ANSSI<sup data-fn="a3a92c34-9ce0-428f-a6f8-cd58c62c570f" class="fn"><a href="#a3a92c34-9ce0-428f-a6f8-cd58c62c570f" id="a3a92c34-9ce0-428f-a6f8-cd58c62c570f-link">9</a></sup> pour les systèmes GNU/LINUX. Le bastion doit être le seul point d&rsquo;entrée de notre SI pour accéder à nos ressources. C&rsquo;est pourquoi je veux qu&rsquo;il soit le plus sécurisé possible. Je vais donc aller relativement loin dans la sécurisation et il n&rsquo;est donc pas impossible de se perdre en route. C&rsquo;est toutefois comme ça qu&rsquo;on apprend ! <a href="https://www.youtube.com/watch?v=wtGAHjqlnmo&amp;list=RDwtGAHjqlnmo&amp;start_radio=1">Il faut pour se trouver savoir se perdre sur des chemins de traverse</a> 🙂</p>



<p class="wp-block-paragraph">J&rsquo;ai beaucoup appris et ainsi, je souhaite vous partager mon expérience. </p>



<p class="has-text-align-center wp-block-paragraph"><strong><em>Señor, Señora, Ándale Ándale Arriba</em></strong> <strong>!</strong></p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="696" height="392" src="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_001_font.jpg" alt="" class="wp-image-3885" style="width:350px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_001_font.jpg 696w, https://erwanguillemard.com/wp-content/uploads/2026/05/AP_017_001_font-300x169.jpg 300w" sizes="auto, (max-width: 696px) 100vw, 696px" /></figure>
</div>


<h2 class="wp-block-heading">Prérequis</h2>



<ul class="wp-block-list">
<li><strong>SE :</strong> 
<ul class="wp-block-list">
<li>GNU/Linux RHEL</li>
</ul>
</li>



<li><strong>Apps :</strong>
<ul class="wp-block-list">
<li>Guacamole 1.6</li>



<li>Tomcat 9.X</li>



<li>MariaDB 15.X</li>



<li>Nginx</li>
</ul>
</li>



<li><strong>Autres :</strong>
<ul class="wp-block-list">
<li>Certificats</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">Guide</h2>



<ul class="wp-block-list">
<li><a href="https://erwanguillemard.com/apps-guacamole-partie-1-theorie/"><strong>Partie 1 : Théorie</strong></a>
<ul class="wp-block-list">
<li>Définir ce qu&rsquo;est un bastion</li>



<li>Réflexion sur l&rsquo;architecture</li>
</ul>
</li>



<li><strong><a href="https://erwanguillemard.com/apps-guacamole-partie-2-pratique/">Partie 2 : Installation</a></strong>
<ul class="wp-block-list">
<li>Guide de déploiement</li>
</ul>
</li>



<li><a href="https://erwanguillemard.com/apps-guacamole-partie-3-securisation/"><strong>Partie 3: Sécurisation</strong></a>
<ul class="wp-block-list">
<li>Réseau</li>



<li>Système</li>



<li>Application</li>
</ul>
</li>



<li><strong><a href="https://erwanguillemard.com/apps-guacamole-partie-4-configuration/">Partie 4 : Configuration</a></strong>
<ul class="wp-block-list">
<li>Paramètres</li>



<li>Utilisateurs</li>



<li>Groupes</li>



<li>Ressources</li>
</ul>
</li>



<li><strong>Partie 5 : Démonstration</strong>
<ul class="wp-block-list">
<li>Présentation de la solution</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">Il n&rsquo;est pas évident aujourd&rsquo;hui de garder la main sur nos environnements de manière sécurisée, comme il n&rsquo;est pas aisé de contrôler l&rsquo;ensemble des activités d&rsquo;un fournisseur ou prestataire sur notre SI. Même si la connexion est éphémère, nous nous devons de contrôler cette dernière. J&rsquo;ai repris la lecture des poèmes d&rsquo;Omar KHAYYÂM, et je suis tombé sur celui-ci que je trouve à la fois beau et adapté à la thématique de mon billet. (Je ne parle pas de politique et je lis depuis très longtemps cet ouvrage).</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="has-text-align-left wp-block-paragraph"><em>Considère ce vieux caravansérail qu’on nomme le monde,<br>dont les portes sont le Jour et la Nuit ;<br>des souverains y passent avec leur faste,<br>y demeurent une heure ou deux… puis s’en vont</em></p>
<cite>Omar KHAYYÂM &#8211; Robâiyât</cite></blockquote>



<p class="wp-block-paragraph">Nous pouvons alors facilement considérer que le caravansérail est notre bastion, les voyageurs nos sessions, les gardiens de la porte les administrateurs systèmes et réseaux&#8230;</p>



<p class="wp-block-paragraph">Les solutions de BASTION bien qu&rsquo;onéreuses viennent pallier à tous cela. Toutefois et c&rsquo;est souvent l&rsquo;argument le coût de la solution est difficilement supportable ce qui justifie l&rsquo;usage à tort et pour tout des VPN SSL, TS GW ou des outils de prise en main à distance. A l&rsquo;inverse GUACAMOLE répond à l&rsquo;ensemble des problématiques financières et technologiques. J&rsquo;ai un bastion gratuit et souverain sur mon SI que demander de mieux ? Ce n&rsquo;est malheureusement pas gratuit. Regardons de plus près le coût ETP<sup data-fn="cf376983-08ec-4d96-918a-505df778c0b1" class="fn"><a href="#cf376983-08ec-4d96-918a-505df778c0b1" id="cf376983-08ec-4d96-918a-505df778c0b1-link">10</a></sup> lié à la solution. Il faut installer, maintenir la solution au-delà de son contexte infrastructure mais également applicative. Et comme vous pouvez le constater, c&rsquo;est loin d&rsquo;une mince affaire pour qui souhaite bien faire les choses.</p>



<p class="wp-block-paragraph">Le choix de ne pas passer par la technologie docker m&rsquo;est propre. Je ne vois pas l&rsquo;utilité d&rsquo;une telle solution pour un projet de ce type. Docker reste pour moi un usage de développement et non de production. Je ne dis pas que c&rsquo;est mauvais, je dis que cela ne m&rsquo;est pas adapté. Un jour peut-être je changerai d&rsquo;avis, pour l&rsquo;instant la tête de cochon que je suis continuera de réaliser ces infrastructures en environnement non containerisé ! (GUILLEMARD ça rime avec tête de lard pour ne pas dire co**ard 🙂 )</p>



<p class="wp-block-paragraph">Je suis content d&rsquo;arriver au bout de cet article et de cet outil magnifique qu&rsquo;est GUACAMOLE. J&rsquo;aurai appris énormément de choses encore et cela faisait longtemps que je n&rsquo;avais pas passé des nuits blanches à cogiter sur des débugs et analyses. Je pense toutefois que la solution doit être sauvegardé au cas où et ce peu importe la solution utilisée. Si le bastion reste indisponible pour de bonnes et mauvaise raisons, il nous faut alors passer par la poterne de notre SI pour voir ce qu&rsquo;il se passe. Son usage doit être restreint au maximum et doit se faire qu&rsquo;en cas d&rsquo;extrême nécessité.</p>



<p class="wp-block-paragraph">La morale de ce billet se résumera à si j&rsquo;avais un budget je passerai sans hésiter par SYSTANCIA (non je n&rsquo;ai pas d&rsquo;action), solution française, support humain et sympathique et une analyse forte en cas d&rsquo;incident et de correctif applicatif de l&rsquo;ensemble de leurs solutions (<em><strong>Cleanroom </strong>devenu <strong>CyberElements</strong></em>). Malheureusement, je n&rsquo;ai pas le sou et donc je me rabat sur Apache GUACAMOLE et cela n&rsquo;est pas sans regrets 🙂</p>



<p class="wp-block-paragraph">Le mot de la fin :</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>J&rsquo;initie une connexion guacamole sur fond de paddle. Votre avocat fait appel et vous informe que la balle est au centre. UN-DEUX-TROIS, on ne se bat pas ici ! Superbe relance de l&rsquo;ami Kaouette, une teq paf pour la 12.</em></p>
<cite>Erwan GUILLEMARD</cite></blockquote>



<h2 class="wp-block-heading">Sources</h2>



<ul class="wp-block-list">
<li><a href="https://guacamole.apache.org/releases/1.6.0/">GUACAMOLE : Download page</a></li>



<li><a href="https://guacamole.apache.org/doc/gug/guacamole-native.html">GUACAMOLE : Native Installation Guide</a></li>



<li><a href="https://www.systancia.com/">SYSTANCIA</a></li>
</ul>


<ol class="wp-block-footnotes"><li id="b23a0fec-6c5b-46e0-8d6e-eeece1a2f766"><strong>SI :</strong> Système d&rsquo;Information <a href="#b23a0fec-6c5b-46e0-8d6e-eeece1a2f766-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="451eaba6-4b2d-47cd-87ad-683a8801b884"><strong>VPN SSL :</strong> Virtual Private Network Secure Socket Layer <a href="#451eaba6-4b2d-47cd-87ad-683a8801b884-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="d2294f0d-f3f5-438c-8056-dee10df02f95"><strong>RDS :</strong> Remote Desktop Server <a href="#d2294f0d-f3f5-438c-8056-dee10df02f95-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="e0d3d39a-a480-46c8-a565-400c3e99f864"><strong>TSGW :</strong> Terminal Server GateWay <a href="#e0d3d39a-a480-46c8-a565-400c3e99f864-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="ffad01f9-20fe-4d7a-b264-a5a83f01c0c6"><strong>RGPD :</strong> Règlement Général de Protection des Données <a href="#ffad01f9-20fe-4d7a-b264-a5a83f01c0c6-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="658f9d5f-2a83-4303-9299-6ace8b6ea93a"><strong>HDS :</strong> Hébergement de Données de Santé <a href="#658f9d5f-2a83-4303-9299-6ace8b6ea93a-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="067f23cc-88b8-45bc-bf6b-6bbb5ac4899d"><strong>RHEL :</strong> RedHat Entreprise Linux <a href="#067f23cc-88b8-45bc-bf6b-6bbb5ac4899d-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="2fe2ddbd-72f5-40e2-9044-cfc779fee5bd"><strong>OS :</strong> Operating System <a href="#2fe2ddbd-72f5-40e2-9044-cfc779fee5bd-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="a3a92c34-9ce0-428f-a6f8-cd58c62c570f"><strong>ANSSI :</strong> Agence National de Sécurité des Systèmes d&rsquo;Information <a href="#a3a92c34-9ce0-428f-a6f8-cd58c62c570f-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="cf376983-08ec-4d96-918a-505df778c0b1"><strong>ETP :</strong> Employé(e) Temps Plein <a href="#cf376983-08ec-4d96-918a-505df778c0b1-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li></ol>


<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Apps &#8211; Tomcat</title>
		<link>https://erwanguillemard.com/apps-tomcat/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sat, 08 Aug 2026 13:23:00 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Tomcat]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3761</guid>

					<description><![CDATA[C&#8217;est marrant, je veux parler d&#8217;une techno et voilà que je me retrouve à implémenter une serveur Tomcat. Je me dis « Nan mais ça va passer je vais pas faire un article&#8230; » Hé ba force est de constater que si, j&#8217;ai fait un article. Mais alors pourquoi faire un article sur Tomcat ? Parce que...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">C&rsquo;est marrant, je veux parler d&rsquo;une techno et voilà que je me retrouve à implémenter une serveur Tomcat. Je me dis « Nan mais ça va passer je vais pas faire un article&#8230; » Hé ba force est de constater que si, j&rsquo;ai fait un article.</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Mais alors pourquoi faire un article sur Tomcat ?</strong></p>



<p class="wp-block-paragraph">Parce que premièrement cela aurait rendu l&rsquo;article indigeste déjà qu&rsquo;en temps normal ce n&rsquo;est pas ouf et que deuxièmement en creusant un peu le sujet cela ne se résume pas à juste un <strong><em>dnf install tomcat</em></strong>&#8230;</p>



<p class="wp-block-paragraph">Bref, ce billet sera technique car j&rsquo;ai hâte de revenir à mon article initial. Mais cela vaut le coup car j&rsquo;ai appris encore énormément de chose 🙂</p>



<p class="has-text-align-center wp-block-paragraph"><a href="https://www.youtube.com/watch?v=r4OhIU-PmB8&amp;list=RDr4OhIU-PmB8&amp;start_radio=1">Tommy the Cat is my name and I say unto thee</a></p>





<h2 class="wp-block-heading">Avant-Propos</h2>



<p class="wp-block-paragraph">L&rsquo;étude de Tomcat vient simplement de l&rsquo;implémentation d&rsquo;un billet qui sera publié prochainement qui nécessite la présence d&rsquo;un serveur d&rsquo;applet Java. Je garde volontairement une part de mystère, sinon ce n&rsquo;est pas marrant non ? 🙂</p>



<p class="wp-block-paragraph">De mon passé, d&rsquo;étudiant, j&rsquo;ai appris la POO<sup data-fn="16da1029-699d-4bca-a6e9-7768a7099ca3" class="fn"><a href="#16da1029-699d-4bca-a6e9-7768a7099ca3" id="16da1029-699d-4bca-a6e9-7768a7099ca3-link">1</a></sup> lors de mes études en BTS<sup data-fn="8fe03776-25cc-4570-88c0-2c285e68ced0" class="fn"><a href="#8fe03776-25cc-4570-88c0-2c285e68ced0" id="8fe03776-25cc-4570-88c0-2c285e68ced0-link">2</a></sup> d&rsquo;info industrielle sur C++. J&rsquo;avoue que je n&rsquo;ai pas bien saisie la pratique&#8230; C&rsquo;est lors de ma licence en sécu logicielle que j&rsquo;ai unlock et appliqué tous les pratiques de la POO sur le langage JAVA.</p>



<p class="has-text-align-center wp-block-paragraph"><strong><em>Cool ta life mon gars, ça aurait mérité un post Facebook en 2012 avec en premier commentaire « Ba moi hier j&rsquo;ai mangé une pomme »</em></strong></p>



<p class="wp-block-paragraph">Ouai peut-être mais cela a été pour moi une révélation. J&rsquo;ai trouvé ce langage magnifique et je pensais avoir trouvé ma voie. Et pourtant JAVA est loin d&rsquo;être un langage des plus fiable et ergonomique. Des IDEs<sup data-fn="6b0bb7de-b295-4951-b60c-c2f13e9cfca2" class="fn"><a href="#6b0bb7de-b295-4951-b60c-c2f13e9cfca2" id="6b0bb7de-b295-4951-b60c-c2f13e9cfca2-link">3</a></sup> NetBeans, Eclipse, Android Studio sans oublier le serveur d&rsquo;applet web GlassFish je trouvais ça top. Et puis je me suis rendu compte que les applets c&rsquo;étaient lourds, les applications Java difficilement ergonomique, des failles de sécurités qui doivent être patché avec des updates de la JDK<sup data-fn="af7fd030-5eb8-459c-b326-4cfe6ebc218e" class="fn"><a href="#af7fd030-5eb8-459c-b326-4cfe6ebc218e" id="af7fd030-5eb8-459c-b326-4cfe6ebc218e-link">4</a></sup> côté développeur de la JVM<sup data-fn="2c0f76eb-2466-4e3d-a508-12ed484fb0c7" class="fn"><a href="#2c0f76eb-2466-4e3d-a508-12ed484fb0c7" id="2c0f76eb-2466-4e3d-a508-12ed484fb0c7-link">5</a></sup>, JRE<sup data-fn="3767ce2d-4690-4d88-a81f-5a5abfb6e0ec" class="fn"><a href="#3767ce2d-4690-4d88-a81f-5a5abfb6e0ec" id="3767ce2d-4690-4d88-a81f-5a5abfb6e0ec-link">6</a></sup> côté client, le code qui ne devient plus compatible&#8230;</p>



<p class="wp-block-paragraph">Voilà, les raisons de pourquoi j&rsquo;ai délaissé mon amour de JAVA par dépit à la suite de ces frustrations. L&rsquo;une des autres raisons et la difficulté de jongler entre la sécurité des versions clients et les progicielles. Accepter de mettre à jour et ne plus travailler car au lancement de l&rsquo;application ou de fonctionnalité ça crash ou retourne des erreurs de stack traces dans tous les sens ou accepter d&rsquo;avoir des failles de sécurité partout et pouvoir travailler ? </p>



<p class="wp-block-paragraph">Bref, encore une fois, un article pour installer un service au premier abord simple mais qui nécessite d&rsquo;être bien sécurisé.</p>



<h2 class="wp-block-heading">Prérequis</h2>



<ul class="wp-block-list">
<li><strong>SE :</strong>
<ul class="wp-block-list">
<li>Rocky Linux 9.4 et versions ultérieures</li>
</ul>
</li>



<li><strong>Apps :&nbsp;</strong>
<ul class="wp-block-list">
<li>Tomcat 10.1.54</li>
</ul>
</li>



<li><strong>Autres :</strong>
<ul class="wp-block-list">
<li>Hardenned Linux</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">Théorie</h2>



<h3 class="wp-block-heading">Un peu d&rsquo;histoire</h3>



<p class="wp-block-paragraph"><em>Il était une fois, un meunier ne laissa pour tous biens, à trois enfants qu&rsquo;il avait, que son moulin, son âne et son chat.</em>.. </p>



<p class="wp-block-paragraph">Bien joué Charles 😉 Je ne vais pas vous compter le conte du Chat Botté de Perrault mais bien celle de Tomcat, je vous rassure, mais la tentation était trop grande &lt;3</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>L&rsquo;objectif principal était de fournir une implémentation de référence pour JAVA Web (servlets et JSP<sup data-fn="5aa72831-364a-4813-a223-8651ecf90bfd" class="fn"><a href="#5aa72831-364a-4813-a223-8651ecf90bfd" id="5aa72831-364a-4813-a223-8651ecf90bfd-link">7</a></sup>). C&rsquo;est ainsi que James Duncan DAVIDSON créa Tomcat en 1998 sans lui donner encore de nom.<br><br>Le projet sera donné à la fondation Apache en 1999 qui le baptisera Tomcat et passera ce dernier sous licence OpenSource Apache.<br><br>Au cours des années 1999 à 2001, la première version stable de Tomcat est disponible pour principalement être utilisé comme moteur de servlet et est fortement lié au server web Apache.<br><br>Au fil des années, le projet Tomcat continuera d&rsquo;évoluer avec l&rsquo;âge d&rsquo;or d&rsquo;internet. A ce jour, la version la plus récente est la version 11 qui comme nous pouvons en douter à une optimisation pour le cloud et les micro services. (Il faut bien vivre avec son temps 🙂 ).<br></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="679" class="wp-image-3804" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_001_font.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_001_font.jpg 735w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_001_font-243x300.jpg 243w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Ce qu&rsquo;il est important de retenir, c&rsquo;est que ce dernier reste un projet OpenSource maintenu par une communauté très active. Tomcat reste également un serveur d&rsquo;application léger très populaire et de base (et c&rsquo;est pourquoi il est fortement lié à JAVA) la référence de l&rsquo;implémentation JAVA.</p>



<h3 class="wp-block-heading">Structure</h3>



<p class="wp-block-paragraph">Il est important comme pour toutes applications de savoir comment cette dernière est structurée et comment elle fonctionne.</p>



<p class="wp-block-paragraph">Ainsi, nous pouvons différencier 9 répertoires distincts au sein du daemon Tomcat :</p>



<ul class="wp-block-list">
<li><strong>bin :</strong> L&rsquo;ensemble des scripts et exécutables propre au daemon pour démarrer ou arrêter le serveur.</li>



<li><strong>common :</strong> Nous pourrions dire que ce répertoire contient le code (classes et méthodes) commun utilisé par le service Catalina et certaines applications web.</li>



<li><strong>conf :</strong> Le répertoire qui stocke les fichiers de configuration du server.</li>



<li><strong>lib :</strong> Répertoire qui stocke l&rsquo;ensembles des bibliothèques (les .jar)</li>



<li><strong>logs :</strong> Dossier qui va stocker l&rsquo;ensemble des journaux d&rsquo;événement. Attention à ce que ce dernier ne prenne pas trop de place sinon BOUM plus de service. Le mieux serait de le déplacer sur un disque dédié.</li>



<li><strong>server :</strong> Code contenant les méthodes et classes systèmes utilisés uniquement de Catalina.</li>



<li><strong>shared :</strong> Les classes partagées utilisées par toutes les applications</li>



<li><strong>webapps :</strong> Répertoire qui va contenir les applications web (le fichier .war)</li>



<li><strong>work :</strong> Répertoire qui va contenir les répertoires et fichiers temporaires (le cache)</li>
</ul>



<p class="wp-block-paragraph">Chacun des répertoires joue un rôle clé et donc selon le contexte doit être sécurisé.</p>



<h3 class="wp-block-heading">Fonctionnement</h3>



<p class="wp-block-paragraph">Le fonctionnement de Tomcat peut paraitre complexe au premier abord. Toutefois avec un bon schéma, cela devient aussi divin que les croquettes Ultima Saumon pour chat stérilisé (« <em><strong>Sale Histoire</strong></em> » que mon avocat garde sous silence en reprenant la citation d&rsquo;un membre de la famille).</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="873" height="449" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_002_lifecylce.jpg" alt="" class="wp-image-3809" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_002_lifecylce.jpg 873w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_002_lifecylce-300x154.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_002_lifecylce-768x395.jpg 768w" sizes="auto, (max-width: 873px) 100vw, 873px" /></figure>
</div>


<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3761_7231f1-be kt-accordion-has-5-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3761_d60c16-59"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Phase 1 : Le connecteur</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">L&rsquo;utilisateur exécute une requête <strong>HTTP</strong><sup data-fn="49aa99e2-1a30-4956-b8aa-08bef6ca1b65" class="fn"><a href="#49aa99e2-1a30-4956-b8aa-08bef6ca1b65" id="49aa99e2-1a30-4956-b8aa-08bef6ca1b65-link">8</a></sup>, cette même requête se présente au connecteur sur le port <strong>8080</strong>. Le connecteur va alors transformer la requête en objets JAVA, deux pour être précis :</p>



<ul class="wp-block-list">
<li>Les données entrantes : <strong>HttpServletRequest</strong></li>



<li>Les données sortantes : <strong>HttpServletResponse</strong></li>
</ul>



<p class="wp-block-paragraph">Les données sortantes sont vides et seront complétées à la fin du traitement de la requête d&rsquo;entrée.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3761_1ceabd-49"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Phase 2 : L&rsquo;engin Catalina</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Les données d&rsquo;entrées sont soumises au moteur de décision de son petit nom <strong>Catalina</strong>. Il va analyser l&rsquo;en-tête de la requête (header) pour orienter cette dernière vers le bon host virtuel.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3761_31c3e0-db"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Phase 3 : Host &amp; Context</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Un peu comme la tour de contrôle, nous pouvons voir ce dernier comme un aiguillage. Ainsi, si nous avions plusieurs domaines, le host va identifier le bon domaine et aiguiller le flux vers l&rsquo;application, le context.</p>



<p class="wp-block-paragraph">C&rsquo;est l&rsquo;application web spécifique (le .war) qui va alors traiter la demande. Nous pouvons donc avoir une multitude d&rsquo;application sur le même serveur.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3761_039b51-8c"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Phase 4 : L&rsquo;Exécution</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Le <strong>wrapper </strong>va appeler notre <strong>servlet </strong>correspondant. Tomcat charge alors la <strong>classe </strong>JAVA, l&rsquo;instancie et appelle la méthode <strong>Service()</strong>, <strong>doGet()</strong> ou <strong>doPost()</strong>.</p>



<p class="wp-block-paragraph">Le code va alors s&rsquo;exécuter et retourner la réponse dans l&rsquo;objet en attente, <strong>HttpServletResponse </strong>dissocier de la requête à l&rsquo;étape 1.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-5 kt-pane3761_13b9e2-6d"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Phase 5 : La Réponse</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Tomcat récupère l&rsquo;objet réponse et va alors transformer cette dernière en flux de données HTTP (texte, HTLM, JSON) et renvoyer par le biais du connecteur la réponse au navigateur du client.</p>
</div></div></div>
</div></div></div>



<p class="wp-block-paragraph"></p>



<p class="has-text-align-center wp-block-paragraph"><span style="text-decoration: underline;"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">/!\</mark> Attention :</strong></span> Cette architecture reste valable, mais Tomcat 10 a migré vers <strong>Jakarta EE</strong> en rendant incompatible les applications basées sur <strong>javax.servlet</strong>. Donc si usage des Servlets c&rsquo;est Tomcat 9&#8230;</p>



<p class="wp-block-paragraph">Pour faire simple, si lors du lancement de votre application ne se lance pas et que dans les logs localhost ou catalina vient fleurir l&rsquo;erreur <code><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color"><strong><em><span style="text-decoration: underline;">ClassNotFoundException: javax.servlet</span></em></strong></mark></code>, et bien c&rsquo;est que vous l&rsquo;avez dans l&rsquo;OS bien profond et que vous êtes marron&#8230; Votre application n&rsquo;est pas compatible Tomcat 10. Vous êtes bon pour un downgrade &lt;3 Ca fait du bien de temps en temps de se prendre un bon coup de nerf de bœuf sur l&rsquo;arrière train, ça fait circuler le sang !</p>



<p class="wp-block-paragraph">Cette structure modulaire d&rsquo;encapsulation, permet de garantir une certaine souplesse sans avoir à changer la logique des applications.</p>



<p class="wp-block-paragraph">Je pense qu&rsquo;il n&rsquo;y a pas besoin d&rsquo;en savoir plus pour installer le service sur notre serveur. Passe à la pratique.</p>



<h2 class="wp-block-heading">Pratique</h2>



<p class="wp-block-paragraph">J&rsquo;ai pris le parti de sortir pour une nouvelle fois des sentiers battu et de ne pas me limiter à l&rsquo;installation de Tomcat depuis le repo source. J&rsquo;ai choisi de déployer ce dernier depuis le site officiel.</p>



<p class="wp-block-paragraph">Ce choix est motivé par les versions spécifiques nécessaire à certaines applications. De ce fait, l&rsquo;installation depuis le repo n&rsquo;est pas d&rsquo;une grande utilité. Et une nouvelle fois de par mon expérience, il est plus probable de passer par le site officiel.</p>



<h3 class="wp-block-heading">Dépendances</h3>



<p class="wp-block-paragraph">En termes de dépendance, ce n&rsquo;est pas bien compliqué, il nous faut la JDK pour faire tourner notre serveur Tomcat. Donc ?</p>



<p class="wp-block-paragraph">On installe la JDK 🙂</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-32b4d5e811eec91de227120c6db4eea5"><code><strong>#Install Java
$ sudo dnf install java-21-openjdk-headless</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="940" height="656" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_100_install.jpg" alt="" class="wp-image-3785" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_100_install.jpg 940w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_100_install-300x209.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_100_install-768x536.jpg 768w" sizes="auto, (max-width: 940px) 100vw, 940px" /></figure>
</div>


<p class="wp-block-paragraph">Je passe encore et toujours mon tour sur cette étape qui devient un incontournable des billets que je rédige sous GNU/Linux.</p>



<h3 class="wp-block-heading">Installation</h3>



<p class="wp-block-paragraph">Bien. Maintenant que notre dépendance est installée, commençons par le début.</p>



<p class="wp-block-paragraph">Créons notre groupe <strong>tomcat </strong>et notre utilisateur de service <strong>tomcat</strong>. Pour répondre au bonne pratique, un service = un compte applicatif. Cela permet de faciliter le debug et surtout en termes de sécurité c&rsquo;est bien mieux que de tout faire tourner avec le compte root.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-7499e47f8ba19d1758af712566b877cd"><code><strong>$ sudo groupadd tomcat
$ sudo useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat</strong></code></pre>



<p class="wp-block-paragraph">Naturellement, l&rsquo;utilisateur tomcat est membre du groupe tomcat&#8230;</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="941" height="42" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_101_groupserviceaccount.jpg" alt="" class="wp-image-3784" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_101_groupserviceaccount.jpg 941w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_101_groupserviceaccount-300x13.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_101_groupserviceaccount-768x34.jpg 768w" sizes="auto, (max-width: 941px) 100vw, 941px" /></figure>
</div>


<p class="wp-block-paragraph">L&rsquo;installation se fait de deux manières. Soit par la commande <strong>curl </strong>qui est nativement présente sur notre SE<sup data-fn="7e0a7bd5-b44e-4bc9-acf0-b0b5d4e1385c" class="fn"><a href="#7e0a7bd5-b44e-4bc9-acf0-b0b5d4e1385c" id="7e0a7bd5-b44e-4bc9-acf0-b0b5d4e1385c-link">9</a></sup>. Soit par <strong>wget </strong>qui devra être installé. Il conviendra d&rsquo;adapter l&rsquo;URL<sup data-fn="8d533817-d743-4f53-9f04-09b0d390cfa6" class="fn"><a href="#8d533817-d743-4f53-9f04-09b0d390cfa6" id="8d533817-d743-4f53-9f04-09b0d390cfa6-link">10</a></sup> selon la version recherchée. J&rsquo;ai décidé de télécharger le <strong>.tar.gz</strong> directement dans le répertoire <strong>/tmp</strong>.</p>



<p class="wp-block-paragraph">Créons-le répertoire <strong>/opt/tomcat</strong> puis décompressons notre archive stocké sous <strong>/tmp</strong> dans le répertoire fraichement créé.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-711b5bcc4260e8ac71a235702a987f5e"><code><strong>$ curl -L --output-dir /tmp -O  https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.54/bin/apache-tomcat-10.1.54.tar.gz
$ mkdir /opt/tomcat
$ tar -xf /tmp/apache-tomcat-10.1.54.tar.gz -C /opt/tomcat --strip-components=1</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="939" height="216" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_102_getTomcat.jpg" alt="" class="wp-image-3783" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_102_getTomcat.jpg 939w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_102_getTomcat-300x69.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_102_getTomcat-768x177.jpg 768w" sizes="auto, (max-width: 939px) 100vw, 939px" /></figure>
</div>


<p class="wp-block-paragraph">Bon, si on regarde du côté de l&rsquo;ANSSI<sup data-fn="d2695521-2349-42a7-b9d8-98daece4022d" class="fn"><a href="#d2695521-2349-42a7-b9d8-98daece4022d" id="d2695521-2349-42a7-b9d8-98daece4022d-link">11</a></sup>, ces derniers nous recommandent que notre compte de service tomcat ne doit pas propriétaire des binaires (exécutables). Pourquoi ? Admettons qu&rsquo;il y est compromission, le compte ne sera pas en possibilité de s&rsquo;altérer lui-même. Ainsi, nous pouvons voir une sorte de silotage.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-6189b1aa423587f0ef9d55b34c63e35a"><code><strong>$ sudo chgrp -R tomcat /opt/tomcat
$ sudo chmod -R g+r /opt/tomcat/conf
$ sudo chmod g+x /opt/tomcat/conf
$ sudo chown -R tomcat /opt/tomcat/{webapps,work,temp,logs}</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="942" height="532" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_103_permissions.jpg" alt="" class="wp-image-3782" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_103_permissions.jpg 942w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_103_permissions-300x169.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_103_permissions-768x434.jpg 768w" sizes="auto, (max-width: 942px) 100vw, 942px" /></figure>
</div>


<p class="wp-block-paragraph">Le groupe utilisateur <strong>tomcat </strong>a donc les droits de lecture et d&rsquo;exécution sur l&rsquo;ensemble des sous éléments du répertoire <strong>/opt/tomcat</strong>. L&rsquo;utilisateur <strong>tomcat </strong>sera propriétaire uniquement des sous répertoires et leurs contenus :</p>



<ul class="wp-block-list">
<li><strong><span style="text-decoration: underline;">webapps :</span></strong> Répertoire qui va contenir les applications web (le fichier .war)</li>



<li><strong><span style="text-decoration: underline;">work :</span></strong> Répertoire qui va contenir les répertoires et fichiers temporaires (le cache) persistant. C&rsquo;est à dire utiliser par les servlets.</li>



<li><strong><span style="text-decoration: underline;">temp :</span></strong> Le répertoire va stocker les fichiers à déplacer. Il joue le rôle de passe plat. Les fichiers qui viendraient à persister sont automatiquement supprimés à chaque redémarrage du service.</li>



<li><strong><span style="text-decoration: underline;">logs :</span></strong> Les journaux d&rsquo;événements, il faut bien que le service puisse écrire ce qui se passe non ?</li>
</ul>



<h3 class="wp-block-heading">Sécurité</h3>



<p class="wp-block-paragraph">Niveau sécurité, les actions vont se concentrer et se définir dans le fichier server.xml ainsi que dans le fichier web.xml.</p>



<p class="wp-block-paragraph">L&rsquo;objectif sera de se prémunir des attaques classiques MIM<sup data-fn="6ba62ef7-23e3-40d7-9103-43c42443f43d" class="fn"><a href="#6ba62ef7-23e3-40d7-9103-43c42443f43d" id="6ba62ef7-23e3-40d7-9103-43c42443f43d-link">12</a></sup>, Clickjacking, XSS<sup data-fn="c7fe5ad0-6ab5-4d69-ae4a-8da0bea8e4b6" class="fn"><a href="#c7fe5ad0-6ab5-4d69-ae4a-8da0bea8e4b6" id="c7fe5ad0-6ab5-4d69-ae4a-8da0bea8e4b6-link">13</a></sup> et de masquer l&rsquo;identité de notre serveur le plus possible. Parce qu&rsquo;on ne dévoile pas tout le premier soir 😉</p>



<h4 class="wp-block-heading">Audit et divulgation d&rsquo;identité</h4>



<p class="wp-block-paragraph">Commençons par éditer le fichier server.xml.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-7e5764e583769fa5a8b342eb6a84fc71"><code><strong>$ sudo vim /opt/tomcat/conf/server.xml</strong></code></pre>



<p class="wp-block-paragraph">Un truc qui pourrait être tout bête, appliquons le principe : </p>



<p class="has-text-align-center wp-block-paragraph"><strong><em>Vivons heureux, Vivons cachés ! </em></strong></p>



<p class="wp-block-paragraph">C&rsquo;est à dire outre mon langage (car peu parle le Erwan première langue), masquons la version de notre serveur tomcat dans les trames d&rsquo;entêtes (le header&#8230;) HTTP. Ainsi il est possible de savoir que je suis un serveur tomcat, mais de connaitre ma version. 🙂</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Malinx le Lynx. D&rsquo;un autre côté c&rsquo;est Tomcat&#8230; Voilà voilà, il est content de sa vanne&#8230;</strong></p>



<p class="has-text-align-center wp-block-paragraph">Dans le connecteur HTTP, ajouter <strong>server= » « </strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">Avant</mark></strong></td><td class="has-text-align-center" data-align="center"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-11-color">Après</mark></strong></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="308" height="98" class="wp-image-3787" style="width: 308px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_104_serverON.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_104_serverON.jpg 406w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_104_serverON-300x95.jpg 300w" sizes="auto, (max-width: 308px) 100vw, 308px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="235" class="wp-image-3788" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_105_serverOFF.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_105_serverOFF.jpg 401w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_105_serverOFF-300x128.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Tiens, tu ajoutes un <strong>secure= »true »</strong>. C&rsquo;est cool, du coup tu forces les connexions chiffrées ? 🙂 Et bien pas du tout ! Je me suis fait k*n aussi. Je suis allé regarder la documentation pour mieux comprendre. Par défaut, secure est à false. Nos applications par le biais de notre server peuvent refuser de délivrer les cookies sensibles ou vouloir rediriger les utilisateurs vers le protocole HTTPS<sup data-fn="f00b61b2-171d-465a-96ff-80a705088787" class="fn"><a href="#f00b61b2-171d-465a-96ff-80a705088787" id="f00b61b2-171d-465a-96ff-80a705088787-link">14</a></sup>. Dans le meilleur des cas ça créé des lenteurs au pire c&rsquo;est l&rsquo;infinity loop&#8230; Alors que si nous le forçons à <strong>true</strong>, Tomcat va confirmer auprès de l&rsquo;application que la requête vient d&rsquo;un canal sécurisé (ce qui n&rsquo;est pas le cas. Où le vilain menteur !) même s&rsquo;il vient d&rsquo;un canal non sécurisé.</p>



<p class="wp-block-paragraph">De toute façon, nous allons passer par un reverse proxy <strong>nginx </strong>et en frontal nous aurons une publication avec une règle de proxy.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="756" height="378" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_003_lifecylce.jpg" alt="" class="wp-image-3811" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_003_lifecylce.jpg 756w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_003_lifecylce-300x150.jpg 300w" sizes="auto, (max-width: 756px) 100vw, 756px" /></figure>
</div>


<p class="wp-block-paragraph">Toutefois cela ne suffit pas. Quand est-il des pages d&rsquo;erreurs ? En creusant un peu il va falloir fermer les valves&#8230; 🙂</p>



<p class="wp-block-paragraph">L&rsquo;objectif est de supprimer la mention « <strong>Apache Tomcat/&lt;version&gt;</strong> » dans les pages d&rsquo;erreurs ainsi que la description des erreurs (la <strong>stacktrace</strong>. Que de nostalgie&#8230;). L&rsquo;objectif est de donner le moins d&rsquo;information possible à un potentiel attaquant qui souhaiterai exploiter une CVE<sup data-fn="5523c1bf-ded6-4124-9e1d-b2fc579b24a2" class="fn"><a href="#5523c1bf-ded6-4124-9e1d-b2fc579b24a2" id="5523c1bf-ded6-4124-9e1d-b2fc579b24a2-link">15</a></sup> en relation avec la version de notre produit. L&rsquo;objectif est de rendre aveugle l&rsquo;attaquant le temps que les mécanismes en place ce déclenche ou nous alertes.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="875" height="441" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_107_Valve.jpg" alt="" class="wp-image-3789" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_107_Valve.jpg 875w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_107_Valve-300x151.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_107_Valve-768x387.jpg 768w" sizes="auto, (max-width: 875px) 100vw, 875px" /></figure>
</div>


<p class="wp-block-paragraph">Niveau Audit, nous pouvons également renforcer la verbosité si nous suivons les recommandations de l&rsquo;ANSSI.</p>



<pre class="wp-block-code"><code><strong>&lt;Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &amp;quot;%r&amp;quot; %s %b %D &amp;quot;%{User-Agent}i&amp;quot;" /></strong>
</code></pre>



<ul class="wp-block-list">
<li><strong>%h :</strong> l&rsquo;adresse IP distante</li>



<li><strong>%l :</strong> Identifiant logique</li>



<li><strong>%u : </strong>Utilisateur authentifié</li>



<li><strong>%t :</strong> horodatage</li>



<li><strong>%r :</strong> Ligne de requête (la méthode et l&rsquo;URL appelé)</li>



<li><strong>%s :</strong> Code de retour du protocole HTTP</li>



<li><strong>%b :</strong> Taille de la réponse en octet</li>



<li><strong>%D :</strong> Le temps de traitement en ms</li>



<li><strong>%i : </strong>Le User-Agent pour repérer les outils automatisés (nmap et autres) et surtout les navigateurs « chelou » comme diraient mes enfants&#8230;</li>
</ul>



<p class="wp-block-paragraph">Par exemple :</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="937" height="69" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_112_audit.jpg" alt="" class="wp-image-3780" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_112_audit.jpg 937w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_112_audit-300x22.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_112_audit-768x57.jpg 768w" sizes="auto, (max-width: 937px) 100vw, 937px" /></figure>
</div>


<p class="wp-block-paragraph"><span style="text-decoration: underline;"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">/!\</mark></strong></span> <strong><span style="text-decoration: underline;">Attention :</span> L&rsquo;activation de l&rsquo;audit n&rsquo;est pas anodine en termes d&rsquo;espace. Il faut penser à mettre en place une rotation des logs. Sinon&#8230; BOUM !!!</strong></p>



<p class="wp-block-paragraph">Toutes les applications par défaut, ça dégage ! Pourquoi garder les éléments de bases qui sont d&rsquo;autant plus des vecteurs d&rsquo;attaque et des points de vulnérabilité ?</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-196272e263a1bf83f8fd5b085b27a829"><code><strong>$ sudo rm -Rf /opt/tomcat/webapps/*</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="693" height="299" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_108_webapps.jpg" alt="" class="wp-image-3781" style="aspect-ratio:2.31779257849667;width:535px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_108_webapps.jpg 693w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_108_webapps-300x129.jpg 300w" sizes="auto, (max-width: 693px) 100vw, 693px" /></figure>
</div>


<p class="wp-block-paragraph">Un truc que je ne connaissais pas et que j&rsquo;ai trouvé en étudiant Tomcat, c&rsquo;est le cas de « Protection du Shutdown ». Au premier abord, je me suis demandé qu&rsquo;est-ce que c&rsquo;est que ce truc. Le paramètre <strong>shutdown</strong> est explicite. Et bien voyez-vous c&rsquo;est marrant, c&rsquo;est une commande qui permet d&rsquo;éteindre le daemon. Alors certes, par défaut il est sur le port <strong>8005/tcp</strong> et normalement accessible qu&rsquo;en local. Mais tapons shutdown et pouf ! Notre daemon il va à la niche.</p>



<p class="wp-block-paragraph">Donc, on change le port et pour le mot de passe on utilise le bon vieux <strong>Soleil123!</strong> . Vous m&rsquo;avez compris non ? 🙂</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="448" height="24" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_109_shutdown.jpg" alt="" class="wp-image-3792" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_109_shutdown.jpg 448w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_109_shutdown-300x16.jpg 300w" sizes="auto, (max-width: 448px) 100vw, 448px" /></figure>
</div>


<pre class="wp-block-code"><code><strong>&lt;Server port="-1" shutdown="y2Fxg@kLx4:If2L0_MD1Ccz"&gt;</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="592" height="25" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_109_shutdown_1.jpg" alt="" class="wp-image-3791" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_109_shutdown_1.jpg 592w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_109_shutdown_1-300x13.jpg 300w" sizes="auto, (max-width: 592px) 100vw, 592px" /></figure>
</div>


<h4 class="wp-block-heading">Prévention des attaques</h4>



<p class="wp-block-paragraph">Ouvrons le fichier web.xml.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-b5063060d8ebd8f035f96eb98ac26173"><code><strong>$ sudo vim /opt/tomcat/conf/web.xml</strong></code></pre>



<p class="wp-block-paragraph">A la fin de la section &lt;filter&gt;, ajoutons les lignes suivantes :</p>



<pre class="wp-block-code"><code>&lt;!-- Begin R-ONE Modification -->
        &lt;filter>
                &lt;filter-name>httpHeaderSecurity&lt;/filter-name>
                &lt;filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter&lt;/filter-class>
                &lt;async-supported>true&lt;/async-supported>

                &lt;init-param>
                        &lt;param-name>hstsMaxAgeSeconds&lt;/param-name>
                        &lt;param-value>31536000&lt;/param-value>
                &lt;/init-param>

                &lt;init-param>
                        &lt;param-name>antiClickJackingOption&lt;/param-name>
                        &lt;param-value>DENY&lt;/param-value>
                &lt;/init-param>

                &lt;init-param>
                        &lt;param-name>blockContentTypeSniffingEnabled&lt;/param-name>
                        &lt;param-value>true&lt;/param-value>
                &lt;/init-param>
        &lt;/filter>
&lt;!-- End Modification -->
</code></pre>



<p class="wp-block-paragraph">Parcourons en détails chaque ligne pour comprendre ce que nous sécurisons avec les filtres. (Normal c&rsquo;est du café de Java&#8230; Franchement, il ne mérite pas d&rsquo;aller jouer sur l&rsquo;autoroute à contre sens pour bien voir le danger ? L&rsquo;auteur de ce billet est bof, il fait triste à voir.)</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>L&rsquo;usage du filtre de sécurité « <strong>HttpHeaderSecurityFilter</strong> » permet d&rsquo;ajouter des réponses dans le header des requetes HTTP pour protéger les utilisateurs et les applications des attaques mentionnées ci haut.<br><br>Ainsi pour une défense en profondeur l&rsquo;activation de ces options sont primordiales.<br><br><strong>hstsMaxAgeSeconds</strong> indique que le site ne peut être consulté uniquement via le protocole HTTPS et force ainsi le navigateur à chiffrer les requêtes. Cela permet donc de prévenir des attaques d&rsquo;interception SSL (SSL stripping).<br><br><strong>antiClickJackingOption</strong> aussi connu sous le nom de X-Frame-Options. Cela permet au site de ne pas intégrer l&rsquo;application dans une balise html iframe et donc de faire une superposition d&rsquo;interface invisible et valider une action non voulue.<br><br><strong>blockContentTypeSniffingEnabled</strong> ou X-Content-Type-Options: nosniff permet <s>de blague censurée</s> de forcer le navigateur à respecter le type MIME envoyé par le serveur. L&rsquo;objectif et de se prémunir des attaques XSS.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="283" class="wp-image-3793" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_114_filter.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_114_filter.jpg 943w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_114_filter-300x154.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_114_filter-768x395.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="109" class="wp-image-3794" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_115_filter-mapping.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_115_filter-mapping.jpg 683w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_115_filter-mapping-300x59.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td>Il nous reste un dernier point, les cookies. Afin que ces derniers ne soient pas volés par Cookie Monster par exemple, il est primordial d&rsquo;interdire l&rsquo;accès au cookie via JavaScript (d&rsquo;où la présence du <strong>http-only</strong> à <strong>true</strong>. Nous bloquons ainsi le vol de session via XSS. L&rsquo;usage de <strong>secure</strong> va faire en sorte que le cookie n&rsquo;est envoyé si et seulement si la connexion est sécurisée.</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<pre class="wp-block-code"><code><strong>&lt;!-- Modification R-ONE -->
        &lt;filter-mapping>
                &lt;filter-name>httpHeaderSecurity&lt;/filter-name>
                &lt;url-pattern>/*&lt;/url-pattern>
        &lt;/filter-mapping>
&lt;!-- End Modification --></strong></code></pre>



<p class="wp-block-paragraph">Un truc c*n qui m&rsquo;a fait perdre une nuit de sommeil. J&rsquo;avais cette put**n d&rsquo;erreur&#8230; A devenir fou !</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="409" height="131" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_115_Error.jpg" alt="" class="wp-image-3822" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_115_Error.jpg 409w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_115_Error-300x96.jpg 300w" sizes="auto, (max-width: 409px) 100vw, 409px" /></figure>
</div>


<p class="wp-block-paragraph">Après pas mal de recherche, c&rsquo;est un truc simple. Franchement je suis vraiment un c*n&#8230; Mon nouveau fichier de conf, avait pour owner<strong> root:root</strong> et non <strong>tomcat:tomcat</strong>. La haine, vraiment. Pensez donc à bien set de nouveau les bons droits&#8230;</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="640" height="360" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_002_font.gif" alt="" class="wp-image-3834" style="width:505px;height:auto"/></figure>
</div>


<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-136681e0bd436974f8c5796c933db4b1"><code><strong>$ sudo chown tomcat:tomcat -R /opt/tomcat/conf/</strong></code></pre>



<p class="wp-block-paragraph">Un petit test avant, après ?</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">Avant</mark></strong></td><td class="has-text-align-center" data-align="center"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-11-color">Après</mark></strong></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="161" class="wp-image-3823" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_118_0_securityOff.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_118_0_securityOff.jpg 654w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_118_0_securityOff-300x88.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="213" class="wp-image-3824" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_118_1_securityOn.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_118_1_securityOn.jpg 654w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_118_1_securityOn-300x116.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<h4 class="wp-block-heading">Daemon Firewall</h4>



<p class="wp-block-paragraph">Côté firewall il faut publier le port <strong>8080/tcp</strong></p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-978fdf9ca02b827f822fe1ce1d7cf8c7"><code><strong>$ sudo firewall-cmd --permanent --add-port=8080/tcp
$ sudo firewall-cmd --reload</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="814" height="86" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_110_firewall.jpg" alt="" class="wp-image-3796" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_110_firewall.jpg 814w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_110_firewall-300x32.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_110_firewall-768x81.jpg 768w" sizes="auto, (max-width: 814px) 100vw, 814px" /></figure>
</div>


<p class="wp-block-paragraph">Toutefois ça ne fonctionnera pas NANANANERE ! Et pourquoi ? Hein, pourquoi ? A cause du SELinux ventrebleu !</p>



<p class="wp-block-paragraph">Par défaut le port 8080 n&rsquo;est pas autorisé dans le SELinux pour la communication HTTP. Il est donc nécessaire de lui dire qu&rsquo;il en fait partie.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-332047db95ba0287e909010a861a8529"><code><strong>$ sudo semanage port -a -t http_port_t -p tcp 8080</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="800" height="41" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_111_semanage.jpg" alt="" class="wp-image-3797" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_111_semanage.jpg 800w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_111_semanage-300x15.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_111_semanage-768x39.jpg 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></figure>
</div>


<h3 class="wp-block-heading">Configuration</h3>



<h4 class="wp-block-heading">Logrotate</h4>



<p class="wp-block-paragraph">Créons et éditons le fichier de rotation propre à <strong>tomcat </strong>sous <strong>/etc/logrotate.d</strong>.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-8c355ba62d50ec603953ecad6546d494"><code><strong>$ sudo vim /etc/logrotate.d/tomcat</strong></code></pre>



<p class="wp-block-paragraph">Nous allons spécifier dans notre fichier que nous souhaitons effectuer la rotation du fichier <strong>catalina.out</strong>, les fichiers <strong>localhost_access_log*.txt</strong> ainsi que l&rsquo;ensemble des fichiers d&rsquo;extensions .log.</p>



<p class="wp-block-paragraph">C&rsquo;est dernier afin de ne pas impacter la production seront vidé à chaud (<strong>copytruncate</strong>) de manière journalière en gardant 30 jours de rétention (histoire de faciliter les investigations en cas de suspicion). Nous compresserons les points de rétentions si pas de fichier nous ne faisons rien ni si les fichiers sont vides. Nous recréerons les fichiers avec les droits <strong>0640</strong> avec en groupe et propriétaire le compte de service <strong>tomcat</strong>.</p>



<pre class="wp-block-code"><code>/opt/tomcat/logs/catalina.out
/opt/tomcat/logs/localhost_access_log*.txt
/opt/tomcat/logs/*.log {
    copytruncate
    daily
    rotate 30
    compress
    missingok
    notifempty
    create 0640 tomcat tomcat
}</code></pre>



<p class="wp-block-paragraph">Une commande que je ne connaissais pas. C&rsquo;est en me replongeant dans la documentation de logrotate que j&rsquo;ai découvert qu&rsquo;il existait un mode debug qui vient simuler notre fichier de rotation. C&rsquo;est vraiment cool.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-58b5ba50e3c5914e439bcc75abb938af"><code><strong>$ sudo logrotate -d /etc/logrotate.d/tomcat</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="938" height="904" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_117_logrotate_0.jpg" alt="" class="wp-image-3778" style="aspect-ratio:1.037616803769667;width:557px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_117_logrotate_0.jpg 938w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_117_logrotate_0-300x289.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_117_logrotate_0-768x740.jpg 768w" sizes="auto, (max-width: 938px) 100vw, 938px" /></figure>
</div>


<p class="wp-block-paragraph">Bon ba fonctionne pas. Que pasa ? Ca ne serait pas encore un coup du SELinux ? Mais si, Mais si j&rsquo;ai cru voir un SELinux !</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-890a6cc4c898e3d7491ddf1ece970143"><code><strong>$ ls -Zd /opt/tomcat/logs</strong>
<strong>$ sudo semanage fcontext -a -t var_log_t "/opt/tomcat/logs(/.*)?"
$ sudo restorecon -Rv /opt/tomcat/logs</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="938" height="317" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_117_logrotate_1.jpg" alt="" class="wp-image-3779" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_117_logrotate_1.jpg 938w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_117_logrotate_1-300x101.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_117_logrotate_1-768x260.jpg 768w" sizes="auto, (max-width: 938px) 100vw, 938px" /></figure>
</div>


<p class="wp-block-paragraph">Après vérification du contexte de sécurité, il s&rsquo;avère que <strong>logrotate </strong>est bloqué par le SELinux lorsqu&rsquo;il essai d&rsquo;écrire dans le répertoire <strong>/opt/tomcat/logs</strong>. Il convient donc alors d&rsquo;ajouter le contexte et de restaurer le contexte de sécurité sur le répertoire <strong>/opt/tomcat/logs</strong>. 🙂</p>



<p class="has-text-align-center has-small-font-size wp-block-paragraph"><strong><em>Tu vois Monsieur CHAPPINION, je ne laisse pas la sécurité au hasard et des backdoors partout comme tu aimes le crier haut et fort en te pavanant. Continu de cracher ton VENIN avec ta clic&#8230; #bisous #gratuit #faitdubien 🙂</em></strong></p>



<h4 class="wp-block-heading">Services</h4>



<p class="wp-block-paragraph">Comme j&rsquo;ai choisi l&rsquo;installation depuis le package et non depuis le repo, il faut se farcir à la main le fichier de service. Cela dit, c&rsquo;est plutôt intéressant de se pencher sur le cas. Encore une fois et c&rsquo;est mon point de vue, c&rsquo;est agréable de savoir cuisiner que d&rsquo;acheter des produits transformés tous les jours.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-7776c465df90f1fe7db107290a439292"><code><strong>$ sudo vim /etc/systemd/system/tomcat.service</strong></code></pre>



<pre class="wp-block-code"><code><strong>&#91;Unit]
Description=Apache Tomcat Web Application Container
After=network.target

&#91;Service]
Type=forking

User=tomcat
Group=tomcat

Environment="JAVA_HOME=/usr/lib/jvm/jre"
Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid"
Environment="CATALINA_HOME=/opt/tomcat"
Environment="CATALINA_BASE=/opt/tomcat"

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh

# Sécurité Systemd (Sandboxing)
ProtectSystem=full
ProtectHome=true
PrivateTmp=true
NoNewPrivileges=true

&#91;Install]
WantedBy=multi-user.target</strong></code></pre>



<p class="wp-block-paragraph">Normalement maintenant c&rsquo;est le moment de vérité&#8230; Démarrons notre service. Si tout va bien, pas d&rsquo;erreur. Sinon c&rsquo;est parti pour du début et avec Java ça peut vite devenir pénible et encore le paroxysme est loin. Mais je ne veux pas vous décourager&#8230;</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-f8b20707246469b7d43923bc6211cc70"><code><strong>$ sudo systemctl start tomcat
$ sudo systemctl status tomcat</strong></code></pre>



<p class="wp-block-paragraph">Si c&rsquo;est ok, le service peut être actif au démarrage du système. Ce dernier se lancera après le service réseau (cf la conf du service).</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-da1d9a84be95abfb9eb77293641ca1e2"><code><strong>$ systemctl enable tomcat</strong></code></pre>



<h2 class="wp-block-heading">Test</h2>



<p class="wp-block-paragraph">Pour vérifier que tout est fonctionnel, il est nécessaire comme nous avons supprimé l&rsquo;intégralité du contenu de notre répertoire <strong>/webapps/</strong> de générer un fichier de test :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-6813384eec985a71cbc7bf16f22fd65e"><code><strong>$ sudo mkdir /opt/tomcat/webapps/ROOT
$ sudo echo "OK FINAL ROOT" &gt; /opt/tomcat/webapps/ROOT/index.html
$ chown tomcat:tomcat -R /opt/tomcat/webapps/ROOT
$ sudo systemctl restart tomcat</strong></code></pre>



<p class="wp-block-paragraph">Maintenant depuis un navigateur web, sous réserve d&rsquo;avoir créé la règle sur votre UTM<sup data-fn="51bcd054-ce7e-4f90-9836-c2d17c3c8b5b" class="fn"><a href="#51bcd054-ce7e-4f90-9836-c2d17c3c8b5b" id="51bcd054-ce7e-4f90-9836-c2d17c3c8b5b-link">16</a></sup> si vous n&rsquo;êtes pas dans le même subnet rendez-vous sur l&rsquo;URL <strong>http://&lt;SERVER&gt;:8080</strong> ou depuis directement depuis votre server curl <strong>http://127.0.0.1:8080</strong> vous devriez avoir en retour :</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>Remote</strong></td><td class="has-text-align-center" data-align="center"><strong>Local</strong></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="222" class="wp-image-3825" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_119_0_Remote.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_119_0_Remote.jpg 441w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_119_0_Remote-300x121.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="41" class="wp-image-3826" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_119_1_Remote.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_119_1_Remote.jpg 621w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_119_1_Remote-300x22.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Je pense que nous avons clôt ce billet. Nous voilà avec un server Tomcat sécurisé et fonctionnel&#8230; 🙂</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">Je me suis arraché les cheveux sur ce billet.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>Ecoute ma bonne Catalina, tu un engine modèle, mais si tu n&rsquo;as que des qualités et en termes de verbosité tu es resté comme je l&rsquo;espérai, c&rsquo;est le bonheur rangé dans une armoire. Tu vois si c&rsquo;était à refaire, je t&rsquo;installerai de nouveau mais tu m&#8217;emmerdes !</em></p>
<cite>Erwan Guillemard, revisite d&rsquo;<span style="text-decoration: underline;"><a href="https://www.youtube.com/watch?v=ZywHVw_WIaA">Un singe en hiver</a> d&rsquo;Henri VERNEUIL</span></cite></blockquote>



<p class="wp-block-paragraph">Mais alors pourquoi je tiens ces propos ? Je me suis une nouvelle fois aventuré dans la <strong>stacktrace </strong>et dans les logs à la suite d&rsquo;un <strong>404 Not Found</strong>. D&rsquo;erreur dans le fichier de configuration car sensible à la case sur UN caractère. L&rsquo;absence de log par moment&#8230; Tout ce que j&rsquo;aime avec JAVA, ou du moins j&rsquo;aimais&#8230; Imaginons maintenant une montée de version ? J&rsquo;espère que votre formulaire de CAB<sup data-fn="3aa5110f-a4b9-4a7d-afe0-234fc96d5687" class="fn"><a href="#3aa5110f-a4b9-4a7d-afe0-234fc96d5687" id="3aa5110f-a4b9-4a7d-afe0-234fc96d5687-link">17</a></sup> est à jour et que vous avez un environnement de production iso à votre production.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>JAVA et Tomcat c&rsquo;est un peu comme regardez notre bonne vieille boite de Schrödinger. Le service est démarré, mais cela ne fonctionne. Le chat, c&rsquo;est notre Tomcat numérique (C&rsquo;est surtout la faute du mec entre le clavier et la chaise qui est dans un état quantique oui !).</td><td><img loading="lazy" decoding="async" width="350" height="467" class="wp-image-3840" style="width: 350px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_003_font-scaled.jpeg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_003_font-scaled.jpeg 1920w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_003_font-225x300.jpeg 225w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_003_font-768x1024.jpeg 768w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_003_font-1152x1536.jpeg 1152w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_003_font-1536x2048.jpeg 1536w" sizes="auto, (max-width: 350px) 100vw, 350px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><a href="https://www.google.com/search?sca_esv=042d98b02a14ad67&amp;rlz=1C1VDKB_frFR1007FR1007&amp;sxsrf=ANbL-n5g0SGLR_FWDKmUlxRKrbUzg2m9Fw:1776192360032&amp;q=schrodinger&amp;si=AL3DRZHSpE0pse5fJpxwjTYaymAaGmMpRhbxpA7uMSemdL5dKZeVcKV4-oc58az3G7fIb7JrAUZtKhLoqaP4Xh3erRAOpS2vbpdBPWfMAVztgIr6WaS5Ss0%3D&amp;sa=X&amp;ved=2ahUKEwjDpLCVgO6TAxXPU6QEHTMgGXUQyNoBKAB6BAgeEAA&amp;ictx=1"></a>Enfin passons, si j&rsquo;ai fait un billet sur Tomcat, c&rsquo;est que je vais surtout en avoir besoin dans l&rsquo;article prochain et qu&rsquo;il était vraiment important d&rsquo;étudier en profondeur ce produit de la gamme Apache. Il faut reconnaitre tout de même qu&rsquo;en terme de serveur web il y a bien pire 🙂</p>



<p class="wp-block-paragraph">Rien que les notions de sécurité, nous revenons une nouvelle fois autour des mêmes notions conceptuelles, moindre privilège, réduction de la surface d&rsquo;attaque, audit, chiffrement et isolation. Ces points sont primordiaux pour Tomcat.</p>



<p class="wp-block-paragraph">Pourquoi me direz-vous ? Parce que nous publions un service Web qui exécute du code JAVA qui si mal isolé, croyez-moi peut faire énormément de dégât dans un système d&rsquo;information. Il serait bien de porter si vous utiliser ce dernier renforcer la vigilance sur ce dernier avec votre SIEM<sup data-fn="3d2466aa-4353-4408-a243-6def2b5bade4" class="fn"><a href="#3d2466aa-4353-4408-a243-6def2b5bade4" id="3d2466aa-4353-4408-a243-6def2b5bade4-link">18</a></sup> (c&rsquo;est marrant, je n&rsquo;en ai pas 🙂 )&#8230;</p>



<p class="wp-block-paragraph">Le mot de la fin :</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>Le chat botté chevauche Tomcat pendant que Charles Perrault configure du HSTS dans une cafetière. Arabica mon chers Watson, je danse la JAVA de Broadway. A non, il y a Catalina en travers sur une requête HTTP, le firewall vous fait chapeau bas !</em></p>
<cite>Erwan GUILLEMARD</cite></blockquote>



<h2 class="wp-block-heading">Sources</h2>



<ul class="wp-block-list">
<li><a href="https://messervices.cyber.gouv.fr/documents-guides/anssi-guide-recommandations_mise_en_oeuvre_site_web_maitriser_standards_securite_cote_navigateur-v2.0.pdf">ANSSI : Standards de sécurité côté navigateur</a></li>



<li><a href="https://linux.die.net/man/8/logrotate">Logrotate : Man</a></li>



<li><a href="https://linux.die.net/man/1/curl">Curl : Man</a></li>



<li><a href="https://fr.wikipedia.org/wiki/Apache_Tomcat">Wikipédia : Apache Tomcat</a></li>



<li><a href="https://ipweb.univ-evry.fr/docs/">Tomcat : Documentation</a></li>
</ul>


<ol class="wp-block-footnotes"><li id="16da1029-699d-4bca-a6e9-7768a7099ca3"><strong>POO :</strong> Programmation Orientée Objet <a href="#16da1029-699d-4bca-a6e9-7768a7099ca3-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="8fe03776-25cc-4570-88c0-2c285e68ced0"><strong>BTS :</strong> Brevet de Technicien Supérieur <a href="#8fe03776-25cc-4570-88c0-2c285e68ced0-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="6b0bb7de-b295-4951-b60c-c2f13e9cfca2"><strong>IDE :</strong> Integrated Environment Development <a href="#6b0bb7de-b295-4951-b60c-c2f13e9cfca2-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="af7fd030-5eb8-459c-b326-4cfe6ebc218e"><strong>JDK :</strong> JAVA Development Tools <a href="#af7fd030-5eb8-459c-b326-4cfe6ebc218e-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="2c0f76eb-2466-4e3d-a508-12ed484fb0c7"><strong>JVM :</strong> JAVA Virtual Machine <a href="#2c0f76eb-2466-4e3d-a508-12ed484fb0c7-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="3767ce2d-4690-4d88-a81f-5a5abfb6e0ec"><strong>JRE :</strong> JAVA Runtime Environment <a href="#3767ce2d-4690-4d88-a81f-5a5abfb6e0ec-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="5aa72831-364a-4813-a223-8651ecf90bfd"><strong>JSP :</strong> JAVA Server Pages <a href="#5aa72831-364a-4813-a223-8651ecf90bfd-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="49aa99e2-1a30-4956-b8aa-08bef6ca1b65"><strong>HTTP :</strong> HyperText Transfert Protocol <a href="#49aa99e2-1a30-4956-b8aa-08bef6ca1b65-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="7e0a7bd5-b44e-4bc9-acf0-b0b5d4e1385c"><strong>SE </strong>: Système d&rsquo;Exploitation <a href="#7e0a7bd5-b44e-4bc9-acf0-b0b5d4e1385c-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="8d533817-d743-4f53-9f04-09b0d390cfa6"><strong>URL :</strong> Uniform Resource Locator <a href="#8d533817-d743-4f53-9f04-09b0d390cfa6-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li><li id="d2695521-2349-42a7-b9d8-98daece4022d"><strong>ANSSI :</strong> Agence National de Sécurité des Systèmes d&rsquo;Information <a href="#d2695521-2349-42a7-b9d8-98daece4022d-link" aria-label="Aller à la note de bas de page 11">↩︎</a></li><li id="6ba62ef7-23e3-40d7-9103-43c42443f43d"><strong>MIM :</strong> Man In the Middle <a href="#6ba62ef7-23e3-40d7-9103-43c42443f43d-link" aria-label="Aller à la note de bas de page 12">↩︎</a></li><li id="c7fe5ad0-6ab5-4d69-ae4a-8da0bea8e4b6"><strong>XSS :</strong> Cross Site Scripting <a href="#c7fe5ad0-6ab5-4d69-ae4a-8da0bea8e4b6-link" aria-label="Aller à la note de bas de page 13">↩︎</a></li><li id="f00b61b2-171d-465a-96ff-80a705088787"><strong>HTTPS :</strong> Secure HyperText Transfert Protocol  <a href="#f00b61b2-171d-465a-96ff-80a705088787-link" aria-label="Aller à la note de bas de page 14">↩︎</a></li><li id="5523c1bf-ded6-4124-9e1d-b2fc579b24a2"><strong>CVE :</strong> Common Vulnerabilities and Exposures <a href="#5523c1bf-ded6-4124-9e1d-b2fc579b24a2-link" aria-label="Aller à la note de bas de page 15">↩︎</a></li><li id="51bcd054-ce7e-4f90-9836-c2d17c3c8b5b"><strong>UTM :</strong> Unified Threat Management  <a href="#51bcd054-ce7e-4f90-9836-c2d17c3c8b5b-link" aria-label="Aller à la note de bas de page 16">↩︎</a></li><li id="3aa5110f-a4b9-4a7d-afe0-234fc96d5687"><strong>CAB :</strong> Change Advisory Board  <a href="#3aa5110f-a4b9-4a7d-afe0-234fc96d5687-link" aria-label="Aller à la note de bas de page 17">↩︎</a></li><li id="3d2466aa-4353-4408-a243-6def2b5bade4"><strong>SIEM :</strong> Security Information and Event Management <a href="#3d2466aa-4353-4408-a243-6def2b5bade4-link" aria-label="Aller à la note de bas de page 18">↩︎</a></li></ol>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PROJET – Zelen Zajac, Ollama Client IA Partie 3 : Démonstration</title>
		<link>https://erwanguillemard.com/projet-zelen-zajac-ollama-client-ia-partie-3-demonstration/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sat, 01 Aug 2026 11:58:23 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Projets]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[IA]]></category>
		<category><![CDATA[OLLAMA]]></category>
		<category><![CDATA[Projet]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3609</guid>

					<description><![CDATA[Partie 2 : Pratique&#60;- PROJET &#8211; Zelen Zajac]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="PROJET   ZelenZajac, Client OLLAMA" width="720" height="405" src="https://www.youtube.com/embed/0WKrD2JD9cQ?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><a href="https://erwanguillemard.com/projet-zelen-zajac-ollama-client-ia-partie-2-pratique">Partie 2 : Pratique<br>&lt;-</a></td><td class="has-text-align-center" data-align="center"><a href="https://erwanguillemard.com/projet-zelen-zajac-ollama-client-ia">PROJET &#8211; Zelen Zajac</a></td><td></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PROJET &#8211; Zelen Zajac, Ollama Client IA Partie 2 : Pratique</title>
		<link>https://erwanguillemard.com/projet-zelen-zajac-ollama-client-ia-partie-2-pratique/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sat, 01 Aug 2026 11:57:50 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Projets]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[IA]]></category>
		<category><![CDATA[OLLAMA]]></category>
		<category><![CDATA[Projet]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3607</guid>

					<description><![CDATA[L&#8217;objectif de cette partie est d&#8217;expliquer comment déployer l&#8217;outil et de mettre en lumière certains choix techniques (ou pas 🙂 je me réserve un article full powershell après réflexion). Celui qui veut faire du reverse engineering avec le code, grand bien lui fasse 🙂 Comme pour les autres gros projets d&#8217;envergure, il s&#8217;agit là d&#8217;un...]]></description>
										<content:encoded><![CDATA[


<p class="wp-block-paragraph">L&rsquo;objectif de cette partie est d&rsquo;expliquer comment déployer l&rsquo;outil et de mettre en lumière certains choix techniques (ou pas 🙂 je me réserve un article full powershell après réflexion). Celui qui veut faire du reverse engineering avec le code, grand bien lui fasse 🙂</p>



<p class="wp-block-paragraph">Comme pour les autres gros projets d&rsquo;envergure, il s&rsquo;agit là d&rsquo;un ReadMe dans un format personnel qui jure avec les .txt ou traditionnel wiki.</p>



<h3 class="wp-block-heading">Prérequis</h3>



<p class="wp-block-paragraph">Avant de rentrer dans le vif du sujet, le déploiement étant multiplateforme, je traiterai les deux sujets de par l&rsquo;application GUI<sup data-fn="7ba6418f-d8b5-40ed-9084-40b1c2ab966c" class="fn"><a href="#7ba6418f-d8b5-40ed-9084-40b1c2ab966c" id="7ba6418f-d8b5-40ed-9084-40b1c2ab966c-link">1</a></sup> ou CLI<sup data-fn="7b11378d-dfb7-4f3c-af2d-0c85e1e74ded" class="fn"><a href="#7b11378d-dfb7-4f3c-af2d-0c85e1e74ded" id="7b11378d-dfb7-4f3c-af2d-0c85e1e74ded-link">2</a></sup> sur les environnements Windows et GNU/Linux. Il est toutefois primordial d&rsquo;avoir au minimum la version Powershell.</p>



<p class="wp-block-paragraph">A ce jour, dans les versions <strong>1.0.1</strong> et <strong>1.0.2</strong>, il reste des optimisations de code (refactorisation) à effectuer. Ces versions sont considérées comme stable et non en version <strong>Béta</strong> :). Néanmoins, je n&rsquo;ai pas automatisé le déploiement par le biais de package .exe ou .msi.</p>



<p class="wp-block-paragraph">Pour terminer, il n&rsquo;y a pas besoin des PRIVILEGES ADMINISTRATEURS pour utiliser l&rsquo;application.</p>



<h3 class="wp-block-heading">Configuration</h3>



<p class="wp-block-paragraph">Ayant développé une application client, il n&rsquo;y a pas de notion FrontEnd ou Backend.</p>



<p class="wp-block-paragraph">Avant de démarrer le script ou l&rsquo;application, il est nécessaire de faire un détour par le fichier de configuration présent dans le répertoire config à la racine du projet. Comme pour les autres projets, je vais prendre le temps de décrire chacune des parties de ce fichier.</p>



<p class="wp-block-paragraph">Le fichier se découpe en 1 partie de 2 sous-parties.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>* Une sous-partie globale qui définit les paramètres du script et de son fonctionnement<br><br>* Une sous-partie dédiée à l’application Ollama permettant d&rsquo;établir la connexion à l&rsquo;API<sup data-fn="ab029326-a0aa-4f54-8f44-f7ace9c1a1ef" class="fn"><a href="#ab029326-a0aa-4f54-8f44-f7ace9c1a1ef" id="ab029326-a0aa-4f54-8f44-f7ace9c1a1ef-link">3</a></sup><br><br>* Une sous-partie concernant l’envoie de notification SMTP<sup data-fn="4226d9ae-4eee-4041-b3ed-aba0bbd32046" class="fn"><a href="#4226d9ae-4eee-4041-b3ed-aba0bbd32046" id="4226d9ae-4eee-4041-b3ed-aba0bbd32046-link">4</a></sup></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="187" class="wp-image-3612" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_200_ConfigurationFile.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_200_ConfigurationFile.jpg 883w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_200_ConfigurationFile-300x102.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_200_ConfigurationFile-768x262.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Le fichier de configuration sera amené à évoluer en fonction des suggestions et améliorations à apporter.</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Le choix de segmenter les parties ? Faciliter le maintien et l&rsquo;évolutivité du fichier foutrebleu !</strong></p>



<p class="has-text-align-left wp-block-paragraph">Allez, disséquons le fichier 🙂</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3607_f5a8b3-26 kt-accordion-has-3-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3607_af136e-c8"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>1 &#8211; Global</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph"><strong>DEBUG&nbsp;:</strong>&nbsp;Prend la valeur boolean $true ou $false. Ce paramètre permet d’activer dans la console le mode debug.</p>



<p class="wp-block-paragraph"><strong>TRANSACTION_SCRIPT&nbsp;:</strong>&nbsp;Prend la valeur boolean $true ou $false. Ce paramètre active ou non la redirection des flux de la console dans un fichier de log. Le fichier est écrasé à chaque exécution du code.</p>



<p class="wp-block-paragraph"><strong>TRANSACTION_SCRIPT_FILE&nbsp;:</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Indique le nom du fichier dans lequel toutes les sorties vont être redirigées. Attention ce dernier n’est pris en compte que si et seulement si le paramètre TRANSACTION_SCRIPT est définie à $true.</p>



<p class="wp-block-paragraph"><strong>AUTHOR&nbsp;:</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Prend la valeur une chaine de caractère de type String. Le nom du créateur des scripts afin d’afficher l’information dans les différents rendus.</p>



<p class="wp-block-paragraph"><strong>VERSION&nbsp;:</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Suivre l’évolution de versionning de l’outil et des scripts.</p>



<p class="wp-block-paragraph"><strong>DATE&nbsp;:</strong>&nbsp;Prend la valeur une chaine de caractère de type String. La date de la dernière modification et version disponible.</p>



<p class="wp-block-paragraph"><strong>MODULES&nbsp;:</strong>&nbsp;Prend en paramètre un tableau de chaine de caractère de type String. L’ensemble des modules définit dans ce tableau seront chargés au démarrage de l’application. Les modules doivent être présent dans le répertoire module au format .psm1</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3607_b34b97-62"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>2 &#8211; OLLAMA</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph"><strong>OLLAMA_NAME :</strong>&nbsp;Prend en paramètre une chaine de caractère de type String.&nbsp;Il correspond au nom fqdn de l’appliance ou l&rsquo;adresse IP du server. C’est à partir de cette valeur que la connexion cherchera a être établi</p>



<p class="wp-block-paragraph"><strong>OLLAMA_PORT :</strong>&nbsp;Prend en paramètre en entier de type Integer. Il s’agit du port sur lequel l’API est publiée. Par défaut la valeur est 11434</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3607_0dc231-1c"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>3 &#8211; SMTP</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph"><strong>FROM :</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Va contenir l’adresse de l’émetteur. Dans la logique, j’aime à utiliser le nom du serveur ou du rôle, par exemple srv-task01@contoso.com</p>



<p class="wp-block-paragraph"><strong>TO :</strong> Prend la valeur une chaine de caractère de type String. Va contenir l’adresse du destinataire qui doit recevoir le mail. Dans la logique, préférer une LD<sup data-fn="fc7d22f1-91fe-43bc-bdb1-ae350ba68ea5" class="fn"><a href="#fc7d22f1-91fe-43bc-bdb1-ae350ba68ea5" id="fc7d22f1-91fe-43bc-bdb1-ae350ba68ea5-link">5</a></sup> ou une BAL<sup data-fn="5e1bd756-a509-4f40-901f-71f8805eea3b" class="fn"><a href="#5e1bd756-a509-4f40-901f-71f8805eea3b" id="5e1bd756-a509-4f40-901f-71f8805eea3b-link">6</a></sup> partagée pour que l’information et la responsabilité ne soit pas porter que par un individu</p>



<p class="wp-block-paragraph"><strong>SERVERNAME :</strong> Prend la valeur une chaine de caractère de type String. Le nom du serveur qui fait relai SMTP, pour plus de sécurité, renseigner le FQDN<sup data-fn="eb570965-5581-4d3c-87d1-7503303ad416" class="fn"><a href="#eb570965-5581-4d3c-87d1-7503303ad416" id="eb570965-5581-4d3c-87d1-7503303ad416-link">7</a></sup> en lieu et place d’une IP</p>



<p class="wp-block-paragraph"><strong>PORT :&nbsp;</strong>Prend la valeur une chaine de caractère de type String. Préciser le port d’écoute du serveur SMTP. 25, 587, 465. Libre à chacun</p>
</div></div></div>
</div></div></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">J&rsquo;ai pris en compte la possibilité d&rsquo;éditer directement le fichier de configuration que ce soit depuis l&rsquo;interface graphique ou depuis l&rsquo;interface console. Par sécurité et comme toujours j&rsquo;ai repris ma fonction de régénération automatique du fichier de configuration en cas de suppression ou de corruption de ce dernier. Encore une fois, j&rsquo;en ai eu marre de me repalucher le fichier de conf à la mano&#8230; Comme ça nous sommes pénards !</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="675" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_201_BugsRelax-1-1024x675.jpg" alt="" class="wp-image-3615" style="aspect-ratio:1.51706597487156;width:314px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_201_BugsRelax-1-1024x675.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_201_BugsRelax-1-300x198.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_201_BugsRelax-1-768x506.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_201_BugsRelax-1.jpg 1087w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Il n&rsquo;y a en aucun cas besoin d&rsquo;installer ou d&rsquo;ajouter des dépendances. L&rsquo;application a été pensé pour être native (en dehors de Linux naturellement, mais je reviendrai sur ce point dans la sous partie à venir). </p>



<p class="wp-block-paragraph">Je pense que nous avons maintenant une pleine compréhension du fichier de configuration, nous pouvons passer à l&rsquo;installation de l&rsquo;application.</p>



<h3 class="wp-block-heading">Installation</h3>



<p class="wp-block-paragraph">L&rsquo;installation sera dissociée en deux parties. Une partie Windows et une partie Linux.</p>



<p class="wp-block-paragraph">Dans les deux cas, si le serveur OLLAMA n&rsquo;est pas joignable ou disponible, l&rsquo;application sera fermée ou l&rsquo;utilisateur sera invité à réaliser cette opération. Point important que je me devais de souligner.</p>



<p class="wp-block-paragraph">Réaliser un copier-coller de l&rsquo;ensemble de l&rsquo;architecture dans un répertoire. Au pif, <strong>ZelenZajac</strong> <strong>#mainsurlecoeur</strong></p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="715" height="283" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_202_DirContent.jpg" alt="" class="wp-image-3616" style="width:568px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_202_DirContent.jpg 715w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_202_DirContent-300x119.jpg 300w" sizes="auto, (max-width: 715px) 100vw, 715px" /></figure>
</div>


<p class="wp-block-paragraph">Pour des raisons de contrainte lié à la bibliothèque <em>WindowsForms</em>, l&rsquo;application GUI ainsi que son installation se fera sous <strong>Windows</strong>. Et par logique, l&rsquo;application et son installation CLI se fera sous <strong>Linux</strong>, même si vous êtes libre d&rsquo;utiliser et d&rsquo;installer l&rsquo;application CLI sous <strong>Windows</strong> (je ne suis pas psychorigide hein ?).</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3607_327c3d-ff kt-accordion-has-2-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3607_a41f41-bc"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Windows</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">J&rsquo;ai pour habitude sur les environnements <em>Windows Server</em> de dédier un répertoire <strong>scripts</strong> sur un disque dédié avec des privilèges strict.</p>



<p class="wp-block-paragraph">Dans ce cas précis, nous sommes dans un usage utilisateur. Donc il faut s&rsquo;attendre à ce que celui-ci soit utilisé par un utilisateur (C&rsquo;est d&rsquo;une logique déconcertante, je me surprends moi-même). Le script peut être stockées sur le bureau ou dans les documents. Autrement dit dans le profil de l&rsquo;utilisateur. Un partage réseau pourrait être intéressant, mais dans le cas d&rsquo;un usage multiple cela pourrait générer des dysfonctionnements (et surtout je n&rsquo;ai pas testé et envisagé ce mode de fonctionnement).</p>



<p class="wp-block-paragraph">Lancer le script <strong>SS_045_1.0.2_Ollama-GUI_Main.ps1</strong> pour réaliser les opérations d’initialisation et vérification des dépendances.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="602" height="452" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_212_RunReachable.jpg" alt="" class="wp-image-3619" style="width:368px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_212_RunReachable.jpg 602w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_212_RunReachable-300x225.jpg 300w" sizes="auto, (max-width: 602px) 100vw, 602px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3607_d39077-86"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Linux</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Une question qui je dirai jusqu&rsquo;à présent ne faisait plus trop débat. Linux ou Windows ? <a href="https://www.youtube.com/watch?v=x3lyvJJRJQE">La guerre !</a> reprend de plus belle avec la hausse du cout des licences 365, le côté gourmand de Windows 11 et l&rsquo;obsolescence matériel&#8230; </p>



<p class="wp-block-paragraph">Toutefois, Windows offre depuis Windows 10 (je ne suis pas sûr pour W7 ou W8) la possibilité d&rsquo;émuler un système UNIX dans son OS<sup data-fn="331098e3-6644-4277-a4fc-57684a0174ea" class="fn"><a href="#331098e3-6644-4277-a4fc-57684a0174ea" id="331098e3-6644-4277-a4fc-57684a0174ea-link">8</a></sup>. Il s&rsquo;avère également qu&rsquo;il est possible sous UNIX d&rsquo;utiliser les commandes powershell CORE. Et ça je trouve ça cool de voir qu&rsquo;officiellement les deux familles se rapprochent &lt;3</p>



<p class="wp-block-paragraph">Donc pour commencer il va falloir installer powershell sur notre environnement linux.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-b68345d80a6efaae843fb5510863db2a"><code><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-10-color">#Enregistrement de la clé CPG de Microsoft</mark>
$ sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc </strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="936" height="52" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_100_repo_0.jpg" alt="" class="wp-image-3648" style="aspect-ratio:18.007087172218284;width:468px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_100_repo_0.jpg 936w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_100_repo_0-300x17.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_100_repo_0-768x43.jpg 768w" sizes="auto, (max-width: 936px) 100vw, 936px" /></figure>
</div>


<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-a316ddcf22deb20d99970889f55166cc"><code><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-10-color">#Ajout du dépot MS RHEL 9</mark>
$ curl https://packages.microsoft.com/config/rhel/9/prod.repo | sudo tee /etc/yum.repos.d/microsoft.repo</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="935" height="657" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_100_repo_1.jpg" alt="" class="wp-image-3649" style="aspect-ratio:1.4231781773371421;width:521px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_100_repo_1.jpg 935w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_100_repo_1-300x211.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_100_repo_1-768x540.jpg 768w" sizes="auto, (max-width: 935px) 100vw, 935px" /></figure>
</div>


<p class="wp-block-paragraph">Puis nous installons le package powershell.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-5c31b6f9e619d1928499766930110678"><code><strong>$ sudo dnf update</strong>
<strong>$ sudo dnf install powershell</strong> </code></pre>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="222" class="wp-image-3650" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_100_repo_2.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_100_repo_2.jpg 932w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_100_repo_2-300x121.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_100_repo_2-768x311.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="251" class="wp-image-3651" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_100_repo_3.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_100_repo_3.jpg 937w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_100_repo_3-300x137.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_100_repo_3-768x351.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Naturellement et ça va de soi, si votre version est RHEL<sup data-fn="235bfa45-17eb-435d-9e84-9bb65c710a52" class="fn"><a href="#235bfa45-17eb-435d-9e84-9bb65c710a52" id="235bfa45-17eb-435d-9e84-9bb65c710a52-link">9</a></sup> 8 ou 10 vous ajouter la bonne version de votre répo&#8230; Vous adaptez l&rsquo;url en conséquence. Non parce que je vois déjà certains lecteurs hurler au scandale.</p>



<p class="has-text-align-center wp-block-paragraph"><strong>« Ca fonctionne pas, c&rsquo;est de la merde&#8230; <em>[Autres noms d&rsquo;oiseaux]</em>« </strong></p>



<p class="wp-block-paragraph">Pour démarrer powershell, il suffira de taper la commande <strong>pwsh</strong>.</p>



<p class="wp-block-paragraph">Mais revenons à notre projet. De manière sécurisé, nous allons déposer notre répertoire projet dans notre <strong>/home/john.doe/</strong> via un client sftp<sup data-fn="40ce894b-f40a-46ad-a646-e9656083e4cf" class="fn"><a href="#40ce894b-f40a-46ad-a646-e9656083e4cf" id="40ce894b-f40a-46ad-a646-e9656083e4cf-link">10</a></sup> (pour ma part WinSCP).</p>



<p class="wp-block-paragraph">Il va être nécessaire d&rsquo;installer un petit paquet pour convertir nos scripts qui sont au format dos en au format unix (et oui, j&rsquo;ai développé sur windows&#8230;).</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-7409c4b2623c4af1c25b68d34f985ede"><code><strong>$ sudo dnf install dos2unix
$ dos2unix -R /path/SS_045_APP_Ollama-API/*</strong>
<strong>$ dos2unix -R /path/SS_045_APP_Ollama-API/config/*</strong>
<strong>$ dos2unix -R /path/SS_045_APP_Ollama-API/modules/*</strong></code></pre>



<p class="wp-block-paragraph">Maintenant, nous sommes parés pour lancer le script.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-f8840e8a93fc584375b613306289dc0c"><code><strong>$ pwsh /home/r-one/SS_045_APP_Ollama-API/SS_045_1.0.2_Ollama-API_Main.ps1</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="852" height="1005" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_101_CLI.jpg" alt="" class="wp-image-3658" style="aspect-ratio:0.8477721895586882;width:342px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_101_CLI.jpg 852w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_101_CLI-254x300.jpg 254w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_101_CLI-768x906.jpg 768w" sizes="auto, (max-width: 852px) 100vw, 852px" /></figure>
</div></div></div></div>
</div></div></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Simple non ? C&rsquo;est maintenant l&rsquo;heure de vous présenter en détail les interfaces 🙂</p>



<h3 class="wp-block-heading">Présentation</h3>



<p class="wp-block-paragraph">Dans les deux cas, je vais présenter l&rsquo;ensemble des options. </p>



<p class="wp-block-paragraph">Il sera plus facile de suivre la description du mode CLI de par son côté procédurale. La présentation du mode GUI lui sera présenté comme suit, d&rsquo;abord l&rsquo;interface générale puis les différentes fenêtres et boutons.</p>



<h4 class="wp-block-heading">GUI sous Windows</h4>



<h5 class="wp-block-heading">Interface Principale</h5>



<p class="wp-block-paragraph">Au lancement de l&rsquo;application, un test de communication au serveur OLLAMA est réalisé. L&rsquo;interface graphique va être adapté selon le résultat retourné.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color"><strong>Server Unreachable</strong></mark></td><td class="has-text-align-center" data-align="center"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-11-color">Server</mark></strong><br><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-11-color">Reachable</mark></strong></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="150" height="64" class="wp-image-3617" style="width: 150px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_210_RunWarning.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_210_RunWarning.jpg 354w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_210_RunWarning-300x127.jpg 300w" sizes="auto, (max-width: 150px) 100vw, 150px" /><br><br><img loading="lazy" decoding="async" width="550" height="408" class="wp-image-3618" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_211_RunUnreachable.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_211_RunUnreachable.jpg 597w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_211_RunUnreachable-300x223.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="413" class="wp-image-3619" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_212_RunReachable.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_212_RunReachable.jpg 602w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_212_RunReachable-300x225.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Dans la colonne de gauche, nous sommes dans le cas où le serveur OLLAMA n&rsquo;est pas disponible (peu importe la raison. Il n&rsquo;est pas là, <a href="https://www.youtube.com/watch?v=4LyVjNwLabk">T&rsquo;es là ou T&rsquo;es pas là ?</a>). L&rsquo;application se lancera tout de même mais avec aucune possibilité d&rsquo;action. Contactez votre administrateur &lt;3</p>



<p class="wp-block-paragraph">Dans la colonne de droite, l&rsquo;application se lance sans problème. Ce qui signifie que la connexion au server Ollama a été effectué et que les LLMs<sup data-fn="e2f334db-287a-4735-9858-21f55c2c7e66" class="fn"><a href="#e2f334db-287a-4735-9858-21f55c2c7e66" id="e2f334db-287a-4735-9858-21f55c2c7e66-link">11</a></sup> déployés ont pu être récupérés et ce de manière automatique et dynamique. Ces derniers sont chargés dans la <strong>liste déroulante</strong>. Il est nécessaire de choisir un modèle pour soumettre un prompt.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="250" height="89" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_213_LLMs.jpg" alt="" class="wp-image-3625"/></figure>
</div>


<p class="wp-block-paragraph">Il est important de comprendre et pour rappel de la partie théorique que nous avons 3 types d&rsquo;appel API selon le prompt que nous allons soumettre à OLLAMA.</p>



<ul class="wp-block-list">
<li><span style="text-decoration: underline;"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">Standard :</mark></strong></span> C&rsquo;est le <strong><span style="text-decoration: underline;">mode par défaut</span></strong>. Une fois l&rsquo;application démarrée et un modèle choisi, vous pouvez soumettre un prompt à OLLAMA.</li>
</ul>



<ul class="wp-block-list">
<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color"><strong><span style="text-decoration: underline;">Image :</span></strong></mark> Ce mode nécessite de fournir une image. Cette même image va être converti en base64 afin d&rsquo;être soumis à OLLAMA. Il est recommandé d&rsquo;utiliser le modèle llava pour traiter les flux numériques. Naturellement, si le chemin d&rsquo;une image est renseigné, il n&rsquo;est pas possible de choisir un fichier.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="578" height="62" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_215_ItemPath_0.jpg" alt="" class="wp-image-3621" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_215_ItemPath_0.jpg 578w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_215_ItemPath_0-300x32.jpg 300w" sizes="auto, (max-width: 578px) 100vw, 578px" /></figure>
</div>


<ul class="wp-block-list">
<li><strong><span style="text-decoration: underline;"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">File :</mark></span></strong> Ce mode nécessite de fournir un fichier. Il est alors nécessaire de lire le contenu de cet élément et d&rsquo;ajouter ce dernier à la suite du prompt. Le point de difficulté réside dans le traitement des fichiers .pdf qui doivent être converti en amont. Fonctionnalité que je n&rsquo;ai pas traité pour l&rsquo;instant. Comme pour le mode image, si le chemin d&rsquo;un fichier est renseigné, il n&rsquo;est pas possible de choisir une image.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="584" height="58" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_215_ItemPath_1.jpg" alt="" class="wp-image-3626" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_215_ItemPath_1.jpg 584w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_215_ItemPath_1-300x30.jpg 300w" sizes="auto, (max-width: 584px) 100vw, 584px" /></figure>
</div>


<p class="wp-block-paragraph">Dans les deux cas afin de faciliter la saisie des chemins d&rsquo;accès aux items (image ou document) j&rsquo;ai mis en place l&rsquo;ouverture de l&rsquo;explorateur de fichier.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>Pictures</strong></td><td class="has-text-align-center" data-align="center"><strong>Files</strong></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="188" class="wp-image-3623" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_214_Img.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_214_Img.jpg 891w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_214_Img-300x103.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_214_Img-768x263.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="179" class="wp-image-3624" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_216_File.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_216_File.jpg 939w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_216_File-300x97.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_216_File-768x249.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Il suffira alors de saisir notre prompt dans le champ prévu à cet effet.</p>



<p class="wp-block-paragraph">Pour soumettre la requête à notre serveur OLLAMA nous allons devoir passer par les triggers, autrement dit par des événements sur des boutons 🙂</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3607_3c3642-1c kt-accordion-has-5-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3607_ae19dc-f4"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Ollama GO</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">L&rsquo;action sur ce bouton a pour effet de soumettre la requête saisie par vos soins au serveur OLLAMA en prenant en compte l&rsquo;ensemble des options et paramètres défini précédemment.</p>



<p class="wp-block-paragraph">Toutefois, il y a un certain nombre de contrôle :</p>



<ul class="wp-block-list">
<li>Le TextBox spécifique au prompt ne doit pas être vide</li>



<li>Les CheckBoxs spécifique aux choix avancés d&rsquo;analyse d&rsquo;image ou de fichier ont elles été cochées ?
<ul class="wp-block-list">
<li>Les chemins ont-ils une valeurs</li>
</ul>
</li>



<li>Le modèle d&rsquo;IA a-t-il été défini</li>
</ul>



<p class="wp-block-paragraph">Bref, autant de contrôle pour s&rsquo;assurer de ne pas fournir une requête vide au serveur OLLAMA et faire travailler ce dernier inutilement. </p>



<p class="has-text-align-center wp-block-paragraph"><strong><em>Personnellement vous aimez travailler pour des noix sur une décision absurde de votre N+1 ? Je crois que personne n&rsquo;aime bien ça hein &lt;3</em></strong></p>



<p class="wp-block-paragraph">Une fois l&rsquo;action sur le bouton effectué, un petit message discret « <mark style="background-color:rgba(0, 0, 0, 0);color:#418342" class="has-inline-color">Searching</mark> » apparait et vous fait savoir que le travail est en cours.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>Avec GPU</strong></td><td class="has-text-align-center" data-align="center"><strong>Sans GPU</strong></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="150" height="150" class="wp-image-3632" style="width: 150px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_219_Answer_1.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_219_Answer_1.jpg 400w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_219_Answer_1-300x300.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_219_Answer_1-150x150.jpg 150w" sizes="auto, (max-width: 150px) 100vw, 150px" /><br><br>Vous n&rsquo;avez pas trop a attendre</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="250" height="150" class="wp-image-3633" style="width: 250px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_219_Answer_2.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_219_Answer_2.jpg 720w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_219_Answer_2-300x180.jpg 300w" sizes="auto, (max-width: 250px) 100vw, 250px" /><br><br>Va falloir être patient et ne pas être trop pressé</td></tr></tbody></table></figure>



<p class="has-text-align-center wp-block-paragraph">Bref, au final vous arriverez à ça&#8230; C&rsquo;est cool non ? 🙂</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="559" height="187" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_219_Answer_0.jpg" alt="" class="wp-image-3635" style="aspect-ratio:2.989407883313075;width:448px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_219_Answer_0.jpg 559w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_219_Answer_0-300x100.jpg 300w" sizes="auto, (max-width: 559px) 100vw, 559px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3607_be6a5a-89"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Save</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">L&rsquo;action sur ce bouton a pour effet de sauvegarder votre requête au format .txt.</p>



<p class="wp-block-paragraph">Il y a aussi des conditions sur ce bouton. Il faut que les TextBoxs dédiés à OLLAMA (prompt et answer) ne soient pas vide ou null. Sinon nous sauvegarderions du vent&#8230;</p>



<p class="wp-block-paragraph">N&rsquo;étant pas sadique, cela va ouvrir une nouvelle fenêtre d&rsquo;explorateur windows pour sauvegarder votre fichier. Ce dernier contiendra l&rsquo;heure de l&rsquo;exécution de votre requête, votre prompt ainsi que la réponse retourner par le modèle présent dans OLLAMA.</p>



<p class="wp-block-paragraph"></p>


<div class="kb-gallery-wrap-id-3607_f4c01c-3f alignnone wp-block-kadence-advancedgallery"><div class="kb-gallery-ul kb-gallery-non-static kb-gallery-type-carousel kb-gallery-id-3607_f4c01c-3f kb-gallery-caption-style-bottom-hover kb-gallery-filter-none" data-image-filter="none" data-lightbox-caption="true"><div class="kt-blocks-carousel splide kt-carousel-container-dotstyle-dark kt-carousel-arrowstyle-whiteondark kt-carousel-dotstyle-dark kb-slider-group-arrow kb-slider-arrow-position-center" data-columns-xxl="3" data-columns-xl="3" data-columns-md="3" data-columns-sm="2" data-columns-xs="1" data-columns-ss="1" data-slider-anim-speed="400" data-slider-scroll="1" data-slider-arrows="true" data-slider-dots="true" data-slider-hover-pause="false" data-slider-auto="" data-slider-speed="7000" data-slider-gap="0px" data-slider-gap-tablet="0px" data-slider-gap-mobile="0px" data-show-pause-button="false" data-slider-label="Photo Gallery Carousel"><div class="splide__track"><ul class="kt-blocks-carousel-init kb-gallery-carousel splide__list"><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land32 kb-has-image-ratio-land32" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_220_Save_0.jpg" width="635" height="294" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_220_Save_0.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_220_Save_0.jpg" data-id="3636" class="wp-image-3636 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_220_Save_0.jpg 635w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_220_Save_0-300x139.jpg 300w" sizes="auto, (max-width: 635px) 100vw, 635px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land32 kb-has-image-ratio-land32" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_220_Save_1.jpg" width="200" height="153" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_220_Save_1.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_220_Save_1.jpg" data-id="3637" class="wp-image-3637 skip-lazy"/></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-land32 kb-has-image-ratio-land32" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_220_Save_2.jpg" width="829" height="368" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_220_Save_2.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_220_Save_2.jpg" data-id="3638" class="wp-image-3638 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_220_Save_2.jpg 829w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_220_Save_2-300x133.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_220_Save_2-768x341.jpg 768w" sizes="auto, (max-width: 829px) 100vw, 829px" /></div></div></figure></div></div></li></ul></div></div></div></div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3607_9a77b8-a3"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Send Mail</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">L&rsquo;action sur ce bouton a pour effet d&rsquo;envoyer par mail le résultat de requête.</p>



<p class="wp-block-paragraph">Comme pour le bouton de sauvegarde précédent, les conditions sur ce bouton sont les mêmes. Il faut que les TextBoxs dédiés à OLLAMA (prompt et answer) ne soient pas vide ou null. Sinon cette fois ci, nous enverrons du vent&#8230;</p>



<p class="wp-block-paragraph">Un axe d&rsquo;amélioration serait de prendre en compte des adresses mails multiples. Je garde ça sous la main 🙂</p>



<p class="wp-block-paragraph"></p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="413" class="wp-image-3641" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_221_Mail_0.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_221_Mail_0.jpg 599w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_221_Mail_0-300x225.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="408" class="wp-image-3642" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_221_Mail_1.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_221_Mail_1.jpg 973w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_221_Mail_1-300x223.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_221_Mail_1-768x570.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3607_057b34-f9"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Settings</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">L&rsquo;action sur ce bouton est soumise à une seule condition de contrôle. Le fichier de configuration doit exister sous le chemin par défaut.</p>



<p class="wp-block-paragraph">Je me suis dit que ça serait bien de permettre à l&rsquo;usager de pouvoir modifier le fichier de configuration directement depuis l&rsquo;application. Attention, car cela ne modifie pas la configuration du code en cas de régénération du dit fichier.</p>



<p class="wp-block-paragraph">Peux être qu&rsquo;une fonctionnalité d&rsquo;export du fichier de configuration pourrait être sympa 🙂</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="741" height="453" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_222_Settings.jpg" alt="" class="wp-image-3643" style="aspect-ratio:1.6358021758753385;width:424px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_222_Settings.jpg 741w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_222_Settings-300x183.jpg 300w" sizes="auto, (max-width: 741px) 100vw, 741px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-5 kt-pane3607_d5e8f0-18"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Debug</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Le bouton debug sert au debug et pour cela je laisse la parole à la sous parti suivante 🙂</p>
</div></div></div>
</div></div></div>



<h5 class="wp-block-heading">Interface Debug</h5>



<p class="wp-block-paragraph">Cette interface permet de lister les interfaces et les services de notre serveur OLLAMA. Naturellement, j&rsquo;ai poussé le vice un peu plus loin. Si je test le port OLLAMA et le port du server SMTP, j&rsquo;ai ajouté un petit bonus en plus. En lien avec l&rsquo;article OpenWeBUI, je test les ports 8080 et 443 en dur. </p>



<p class="wp-block-paragraph">Je verrai plus tard s&rsquo;il y a un intérêt à ajouter ou non ces paramètres dans le fichier de configuration.</p>



<p class="wp-block-paragraph">Bref, cela permet de vérifier les communications et les interfaces de nos différents serveurs.</p>



<figure class="wp-block-table aligncenter"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">Unavailable</mark></strong></td><td class="has-text-align-center" data-align="center"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-11-color"><strong>Available</strong></mark></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="407" class="wp-image-3655" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_223_Debug_1.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_223_Debug_1.jpg 598w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_223_Debug_1-300x222.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="412" class="wp-image-3656" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_223_Debug_0.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_223_Debug_0.jpg 602w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_223_Debug_0-300x225.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<h5 class="wp-block-heading">Interface About</h5>



<p class="wp-block-paragraph">Que serait-ce une application sans un petit About ? Histoire de laisser son nom à la postérité ? D&rsquo;un côté c&rsquo;est de l&rsquo;orgueil, de l&rsquo;autre, il me parait normal comme un artiste de signer son art non ?</p>



<p class="wp-block-paragraph">D&rsquo;ailleurs, est ce que développeur n&rsquo;est-il pas un métier de création et donc d&rsquo;art ? Voyez-vous, je suis une b*te en dessin, un musicien médiocre. Par contre, j&rsquo;ai des idées de dev et je trouve que ce que je faisais et fais commence à avoir de la gueule non ? Une question qui selon moi ouvre au débat.</p>



<p class="wp-block-paragraph">Bref, depuis la barre de menu, <strong>Help &gt; About</strong> et vous retrouverez les informations de notre application. D&rsquo;ailleurs cela me fait penser que je n&rsquo;ai pas mis/caché d&rsquo;Easter egg&#8230;</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="597" height="448" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_224_About.jpg" alt="" class="wp-image-3630" style="aspect-ratio:1.3326226770422485;width:432px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_224_About.jpg 597w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_224_About-300x225.jpg 300w" sizes="auto, (max-width: 597px) 100vw, 597px" /></figure>
</div>


<h4 class="wp-block-heading">CLI sous Linux (et Windows)</h4>



<p class="wp-block-paragraph">Après réflexion, je vais afficher les captures sous les deux environnements à des fins de comparaison. Mais je mets l&rsquo;accent sous l&rsquo;environnement UNIX. </p>



<p class="wp-block-paragraph">La présentation se fera menu par sous-menu. Je vous renvoie à la partie théorique quant au cycle de vie, algorithme et pseudo code.</p>



<h5 class="wp-block-heading">Interface Principale</h5>



<p class="wp-block-paragraph">Hormis la banner gigantesque pour marquer les esprits, nous retrouvons un choix de navigation de 6 parties. </p>



<p class="has-text-align-center wp-block-paragraph"><strong>Pourtant moi j&rsquo;en compte 5. Tu sais compter ?</strong> </p>



<p class="has-text-align-left wp-block-paragraph">Oui, je vous remercie de vous inquiéter de mon niveau mathématique. Je sais compter et le 6eme choix n&rsquo;apparait que sur une condition spécifique. 🙂</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>Linux</strong></td><td class="has-text-align-center" data-align="center"><strong>Windows</strong></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="649" class="wp-image-3658" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_101_CLI.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_101_CLI.jpg 852w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_101_CLI-254x300.jpg 254w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_101_CLI-768x906.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="689" class="wp-image-3660" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_101_CLI_W.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_101_CLI_W.jpg 704w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_101_CLI_W-239x300.jpg 239w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Regardons ce que nous offres les possibilités de navigation :</p>



<ul class="wp-block-list">
<li><strong><span style="text-decoration: underline;">[1] Select LLM :</span></strong> Permet de sélectionner un modèle de moteur IA installé préalablement sur le serveur OLLAMA</li>



<li><strong><span style="text-decoration: underline;">[2] Prompt Type :</span></strong> Permet de choisir le type de requête que nous souhaitons soumettre Image, Fichier ou simple prompt</li>



<li><strong>[<span style="text-decoration: underline;">3] Settings :</span></strong> Permet d&rsquo;éditer le fichier de configuration directement depuis la console CLI</li>



<li><strong><span style="text-decoration: underline;">[4] Tropubleshooting :</span></strong> Permet de lancer un mode debug</li>



<li><strong><span style="text-decoration: underline;">[5] About Zelen Zajac :</span></strong> Permet d&rsquo;afficher les informations de l&rsquo;application</li>



<li><strong><span style="text-decoration: underline;">[6] Launch Ollama Request :</span></strong> Permet de soumettre un prompt au serveur OLLAMA si et uniquement si un LLM a été préalablement sélectionné.</li>



<li><strong><span style="text-decoration: underline;">[0] Quit :</span></strong> Pour sortir de l&rsquo;application proprement et non à la hussard à grand coup de Ctrl+C&#8230;</li>
</ul>



<h5 class="wp-block-heading">Sélection du LLM</h5>



<p class="wp-block-paragraph">Comme pour l&rsquo;application GUI, si la connexion au serveur OLLAMA est établi, l&rsquo;ensemble des modèles présents sur le serveur sont automatiquement listés. Il suffit alors à l&rsquo;utilisateur de choisir le modèle qui correspond à prompt qu&rsquo;il souhaite soumettre. </p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>Linux</strong></td><td class="has-text-align-center" data-align="center"><strong>Windows</strong></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="172" class="wp-image-3661" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_102_SelectModel_1.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_102_SelectModel_1.jpg 557w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_102_SelectModel_1-300x94.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="137" class="wp-image-3662" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_102_SelectModel_1w.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_102_SelectModel_1w.jpg 693w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_102_SelectModel_1w-300x75.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Il est important qu&rsquo;il ne soit pas possible de revenir en arrière. Le dernier choix et le choix qui fait foi. Une fois le moteur sélectionné, cela affichera l&rsquo;option 6 pour soumettre une requête au serveur OLLAMA.</p>



<h5 class="wp-block-heading">Sélection du type de prompt</h5>



<p class="wp-block-paragraph">Par défaut et pour éviter toutes erreurs, le type de prompt est défini sur <strong>Standard</strong>. Toutefois et comme pour l&rsquo;interface GUI, il sera nécessaire dans la sélection des modes <strong>Image</strong> ou <strong>Document</strong> de préciser le chemin des dits éléments à soumettre au serveur.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3607_038de0-dd kt-accordion-has-3-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3607_6f9774-d5"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Standard</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>Linux</strong></td><td class="has-text-align-center" data-align="center"><strong>Windows</strong></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="314" class="wp-image-3663" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_103_PromptType_0.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_103_PromptType_0.jpg 556w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_103_PromptType_0-300x171.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="252" class="wp-image-3664" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_103_PromptType_0w.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_103_PromptType_0w.jpg 695w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_103_PromptType_0w-300x137.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3607_431993-28"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Image</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>Linux</strong></td><td class="has-text-align-center" data-align="center"><strong>Windows</strong></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="348" class="wp-image-3665" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_103_PromptType_1.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_103_PromptType_1.jpg 558w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_103_PromptType_1-300x190.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="255" class="wp-image-3666" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_103_PromptType_1w.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_103_PromptType_1w.jpg 749w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_103_PromptType_1w-300x139.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3607_273a2a-b7"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Document</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>Linux</strong></td><td class="has-text-align-center" data-align="center"><strong>Windows</strong></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="343" class="wp-image-3667" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_103_PromptType_2.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_103_PromptType_2.jpg 557w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_103_PromptType_2-300x187.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="278" class="wp-image-3668" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_103_PromptType_2w.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_103_PromptType_2w.jpg 694w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_103_PromptType_2w-300x152.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>
</div></div></div>
</div></div></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Si dans le mode GUI j&rsquo;assiste l&rsquo;utilisateur avec un explorateur de fichiers pour trouver l&rsquo;élément, il faudra connaitre ici le chemin de tête. Cela pourra je pense faire office d&rsquo;une fonctionnalité futur.</p>



<p class="wp-block-paragraph">En toutes circonstances, il y aura un contrôle des chemins par la suite afin de s&rsquo;assurer de ne pas charger un élément existant.</p>



<h5 class="wp-block-heading">Settings</h5>



<p class="wp-block-paragraph">Selon la nature de l&rsquo;OS, la modification du fichier de configuration ne se fait pas de la même manière. </p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>Linux</strong></td><td class="has-text-align-center" data-align="center"><strong>Windows</strong></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="202" class="wp-image-3671" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_104_Settings.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_104_Settings.jpg 837w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_104_Settings-300x110.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_104_Settings-768x283.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="259" class="wp-image-3672" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_104_Settingsw.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_104_Settingsw.jpg 841w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_104_Settingsw-300x141.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_104_Settingsw-768x362.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Depuis un terminal (donc pour Linux), il est nécessaire de forcer l&rsquo;interactivité depuis un client SSH. Sans quoi nous sortons du script, ça plante et nous générons un fichier temporaire. Utilisateur de <strong>vim </strong>et donc de <strong>vi </strong>j&rsquo;ai choisi cet éditeur de texte. Toutefois, je pourrais implémenter la possibilité de choisir entre <strong>nano </strong>et <strong>vi </strong>dans le fichier de configuration.</p>



<p class="wp-block-paragraph">Côté Windows, nous sortons comme pour Linux de ce côté agnostique. Powershell Core, gère dans un processus à part et hors terminal l&rsquo;application <strong>notepad.exe</strong>. Nous aurons donc une interface graphique qui s&rsquo;offre à nous.</p>



<p class="wp-block-paragraph">Il faudra alors jouer des combinaisons :</p>



<ul class="wp-block-list">
<li><strong>Linux</strong>
<ul class="wp-block-list">
<li>vim   : esc puis :x!</li>



<li>vi      : esc puis :x!</li>



<li>nano : Ctrl+x</li>
</ul>
</li>



<li><strong>Windows</strong>
<ul class="wp-block-list">
<li>notepad : Ctrl+s</li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph"><span style="text-decoration: underline;"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">/!\</mark> Attention :</strong></span> <em>Comme pour le mode GUI je ne modifie pas la configuration dans le code dans le cas de la régénération du fichier de configuration en cas d&rsquo;altération de ce dernier.</em></p>



<h5 class="wp-block-heading">Troubleshooting</h5>



<p class="wp-block-paragraph">Cette sous-interface permet de vérifier si l&rsquo;interface ou les interfaces de notre serveur OLLAMA et autres serveurs sont bien accessible.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>Linux</strong></td><td class="has-text-align-center" data-align="center"><strong>Windows</strong></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="125" class="wp-image-3674" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_105_Debug.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_105_Debug.jpg 558w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_105_Debug-300x68.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="92" class="wp-image-3675" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_105_Debugw.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_105_Debugw.jpg 697w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_105_Debugw-300x50.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Il est important de comprendre qu&rsquo;il peut y avoir de multiples pour qu&rsquo;un protocole ou une ressource ne soient pas joignables. Cela peut résulter :</p>



<ul class="wp-block-list">
<li>Firewall interne au serveur</li>



<li>Firewall externe si segmentation des LANs</li>



<li>Mauvais paramétrage du SELinux</li>



<li>Résolution DNS impossible</li>



<li>etc.</li>
</ul>



<p class="wp-block-paragraph">Je vous recommande de contacter votre administrateur. Si l&rsquo;administrateur c&rsquo;est vous, je vous recommande de vous retrousser les manches ou de changer de métier. Elever des chèvres en Ardèche c&rsquo;est pas mal aussi 🙂</p>



<p class="wp-block-paragraph">Pour le fun, j&rsquo;ai ajouté en dur dans le code, le contrôle des ports <strong>8080/tcp</strong> et <strong>443/tcp</strong> qui sont les ports de mon daemon <strong>OpenWebUI</strong>. A voir si cela doit être amélioré ou non.</p>



<h5 class="wp-block-heading">About</h5>



<p class="wp-block-paragraph">Ce sous menu n&rsquo;est présent que pour afficher mon nom et laisser ce dernier à la postérité. Et aussi et surtout pour afficher la date de dernière publication de la version.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>Linux</strong></td><td class="has-text-align-center" data-align="center"><strong>Windows</strong></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="188" class="wp-image-3676" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_106_About.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_106_About.jpg 558w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_106_About-300x103.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="150" class="wp-image-3677" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_106_Aboutw.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_106_Aboutw.jpg 695w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_106_Aboutw-300x82.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="has-text-align-center wp-block-paragraph"><a href="https://www.youtube.com/watch?v=dRFoVBenCpI&amp;list=RDdRFoVBenCpI&amp;start_radio=1">C&rsquo;est peut-être un détails pour vous, mais pour moi ça veux dire beaucoup !</a></p>



<h5 class="wp-block-heading">Launch Ollama</h5>



<p class="wp-block-paragraph">Nous voilà enfin dans le vif du sujet. Bon, je ne vais pas trop m&rsquo;étendre sur le sujet car cela sera présenté dans la Partie 3 Démonstration. Je présenterai que de manière succincte les étapes du mode standard comme j&rsquo;ai pu le faire plus haut pour le mode graphique.</p>



<p class="wp-block-paragraph">Naturellement il faut au préalable avoir sélectionner un modèle de moteur IA et selon le besoin le type de prompt que nous souhaitons soumettre.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3607_89f087-f6 kt-accordion-has-4-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3607_a92342-bc"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>1 &#8211; Rédaction du prompt</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Lors de la soumission de la requête, j&rsquo;ai décidé d&rsquo;exécuter la tache en dehors du programme principale afin de ne pas bloquer ce dernier durant la soumission de notre requête au serveur OLLAMA. </p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>Linux</strong></td><td class="has-text-align-center" data-align="center"><strong>Windows</strong></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="68" class="wp-image-3680" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_107_Ollama_0.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_107_Ollama_0.jpg 949w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_107_Ollama_0-300x37.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_107_Ollama_0-768x95.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="222" class="wp-image-3681" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_107_Ollama_0w.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_107_Ollama_0w.jpg 936w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_107_Ollama_0w-300x121.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_107_Ollama_0w-768x310.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">J&rsquo;ai également ajouté une barre de progression afin d&rsquo;informer l&rsquo;utilisateur que le travail est en cours. Pas bête hein ?</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3607_1cd3b8-ea"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>2 &#8211; Retour du serveur OLLAMA</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Après un moment d&rsquo;attente toujours pour les mêmes raisons d&rsquo;absence de GPU, la réponse s&rsquo;affiche dans le plus beau moment anthropique &lt;3</p>



<p class="wp-block-paragraph"></p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>Linux</strong></td><td class="has-text-align-center" data-align="center"><strong>Windows</strong></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="110" class="wp-image-3682" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_107_Ollama_1.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_107_Ollama_1.jpg 969w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_107_Ollama_1-300x60.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_107_Ollama_1-768x153.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="313" height="121" class="wp-image-3683" style="width: 313px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_107_Ollama_1w.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_107_Ollama_1w.jpg 941w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_107_Ollama_1w-300x116.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_107_Ollama_1w-768x297.jpg 768w" sizes="auto, (max-width: 313px) 100vw, 313px" /></td></tr></tbody></table></figure>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3607_776175-e1"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>3 &#8211; Sauvegarder la requête ?</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Cela peut étonner, mais l&rsquo;ensemble des fonctionnalités proposées dans l&rsquo;application graphique sont présentes dans l&rsquo;application CLI.</p>



<p class="wp-block-paragraph">La seule nuance, il n&rsquo;est pas possible pour l&rsquo;instant de modifier l&#8217;emplacement de sauvegarde des requêtes en mode CLI. Ces dernières se retrouveront dans le répertoire <strong>export</strong> à la racine du répertoire.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>Linux</strong></td><td class="has-text-align-center" data-align="center"><strong>Windows</strong></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="93" class="wp-image-3685" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_107_Ollama_2.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_107_Ollama_2.jpg 556w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_107_Ollama_2-300x51.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="52" class="wp-image-3686" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_107_Ollama_2w.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_107_Ollama_2w.jpg 695w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_107_Ollama_2w-300x28.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Nous retrouvons naturellement le modèle LLM, la date, le prompt, la réponse.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="970" height="241" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_108_export.jpg" alt="" class="wp-image-3687" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_108_export.jpg 970w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_108_export-300x75.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_108_export-768x191.jpg 768w" sizes="auto, (max-width: 970px) 100vw, 970px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3607_bcafe7-c8"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>4 &#8211; Envoi par mail ?</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Voilà que je viens me contredire avec mes écrits précédents. Il y a pour l&rsquo;instant une fonctionnalité qui m&rsquo;échappe. L&rsquo;envoi de mail. </p>



<p class="wp-block-paragraph">Déjà et même si j&rsquo;ai modernisé ma fonction d&rsquo;envoi en prenant compte de l&rsquo;obsolescence Microsoft, l&rsquo;usage de la bibliothèque <strong>[System.Net.Mail.MailMessage]</strong> et <strong>[System.Net.Mail.SMTPClient]</strong> ne fonctionnent pas sur Linux.</p>



<p class="wp-block-paragraph">Je pourrais développer et utiliser mon script bash pour passer par MUTT. Mais voilà je souhaite garder et aboutir à un script 100% agnostique Linux &lt;-&gt; Windows en powershell donc il est urgent de ne rien faire.</p>



<p class="wp-block-paragraph">Tout ça pour dire qu&rsquo;il n&rsquo;est pas possible d&rsquo;envoyer un mail sous Linux&#8230;</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>Linux</strong></td><td class="has-text-align-center" data-align="center"><strong>Windows</strong></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="95" class="wp-image-3688" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_107_Ollama_3.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_107_Ollama_3.jpg 556w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_107_Ollama_3-300x52.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="76" class="wp-image-3689" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_107_Ollama_3w.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_107_Ollama_3w.jpg 695w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_107_Ollama_3w-300x41.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Toutefois, rien ne vous empêche de faire un bash avec un cron sur présence d&rsquo;un fichier dans le répertoire pour faire un envoi automatique. Cela reste de la bidouille, mais dans certains cas cela peut être vu comme une méthode de contournement.</p>
</div></div></div>
</div></div></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Donc, si je résume sous Linux cela nous donne avec toutes les étapes :</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="969" height="524" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_107_Ollama_4.jpg" alt="" class="wp-image-3690" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_107_Ollama_4.jpg 969w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_107_Ollama_4-300x162.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_107_Ollama_4-768x415.jpg 768w" sizes="auto, (max-width: 969px) 100vw, 969px" /></figure>
</div>


<p class="wp-block-paragraph">Pour se faire une idée, je vous renvoie à la partie 3 démonstration. Dans une vidéo, je vais traiter des deux modes de mon application.</p>



<h3 class="wp-block-heading">GitHub</h3>



<p class="has-text-align-center wp-block-paragraph"><strong>Miaou</strong></p>



<p class="has-text-align-center wp-block-paragraph"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">(Uniquement sur contact LinkedIn)</mark></strong></p>



<p class="wp-block-paragraph">Je souhaite vraiment échanger avec vous et vous fournir le lien privé du projet. Ainsi je pense que recueillir vos avis, retours peuvent me permettre de faire évoluer l&rsquo;application dans le bon sens.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><a href="https://erwanguillemard.com/projet-zelen-zajac-ollama-client-ia-partie-1-theorie">Partie 1 : Théorie<br>&lt;-</a></td><td class="has-text-align-center" data-align="center"><a href="https://erwanguillemard.com/projet-zelen-zajac-ollama-client-ia">PROJET &#8211; Zelen Zajac</a></td><td class="has-text-align-center" data-align="center"><a href="https://erwanguillemard.com/projet-zelen-zajac-ollama-client-ia-partie-3-demonstration">Partie 3 : Démonstration<br>-&gt;</a></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>


<ol class="wp-block-footnotes"><li id="7ba6418f-d8b5-40ed-9084-40b1c2ab966c"><strong>GUI :</strong> Graphical User Interface <a href="#7ba6418f-d8b5-40ed-9084-40b1c2ab966c-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="7b11378d-dfb7-4f3c-af2d-0c85e1e74ded"><strong>CLI : </strong>Command Line Interface <a href="#7b11378d-dfb7-4f3c-af2d-0c85e1e74ded-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="ab029326-a0aa-4f54-8f44-f7ace9c1a1ef"><strong>API :</strong> Application Programming Interface <a href="#ab029326-a0aa-4f54-8f44-f7ace9c1a1ef-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="4226d9ae-4eee-4041-b3ed-aba0bbd32046"><strong>SMTP :</strong> Simple Mail Transfert Protocol <a href="#4226d9ae-4eee-4041-b3ed-aba0bbd32046-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="fc7d22f1-91fe-43bc-bdb1-ae350ba68ea5"><strong>LD :</strong> Distribution List <a href="#fc7d22f1-91fe-43bc-bdb1-ae350ba68ea5-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="5e1bd756-a509-4f40-901f-71f8805eea3b"><strong>BAL :</strong> Boite Aux Lettres <a href="#5e1bd756-a509-4f40-901f-71f8805eea3b-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="eb570965-5581-4d3c-87d1-7503303ad416"><strong>FQDN :</strong> Fully Qualified Domain Name <a href="#eb570965-5581-4d3c-87d1-7503303ad416-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="331098e3-6644-4277-a4fc-57684a0174ea"><strong>OS :</strong> Operating System <a href="#331098e3-6644-4277-a4fc-57684a0174ea-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="235bfa45-17eb-435d-9e84-9bb65c710a52"><strong>RHEL :</strong> RedHat Entreprise Linux <a href="#235bfa45-17eb-435d-9e84-9bb65c710a52-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="40ce894b-f40a-46ad-a646-e9656083e4cf"><strong>SFTP :</strong> Secure File Transfert Protocol <a href="#40ce894b-f40a-46ad-a646-e9656083e4cf-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li><li id="e2f334db-287a-4735-9858-21f55c2c7e66"><strong>LLM :</strong> Large Language Models <a href="#e2f334db-287a-4735-9858-21f55c2c7e66-link" aria-label="Aller à la note de bas de page 11">↩︎</a></li></ol>


<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PROJET &#8211; Zelen Zajac, Ollama Client IA Partie 1 : Théorie</title>
		<link>https://erwanguillemard.com/projet-zelen-zajac-ollama-client-ia-partie-1-theorie/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sat, 01 Aug 2026 11:57:20 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Projets]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[IA]]></category>
		<category><![CDATA[OLLAMA]]></category>
		<category><![CDATA[Projet]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3604</guid>

					<description><![CDATA[Expression du besoin Comme nous avons pu le constater et l&#8217;étudier dans le précédent article, il existe des solutions qui s&#8217;interfacent très bien avec OLLAMA, par exemple la solution OpenWebUI qui propose une interface web depuis un navigateur. Toutefois, si je souhaite ne pas utiliser de solution orienté serveur pour des raisons de ressources restreintes...]]></description>
										<content:encoded><![CDATA[


<h3 class="wp-block-heading">Expression du besoin</h3>



<p class="wp-block-paragraph">Comme nous avons pu le constater et l&rsquo;étudier dans le précédent article, il existe des solutions qui s&rsquo;interfacent très bien avec OLLAMA, par exemple la solution OpenWebUI qui propose une interface web depuis un navigateur.</p>



<p class="wp-block-paragraph">Toutefois, si je souhaite ne pas utiliser de solution orienté serveur pour des raisons de ressources restreintes et ou de cout financier, la présence d&rsquo;une API<sup data-fn="1f056983-3baa-4362-8664-8127dfca2b9c" class="fn"><a href="#1f056983-3baa-4362-8664-8127dfca2b9c" id="1f056983-3baa-4362-8664-8127dfca2b9c-link">1</a></sup> sur OLLAMA change la donne. </p>



<p class="wp-block-paragraph">Je souhaiterai donc mettre en place une solution agnostique simple d&rsquo;utilisateur qui permettrait à un ou plusieurs utilisateurs de soumettre des requêtes à notre service interne OLLAMA le tout de façon sécurisé. Si possible cette même solution doit être compatible pour les environnements Windows et Linux.</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Pourquoi d&rsquo;ailleurs ?</strong></p>



<p class="wp-block-paragraph">Les couts d&rsquo;usage et d&rsquo;acquisition des produits Microsoft s&rsquo;oriente de plus en plus vers un modèle rental et non plus permanent ce qui sur le moyen et long terme peut vite devenir insupportable sur le plan financier. De plus la consommation des ressources de calcul des ordinateurs à usage professionnelle souffre d&rsquo;obsolescence matérielle difficilement justifiable. Certaines organisations ont fait le choix de se tourner vers des distributions GNU/Linux professionnel. Donc cela justifie je pense l&rsquo;argument d&rsquo;une solution agnostique Windows et Linux 🙂</p>



<p class="wp-block-paragraph">Bref, au-delà de ça, il faudrait avoir une solution qui puisse être évolu&rsquo;tif (tiens, cela pourrait être un excellent nom pour un salon de coiffure) dans le temps et qui assurerait un minimum de fonctionnalité que nous pouvons retrouver dans des solutions qui ont pignons sur rue :</p>



<ul class="wp-block-list">
<li>Export des résultats</li>



<li>Envoi des résultats par mail</li>



<li>etc (comprendre à détailler)</li>
</ul>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Surtout et encore une fois avoir une solution simple et sexy. Sinon les utilisateurs ne l&rsquo;utiliseront pas.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="150" height="180" class="wp-image-3698" style="width: 150px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_002_playboy.png" alt=""><br><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-6-color"><strong>Vous avez dit Sexy ?</strong></mark></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading">Cahier des Charges</h3>



<p class="wp-block-paragraph">Bien, maintenant que nous avons les plans en main, passons à notre checklist pour construire tout cela. </p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Attention, toujours sans se laisser entrainer par se bon vieux <a href="https://www.youtube.com/watch?v=TKZVUtvjBdM&amp;list=RDTKZVUtvjBdM&amp;start_radio=1">White Rabbit</a> un peu trop adeptes des <a href="https://fr.wikipedia.org/wiki/Jefferson_Airplane#:~:text=En%20argot%20anglais%2C%20l'expression,pas%20se%20br%C3%BBler%20les%20doigts.">Jeffersons Airplaine</a>, sinon c&rsquo;est le bad trip assuré et notre application va pas bien ressembler à grand-chose.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="354" class="wp-image-1386" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2024/01/mutt_logo.png" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2024/01/mutt_logo.png 452w, https://erwanguillemard.com/wp-content/uploads/2024/01/mutt_logo-300x193.png 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Et bien sachez que pour une fois, j&rsquo;ai été discipliné. J&rsquo;ai ces derniers mois eu le temps de reposer mes petites cellules grises et de prendre du recul 🙂</p>



<p class="wp-block-paragraph">Quel langage vais-je utiliser ? Pour rappel, il faut que ce dernier soit agnostique au SE<sup data-fn="dc0df89a-4504-4d2f-a2f8-df3ab0657c38" class="fn"><a href="#dc0df89a-4504-4d2f-a2f8-df3ab0657c38" id="dc0df89a-4504-4d2f-a2f8-df3ab0657c38-link">2</a></sup> Windows et Linux pour faciliter la gestion de l&rsquo;application. Je propose d&rsquo;utiliser Powershell dans sa version 5.</p>



<ul class="wp-block-list">
<li>Ce choix est motivé par la présence par défaut de cette version sur tous les postes utilisateurs Windows (à ce moment de rédaction de ce billet) et ce dernier est compatible avec Powershell 7</li>



<li>Il est possible d&rsquo;exécuter du code Powershell sous Linux sans à avoir à faire de la bidouille car cela est officiellement supporté, maintenu et mise à disposition par Microsoft</li>



<li>Nous pouvons faire des interfaces graphiques et CLI<sup data-fn="770fdefd-6256-44f6-9eac-13389dbaf227" class="fn"><a href="#770fdefd-6256-44f6-9eac-13389dbaf227" id="770fdefd-6256-44f6-9eac-13389dbaf227-link">3</a></sup> donc il y a la possibilité de faire quelques choses de sexy &lt;3. Attention à vérifier la compatibilité de certaines bibliothèques .Net et propre au SE Windows</li>
</ul>



<p class="wp-block-paragraph">Comme nous utilisons OLLAMA, je reste sur mon serveur préalablement en production ainsi que les modèles déployés précédemment. <strong>Toutefois, il serait bien de pouvoir prendre en compte les nouveaux modèles qui peuvent être amener à être déployer ou mis à jour de manière dynamique.</strong></p>



<p class="wp-block-paragraph">Pour l&rsquo;instant, il n&rsquo;est pas prévu dans l&rsquo;expression du besoin de mode service donc pas d&rsquo;utilité de développer un mode ou script dans ce sens. Toutefois, en termes de configuration il serait utile d&rsquo;avoir un fichier que l&rsquo;utilisateur puisse modifier ou au mieux l&rsquo;équipe IT<sup data-fn="f8bae3c4-74eb-47b0-94e9-2d33cad80f66" class="fn"><a href="#f8bae3c4-74eb-47b0-94e9-2d33cad80f66" id="f8bae3c4-74eb-47b0-94e9-2d33cad80f66-link">4</a></sup>.</p>



<p class="wp-block-paragraph">L&rsquo;exploitation des résultats se fera visuellement dans la console ou l&rsquo;interface graphique. Nous offrons la possibilité à l&rsquo;utilisateur d&rsquo;exporter, sauvegarder le résultat du prompt qu&rsquo;il a soumis au format TXT<sup data-fn="5ec58cfa-9750-4e3a-9205-5e5fbdd863d7" class="fn"><a href="#5ec58cfa-9750-4e3a-9205-5e5fbdd863d7" id="5ec58cfa-9750-4e3a-9205-5e5fbdd863d7-link">5</a></sup> ou HTML<sup data-fn="2f444740-2a58-488f-a10a-83d9fffafa58" class="fn"><a href="#2f444740-2a58-488f-a10a-83d9fffafa58" id="2f444740-2a58-488f-a10a-83d9fffafa58-link">6</a></sup>. Naturellement, il pourra également envoyer ce même résultat par mail.</p>



<p class="wp-block-paragraph">Concernant l&rsquo;aspect sécurité, l&rsquo;application ne nécessitera pas d&rsquo;élévation de droits d&rsquo;administration quant à son utilisation. Son usage étant uniquement sur le LAN<sup data-fn="2f64e2f2-1730-4ba2-8da5-2a627b5c744b" class="fn"><a href="#2f64e2f2-1730-4ba2-8da5-2a627b5c744b" id="2f64e2f2-1730-4ba2-8da5-2a627b5c744b-link">7</a></sup>, le trafic en HTTP<sup data-fn="71499c60-b75a-4a3f-a972-5253d761b239" class="fn"><a href="#71499c60-b75a-4a3f-a972-5253d761b239" id="71499c60-b75a-4a3f-a972-5253d761b239-link">8</a></sup> sur le port par défaut est toléré. Toutefois, je recommande de communiquer en HTTPS<sup data-fn="146dcb8b-cfff-4609-92a5-e635700c4ad4" class="fn"><a href="#146dcb8b-cfff-4609-92a5-e635700c4ad4" id="146dcb8b-cfff-4609-92a5-e635700c4ad4-link">9</a></sup>. La présence du mode Debug est de la possibilité de rediriger l&rsquo;ensembles des transactions du script dans un fichier permette au-delà du débogage de garder une trace des exécutions.</p>



<p class="wp-block-paragraph">En conclusion, notre liste de course pour notre application :</p>



<ul class="wp-block-list">
<li><strong>Langage de développement &amp; Fonctionnalités</strong>
<ul class="wp-block-list">
<li>.NET Framwork à travers Powershell (v5 ou plus)</li>



<li>Journalisation de l’exécution du code</li>



<li>Export des données en TXT et HTLM</li>



<li>Envoie des données par mail</li>



<li>Fichier de configuration</li>



<li>Mode GUI<sup data-fn="71c87487-013d-4dac-bfaf-17376ab3d3bd" class="fn"><a href="#71c87487-013d-4dac-bfaf-17376ab3d3bd" id="71c87487-013d-4dac-bfaf-17376ab3d3bd-link">10</a></sup> (pour Windows)</li>



<li>Mode CLI (pour Windows et GNU/Linux)</li>
</ul>
</li>



<li><strong>Sécurité</strong>
<ul class="wp-block-list">
<li>Ne nécessite pas d&rsquo;élévation de privilège</li>



<li>Connexion uniquement sur le LAN (HTTP ou HTTPS)</li>



<li>Pas d&rsquo;authentification à l&rsquo;API nécessaire</li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph">Il est temps de passer à la construction et définissions de nos différents niveaux de topographie d’architecture, applicative et logiciel.</p>



<h4 class="wp-block-heading">Topographie &#8211; Infrastructure</h4>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="384" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_004_archilInfra-1024x384.jpg" alt="" class="wp-image-3706" style="width:563px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_004_archilInfra-1024x384.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_004_archilInfra-300x113.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_004_archilInfra-768x288.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_004_archilInfra.jpg 1224w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<h4 class="wp-block-heading">Topographie &#8211; Applicative</h4>



<p class="wp-block-paragraph">Encore une fois, je ne suis toujours pas architecte d&rsquo;application, mais je commence à bien mettre à jours mes restes. C&rsquo;est bien en forgeant que l&rsquo;on devient forgeron 🙂</p>



<p class="wp-block-paragraph">A la racine du répertoire, nous retrouvons les deux fichiers exécutables :</p>



<ul class="wp-block-list">
<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color"><strong>SS_045_1.0.2_Ollama-CLI_Main.ps1</strong>&nbsp;:</mark> Qui est le fichier d’instanciation de la solution est qui permet également de réaliser toutes les actions en mode manuel que ce soit sur les environnements Windows ou Linux.</li>



<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-12-color"><strong>SS_045_1.0.2_Ollama-GUI_Main.ps1</strong>&nbsp;:</mark> Presque le même fichier que le fichier précédent mais dont l&rsquo;usage est uniquement réservé aux environnements Windows de par son interface graphique.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="534" height="619" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_003_archilogiciel.jpg" alt="" class="wp-image-3703" style="width:401px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_003_archilogiciel.jpg 534w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_003_archilogiciel-259x300.jpg 259w" sizes="auto, (max-width: 534px) 100vw, 534px" /></figure>
</div>


<p class="wp-block-paragraph">Si nous regardons en détails les sous répertoires :</p>



<ul class="wp-block-list">
<li><strong>_archives :</strong> Qui est plus ou moins la poubelle du projet dans lequel je garde l&rsquo;historique des scripts et modules ayant évolués</li>



<li><strong>config :</strong> Répertoire contenant le fichier de configuration powershell. Afin de palier à toute suppression malencontreuse du fichier de configuration, j’ai développé une fonction pour regénérer ce dernier. Etant un adepte du&nbsp;<strong>Alt+Maj+Del</strong>, j’ai dû réécrire un certain nombre de fois mon fichier.</li>



<li><strong>export :</strong> Répertoire qui va contenir les résultats au format texte ou html. Par défaut, en mode CLI les données sont automatiques stockées dans ce répertoire. A l&rsquo;inverse le mode GUI offre plus de flexibilité et il est possible de choisir dynamiquement un autre emplacement.</li>



<li><strong>log :</strong> Répertoire qui va contenir la ou les traces d’exécution du code si l’option est activée. Cela à son importance car il permet au petit gars qui à dev l’application dans sa baignoire de corriger les bugs. Le fichier ne prend pas de place et est réinitialiser à chaque lancement.</li>



<li><strong>modules :</strong>&nbsp;Répertoire contenant les modules powershell développé pour l’application. Aujourd’hui au nombre de trois dissociant la partie OLLAMA, System et HTML.</li>



<li><strong>sources :</strong> Répertoire qui contient les éléments et dépendances de l&rsquo;application hors code. Les images, icônes etc.</li>
</ul>



<p class="wp-block-paragraph">Cette arborescence est valable pour la version 1.0.x pour l&rsquo;instant. Cette dernière pourrait être amené à évoluer dans une version mineure ou majeure dans le cas d&rsquo;implémentation de nouvelle fonctionnalité ou de refactorisation, optimisation de code.</p>



<h4 class="wp-block-heading">Topographie &#8211; Logiciel</h4>



<p class="wp-block-paragraph">Avec cette magnifique transition, parlons peu mais parlons bien. Contrairement aux projets précédents, j&rsquo;ai repris par nostalgie une approche par logigramme comme à la bonne vieille époque de mon BTS<sup data-fn="6544f43a-abb8-477d-8279-ce08a55f8860" class="fn"><a href="#6544f43a-abb8-477d-8279-ce08a55f8860" id="6544f43a-abb8-477d-8279-ce08a55f8860-link">11</a></sup> IRIS<sup data-fn="cc650cec-e7d5-4793-b822-62a2b9c2a485" class="fn"><a href="#cc650cec-e7d5-4793-b822-62a2b9c2a485" id="cc650cec-e7d5-4793-b822-62a2b9c2a485-link">12</a></sup>.</p>



<p class="wp-block-paragraph">L&rsquo;approche reste classique dans la phase de développement. Une approche modulaire, unitaire puis la phase d&rsquo;intégration et d&rsquo;ajustement et correction. </p>



<p class="wp-block-paragraph">Naturellement avant de faire de la GUI tout part de la CLI en termes de logique et de fonctionnement.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Le programme est plutôt simple. Ce dernier se décompose en une succession de vérification avant de permettre une interaction de la part de l&rsquo;utilisateur.<br><br>L&rsquo;utilisateur aura si le serveur OLLAMA est joignable la possibilité d&rsquo;exécuter l&rsquo;un des 6 sous-processus suivants :<br><br><strong>*</strong> <strong>Sélectionner un modèle LLM</strong>. Sans exécution de cette option il ne sera pas possible d&rsquo;exécuter de soumettre un prompt à OLLAMA.<br><br><strong>* Sélectionner le type de prompt</strong>. Par défaut, les requêtes qui seront adressé à OLLAMA ne seront que du texte. Pour interagir avec une image ou un document il faudra changer de mode.<br><br><strong>* Settings</strong> permet d&rsquo;afficher le fichier de configuration et de pouvoir modifier ce dernier directement et de sauvegarder les modifications.<br><br><strong>* Debugging</strong>. Permet de vérifier les connexions avec les différents services SMTP, OLLAMA, OpenWebUI.<br><br><strong>* About</strong> affiche le numéro de version ainsi que le crédit de l&rsquo;application<br><br><strong>* Start Ollama</strong> permet de saisir une requête à soumettre à notre serveur OLLAMA. Il faut préalablement avoir choisi un modèle de moteur IA. Sans cela, l&rsquo;option n&rsquo;apparait pas et ne peut être lancé. <sup data-fn="1d0954e7-558e-4563-af7e-dbacfdb7a1ab" class="fn"><a href="#1d0954e7-558e-4563-af7e-dbacfdb7a1ab" id="1d0954e7-558e-4563-af7e-dbacfdb7a1ab-link">13</a></sup>Le programme est plutôt simple. Ce dernier se décompose en une succession de vérification avant de permettre une interaction de la part de l&rsquo;utilisateur.<br><br>L&rsquo;utilisateur aura si le serveur OLLAMA est joignable la possibilité d&rsquo;exécuter l&rsquo;un des 6 sous-processus suivants:<br><br><strong>*</strong> <strong>Sélectionner un modèle LLM</strong>. Sans exécution de cette option il ne sera pas possible d&rsquo;exécuter de soumettre un prompt à OLLAMA.<br><br><strong>* Sélectionner le type de prompt</strong>. Par défaut, les requêtes qui seront adressé à OLLAMA ne seront que du texte. Pour interagir avec une image ou un document il faudra changer de mode.<br><br><strong>* Settings</strong> permet d&rsquo;afficher le fichier de configuration et de pouvoir modifier ce dernier directement et de sauvegarder les modifications.<br><br><strong>* Debugging</strong>. Permet de vérifier les connexions avec les différents services SMTP, OLLAMA, OpenWebUI.<br><br><strong>* About</strong> affiche le numéro de version ainsi que le crédit de l&rsquo;application<br><br><strong>* Start Ollama</strong> permet de saisir une requête à soumettre à notre serveur OLLAMA. Il faut prélablement avoir choisi un modèle de moteur IA. Sans cela, l&rsquo;option n&rsquo;apparait pas et ne peut être lancé.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="1622" class="wp-image-3709" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_005_logigramme_0.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_005_logigramme_0.jpg 494w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_005_logigramme_0-102x300.jpg 102w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_005_logigramme_0-347x1024.jpg 347w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Je propose de voir chacun des logigrammes des 6 sous processus.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3604_e71b4e-6f kt-accordion-has-6-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3604_af006c-da"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>1 &#8211; Select LLM</strong> </span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>La récupération des différents LLMs installé sur notre serveur OLLAMA se fait par le biais d&rsquo;un appel API (d&rsquo;où la vérification en amont de la disponibilité du serveur -_-&lsquo;).<br><br>Une fois les modèles, récupéré, nous les affichons dans une boucle. L&rsquo;utilisateur est obligé de sélectionner un modèle. Il n&rsquo;a pas la possibilité de quitter ce traitement. La condition pour quitter la boucle est de définir une valeur à 100. Condition qui ne peut être atteinte que si un modèle est sélectionné 🙂<br><br>Sinon c&rsquo;est l&rsquo;infinite loop !</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="910" class="wp-image-3713" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_005_logigramme_1.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_005_logigramme_1.jpg 510w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_005_logigramme_1-181x300.jpg 181w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3604_02dc97-5e"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>2 &#8211; Prompt Type</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Par défaut, le mode de prompt est défini sur Standard. Le type de prompt n&rsquo;étant pas cruciale pour soumettre une requête, il n&rsquo;y a pas lieu de forcer l&rsquo;utilisateur à choisir un type comme pour le LLM.<br><br>Si l&rsquo;utilisateur choisi un type de prompt Files ou Pictures, il devra saisir le chemin complet de l&rsquo;élément. <br><br>Si l&rsquo;utilisateur à les doigts palmés alors un message d&rsquo;erreur s&rsquo;affichera et le mode standard sera forcé.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="706" class="wp-image-3715" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_005_logigramme_2.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_005_logigramme_2.jpg 711w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_005_logigramme_2-234x300.jpg 234w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3604_e81d14-18"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>3 &#8211; Settings</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Normalement il n&rsquo;y a pas lieu que notre fichier de configuration soit absent puisqu&rsquo;il a été vérifié et au besoin regénéré. Mais admettons que quelqu&rsquo;un l&rsquo;ait supprimé entre temps ça serait fâcheux (je pense à un AV par exemple ou autre MDR, XDR et j&rsquo;en passe).<br><br>Les éditeurs de texte étant différents entre Linux et Windows, nous ne pouvons pas faire de générique. Il est donc nécessaire de déterminer la nature de l&rsquo;OS et d&rsquo;appeler l&rsquo;éditeur de texte.<br><br>Il y a toutefois quelques spécificités pour l&rsquo;appel de l&rsquo;éditeur de texte sous Linux et je reviendrai sur ce point dans la partie Sécurité.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="704" class="wp-image-3717" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_005_logigramme_3.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_005_logigramme_3.jpg 476w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_005_logigramme_3-234x300.jpg 234w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3604_9fa71c-de"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>4 &#8211; Debugging</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Là pour le coup c&rsquo;est basique de chez basique et je n&rsquo;ai pas voulu expliquer ma fonction de vérification de port (cf module <strong><em>SS_045_1_System_Network.psm1</em></strong>).<br><br>Je vais vérifier à partir des éléments présents dans le fichier de configuration la disponibilité du serveur OLLAMA (11434/tcp<sup data-fn="d3a607ef-c1a7-45bf-bf35-645fbe6adb8e" class="fn"><a href="#d3a607ef-c1a7-45bf-bf35-645fbe6adb8e" id="d3a607ef-c1a7-45bf-bf35-645fbe6adb8e-link">14</a></sup>) et du serveur SMTP (25/tcp). En bonus je vérifie en dur dans le code la disponibilité du serveur OpenWebUI (8080/tcp ou 443/tcp). OpenWebUI est purement optionnel. Son état n&rsquo;a aucun impact sur le script.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="150" height="434" class="wp-image-3718" style="width: 150px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_005_logigramme_4.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_005_logigramme_4.jpg 155w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_005_logigramme_4-104x300.jpg 104w" sizes="auto, (max-width: 150px) 100vw, 150px" /></td></tr></tbody></table></figure>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-5 kt-pane3604_364b81-a3"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>5 &#8211; About Zelen Zajac</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Le plus complexe des logigrammes à comprendre&#8230;<br><br></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="745" class="wp-image-3719" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_005_logigramme_5.jpg" alt=""></td></tr></tbody></table></figure>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-6 kt-pane3604_c2f611-9b"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>6 &#8211; Launch Ollama Request</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Enfin quelque chose de plus intéressant. Attention, le logigramme commence à devenir un peu plus complexe. La présentation en tableau est totalement exclue&#8230; 🙂</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Et en plus le type, ça le fait marrer&#8230; Cinglé va ! Tu dis que ça t&rsquo;amuse en plus de faire ça ? <a href="https://www.youtube.com/watch?v=dTi2l7STZvM&amp;list=RDdTi2l7STZvM&amp;start_radio=1">Pour ceux qui vont des logigrammes par plaisir, la peine de mort !</a></strong></p>



<p class="wp-block-paragraph"></p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="605" height="1024" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_005_logigramme_6-605x1024.jpg" alt="" class="wp-image-3721" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_005_logigramme_6-605x1024.jpg 605w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_005_logigramme_6-177x300.jpg 177w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_005_logigramme_6-768x1300.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_005_logigramme_6.jpg 855w" sizes="auto, (max-width: 605px) 100vw, 605px" /></figure>
</div>


<p class="wp-block-paragraph">Le logigramme se comprend plutôt bien, je ne vais donc pas décrire le début et la fin du script. Ce qui m&rsquo;intéresse ici et que je vais développer dans la partie sécurité est l&rsquo;usage du tache parralèle.</p>



<p class="wp-block-paragraph">Sans rentrer plus en détail que ça, sans utilisation d&rsquo;un ScriptBlock notre script va freezer le temps de l&rsquo;exécution de la requête vers notre serveur OLLAMA. Franchement se taper dans un terminal un « <strong>Not Respond</strong> » c&rsquo;est moche. D&rsquo;où l&rsquo;utilisation d&rsquo;une barre de progression pour indiquer à l&rsquo;utilisateur que le serveur travaille.</p>



<p class="wp-block-paragraph">Second point important, si nous regardons plus en détail la partie dédiée à l&rsquo;envoi de mail si le SE est un Linux, nous affichons un message et nous n&rsquo;envoyons pas de mail. Effectivement et je dirai que c&rsquo;est pour le moment la seule fonctionnalité qui n&rsquo;est pas reprise.</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Donc pas si agnostique que ça ton outil ?</strong></p>



<p class="has-text-align-left wp-block-paragraph">Je pourrais passer par MUTT par exemple. Mais c&rsquo;est se compliquer la vie. Le contrôle et le paramétrage des dépendances externes dans le script serait juste un travail dantesque. Toutefois vous pouvez si vous le souhaitez tester 🙂 (sous réserve, spoiler alerte de me contacter au préalable <strong><em>#bisou</em></strong>)</p>



<p class="has-text-align-left wp-block-paragraph">Tout ce cirque parce que <strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">[System.Net.Mail.MailMessage]</mark></strong> et <strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">[System.Net.Mail.SmtpClient]</mark></strong> sont pour l&rsquo;un déprécié et mal reconnu sous Linux&#8230;</p>
</div></div></div>
</div></div></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Bon pas si compliqué que ça 🙂 J&rsquo;avoue que je suis un peu rouillé en logigramme, mais ça fait du bien par nostalgie de revenir aux bases. Au moins, vous avez ma logique.</p>



<h3 class="wp-block-heading">Sécurité</h3>



<h4 class="wp-block-heading">Authentification</h4>



<p class="wp-block-paragraph">Admettons que nous devons nous authentifier à l&rsquo;application OLLAMA où via Nginx, il va de soi que je ressortirai ma méthode devenu un standard chez moi en passant par le CLIXML.</p>



<p class="wp-block-paragraph">Je garderai naturellement la possibilité de s&rsquo;authentifier manuellement et également la possibilité de s&rsquo;authentifier automatiquement en chiffrant le mot de passe via les algorithmes de chiffrement Windows 🙂 Toutefois reste à savoir si cette fonctionnalité est agnostique. A creuser&#8230;</p>



<h4 class="wp-block-heading">Communication</h4>



<p class="wp-block-paragraph">Dans la version 1.0.x l&rsquo;ensemble des communications entre le client et le serveur sont établies via le protocole http. C&rsquo;est pas ouf hein ?</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="600" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_006_secu_http-0-1024x600.jpg" alt="" class="wp-image-3727" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_006_secu_http-0-1024x600.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_006_secu_http-0-300x176.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_006_secu_http-0-768x450.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_006_secu_http-0.jpg 1494w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Sans surprise, les informations sont en claire dans les trames.</p>



<p class="wp-block-paragraph">Dans les versions à venir en 1.1.x je pense les échanges via le protocole https. Ce qui est plus propre, néanmoins, il est nécessaire de prendre en compte le cas de figure des certificats autosignés et ça c&rsquo;est un poil plus pénible en powershell version 5.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="956" height="783" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_006_secu_https-1.jpg" alt="" class="wp-image-3728" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_006_secu_https-1.jpg 956w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_006_secu_https-1-300x246.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_006_secu_https-1-768x629.jpg 768w" sizes="auto, (max-width: 956px) 100vw, 956px" /></figure>
</div>


<p class="wp-block-paragraph">En reprenant le port 11444/tcp dédié à la publication d&rsquo;OLLAMA via le protocole <strong>https</strong>, il n&rsquo;y alors plus de doute quant aux tests effectués. Reste plus qu&rsquo;à implémenter cela.</p>



<h4 class="wp-block-heading">Parallélisation</h4>



<p class="wp-block-paragraph">Nous parlons beaucoup de sécurité en oubliant d&rsquo;aborder la sécurité du code, la sécurité logicielle. Dans le cas d&rsquo;un programme itératif (étape par étape) la sécurité se résume souvent qu&rsquo;à la gestion des erreurs.</p>



<p class="wp-block-paragraph">Toutefois dans des programmes qui commencent à établir des connexions ou réaliser des tâches en parallèle du déroulement du programme principal, cela fait comme je l&rsquo;ai dit plus haut « tâche » de se taper un « <strong><em>Program Not Respond</em></strong> » ou un truc du genre.</p>



<p class="wp-block-paragraph">Cela va être notre cas. Nous allons soumettre notre requête auprès de notre serveur OLLAMA puis attendre sa réponse. J&rsquo;ai choisi de recevoir l&rsquo;intégralité de la réponse et non pas de recevoir la réponse <strong>json</strong> segmenté, fragmenté.</p>



<p class="wp-block-paragraph">Vous l&rsquo;aurez compris, il va donc être nécessaire de réaliser une tâche parallèle. La grosse difficulté de la manipulation entre la tache mère et fille relève encore et toujours dans la portée des variables. Ce qui peut vite décourager des novices.</p>



<p class="wp-block-paragraph">Pour expliquer et illustrer le principe :</p>



<ul class="wp-block-list">
<li><strong>Création d&rsquo;un ScriptBlock :</strong> Dans notre script nous définissons une variable qui contient des paramètres et un traitement.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="539" height="497" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_007_secu_code-0.jpg" alt="" class="wp-image-3730" style="width:285px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_007_secu_code-0.jpg 539w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_007_secu_code-0-300x277.jpg 300w" sizes="auto, (max-width: 539px) 100vw, 539px" /></figure>
</div>


<ul class="wp-block-list">
<li><strong>Initialisation d&rsquo;un tableau de paramètre :</strong> Nous allons stocker dans une variable les valeurs correspondantes aux paramètres défini précédemment. <a href="https://www.youtube.com/watch?v=iqB18OUzlQU">Le fil rouge sur le bouton rouge, le fil bleu sur le bouton bleu.</a> Sinon vous allez avoir des petites surprises.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="272" height="132" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_007_secu_code-1.jpg" alt="" class="wp-image-3731" style="width:260px;height:auto"/></figure>
</div>


<ul class="wp-block-list">
<li><strong>Appel de la tâche :</strong> Nous récupérons l&rsquo;état de la tache dans une variable en fournissant en paramètre le code ainsi que les paramètres stockés dans les variables précédents. Il suffira ensuite de jouer avec les différents états de la tâche. Et surtout on n&rsquo;oublie pas de faire le ménage ! Bande de salopi**d 🙂</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="503" height="210" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_007_secu_code-3.jpg" alt="" class="wp-image-3732" style="width:374px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_007_secu_code-3.jpg 503w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_007_secu_code-3-300x125.jpg 300w" sizes="auto, (max-width: 503px) 100vw, 503px" /></figure>
</div>


<p class="wp-block-paragraph">Dans le cas du script en interface graphique, la méthode diffère légèrement, mais reste la même. Il faut juste prendre en compte les objets graphiques.</p>



<h3 class="wp-block-heading">Dépendances</h3>



<p class="wp-block-paragraph">J&rsquo;ai voulu m&rsquo;affranchir d&rsquo;un maximum de dépendance et d&rsquo;avoir une application « Vanilla » qui puisse être exécutée depuis n&rsquo;importe quel système sans à avoir à monter une usine à gaz. Donc pas de dépendances, si vous avez besoin d&rsquo;un relai SMTP, il relève alors d&rsquo;une problématique standard à n&rsquo;importe quelles applications à ce jour. </p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Je pense que nous avons fait le tour de l&rsquo;ensemble théorique. Et il est temps de passer à la partie pratique. Il va toutefois être difficile d&rsquo;être cohérent dans le temps car la solution est amenée à évoluer et donc il faudrait que je garde à jour l&rsquo;ensemble du billet. Là est ce que ça sera toujours un loisir ? Eprouverais je toujours du plaisir ?</p>



<p class="has-text-align-center wp-block-paragraph"><strong><em>To Be Continued&#8230; 🙂</em></strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td></td><td class="has-text-align-center" data-align="center"><a href="https://erwanguillemard.com/projet-zelen-zajac-ollama-client-ia">PROJET &#8211; Zelen Zajac</a></td><td class="has-text-align-center" data-align="center"><a href="https://erwanguillemard.com/projet-zelen-zajac-ollama-client-ia-partie-2-pratique">Partie 2 : Pratique<br>-&gt;</a></td></tr></tbody></table></figure>



<h3 class="wp-block-heading">Sources</h3>



<ul class="wp-block-list">
<li><a href="https://ollama.readthedocs.io/en/api/">Ollama : API</a></li>
</ul>


<ol class="wp-block-footnotes"><li id="1f056983-3baa-4362-8664-8127dfca2b9c"><strong>API :</strong> Application Programing Interface  <a href="#1f056983-3baa-4362-8664-8127dfca2b9c-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="dc0df89a-4504-4d2f-a2f8-df3ab0657c38"><strong>SE :</strong> Système d&rsquo;Exploitation <a href="#dc0df89a-4504-4d2f-a2f8-df3ab0657c38-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="770fdefd-6256-44f6-9eac-13389dbaf227"><strong>CLI :</strong> Command Line Interface  <a href="#770fdefd-6256-44f6-9eac-13389dbaf227-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="f8bae3c4-74eb-47b0-94e9-2d33cad80f66"><strong>IT :</strong> Information Technology <a href="#f8bae3c4-74eb-47b0-94e9-2d33cad80f66-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="5ec58cfa-9750-4e3a-9205-5e5fbdd863d7"><strong>TXT :</strong> Texte <a href="#5ec58cfa-9750-4e3a-9205-5e5fbdd863d7-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="2f444740-2a58-488f-a10a-83d9fffafa58"><strong>HTML :</strong> HyperText Markup Language <a href="#2f444740-2a58-488f-a10a-83d9fffafa58-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="2f64e2f2-1730-4ba2-8da5-2a627b5c744b"><strong>LAN :</strong> Local Area Network <a href="#2f64e2f2-1730-4ba2-8da5-2a627b5c744b-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="71499c60-b75a-4a3f-a972-5253d761b239"><strong>HTTP :</strong> HyperText Transfer Protocol <a href="#71499c60-b75a-4a3f-a972-5253d761b239-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="146dcb8b-cfff-4609-92a5-e635700c4ad4"><strong>HTTPS :</strong> Secure HyperText Transfer Protocol  <a href="#146dcb8b-cfff-4609-92a5-e635700c4ad4-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="71c87487-013d-4dac-bfaf-17376ab3d3bd"><strong>GUI :</strong> Graphic User Interface <a href="#71c87487-013d-4dac-bfaf-17376ab3d3bd-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li><li id="6544f43a-abb8-477d-8279-ce08a55f8860"><strong>BTS :</strong> Brevet de Technicien Supérieur <a href="#6544f43a-abb8-477d-8279-ce08a55f8860-link" aria-label="Aller à la note de bas de page 11">↩︎</a></li><li id="cc650cec-e7d5-4793-b822-62a2b9c2a485"><strong>IRIS :</strong> Informatique et Réseaux pour l&rsquo;Industrie et les Services techniques <a href="#cc650cec-e7d5-4793-b822-62a2b9c2a485-link" aria-label="Aller à la note de bas de page 12">↩︎</a></li><li id="1d0954e7-558e-4563-af7e-dbacfdb7a1ab"><strong>LLM :</strong> Large Language Model <a href="#1d0954e7-558e-4563-af7e-dbacfdb7a1ab-link" aria-label="Aller à la note de bas de page 13">↩︎</a></li><li id="d3a607ef-c1a7-45bf-bf35-645fbe6adb8e"><strong>TCP :</strong> Transmission Control Protocol <a href="#d3a607ef-c1a7-45bf-bf35-645fbe6adb8e-link" aria-label="Aller à la note de bas de page 14">↩︎</a></li></ol>


<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PROJET &#8211; Zelen Zajac, Ollama Client IA</title>
		<link>https://erwanguillemard.com/projet-zelen-zajac-ollama-client-ia/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sat, 01 Aug 2026 11:56:45 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Projets]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[IA]]></category>
		<category><![CDATA[OLLAMA]]></category>
		<category><![CDATA[Projet]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3595</guid>

					<description><![CDATA[Ce matin un lapin, a tué un chasseur&#8230; Dans mon cas personnel je devrais plutôt dire, Ce matin un prompt Ollama a tué mon serveur&#8230; Toujours dans la dynamique du sujet d&#8217;étude en cours « l&#8217;IA » et l&#8217;étude de la solution Ollama, je suis victime du fait de sa causalité de l&#8217;ouverture d&#8217;un projet et donc...]]></description>
										<content:encoded><![CDATA[
<p class="has-text-align-center wp-block-paragraph"><em>Ce matin un lapin, a tué un chasseur&#8230;</em></p>



<p class="wp-block-paragraph">Dans mon cas personnel je devrais plutôt dire, Ce matin un prompt Ollama a tué mon serveur&#8230;</p>



<p class="wp-block-paragraph">Toujours dans la dynamique du sujet d&rsquo;étude en cours « l&rsquo;<strong>IA</strong><sup data-fn="3c238b86-0447-4ce9-8d8d-9de00b698ba6" class="fn"><a href="#3c238b86-0447-4ce9-8d8d-9de00b698ba6" id="3c238b86-0447-4ce9-8d8d-9de00b698ba6-link">1</a></sup> » et l&rsquo;étude de la solution Ollama, je suis victime du fait de sa causalité de l&rsquo;ouverture d&rsquo;un projet et donc de cet article.</p>



<p class="wp-block-paragraph">Pour reprendre la conclusion de l&rsquo;article traitant d&rsquo;Ollama et de la solution OpenWebUI, j&rsquo;avais émis l&rsquo;hypothèse de créer mon propre client Ollama en me passant sur l&rsquo;API<sup data-fn="d93bfd9a-2f90-476d-aa8e-1e89b2a1d303" class="fn"><a href="#d93bfd9a-2f90-476d-aa8e-1e89b2a1d303" id="d93bfd9a-2f90-476d-aa8e-1e89b2a1d303-link">2</a></sup> de ce dernier.</p>



<p class="wp-block-paragraph">Du fait de la consommation de ressource importante nécessaire au bon fonctionnement d&rsquo;OpenWebUI et d&rsquo;Ollama, je voyais plutôt d&rsquo;un bon œil de créer son propre client. Soit pour faire simple de se passer de la solution OpenWebUI. L&rsquo;un des arguments complémentaires, l&rsquo;interface CLI d&rsquo;Ollama n&rsquo;est pas hyper user-friendly pour celui qui n&rsquo;a pas l&rsquo;habitude des interfaces CLIs. Ce que je souhaite c&rsquo;est un usage à moyen et grande échelle. Comprendre par là un environnement familial ou pourquoi pas dans une PME ?</p>



<p class="wp-block-paragraph">Avec l&rsquo;ensemble de ces réflexions, je me suis dit </p>



<p class="has-text-align-center wp-block-paragraph"><strong>« Ok je me lance et si ça les tests sont concluants je fais ma petite application&#8230; » </strong></p>



<p class="wp-block-paragraph">C&rsquo;est là que ça dérape. Pris d&rsquo;une <a href="https://www.youtube.com/watch?v=b_IpgKzy75E">creative fever</a> (sans vouloir divulgâcher la suite du billet), le projet <strong>SS_045</strong><sup data-fn="87c4ae21-fecd-403f-8e83-790ff6782e42" class="fn"><a href="#87c4ae21-fecd-403f-8e83-790ff6782e42" id="87c4ae21-fecd-403f-8e83-790ff6782e42-link">3</a></sup> va basculer en <strong>GS_045</strong><sup data-fn="4157211a-1421-4b7f-991f-5b01f3f1e8da" class="fn"><a href="#4157211a-1421-4b7f-991f-5b01f3f1e8da" id="4157211a-1421-4b7f-991f-5b01f3f1e8da-link">4</a></sup> sous son nom de code <strong><em><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-11-color">Zelen Zajac</mark></em></strong> ou en français <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-11-color"><strong><em>Lapin Vert</em></strong>.</mark> Cela viendra donc concrétiser la création d&rsquo;un client multiplateforme CLI<sup data-fn="c8caa45d-16d4-4278-8ccc-77558ca817d5" class="fn"><a href="#c8caa45d-16d4-4278-8ccc-77558ca817d5" id="c8caa45d-16d4-4278-8ccc-77558ca817d5-link">5</a></sup> et GUI<sup data-fn="8443a5bd-9822-4617-8326-496debed06f8" class="fn"><a href="#8443a5bd-9822-4617-8326-496debed06f8" id="8443a5bd-9822-4617-8326-496debed06f8-link">6</a></sup> pour Windows.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_001_logo.png" alt="" class="wp-image-3599" style="width:341px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_001_logo.png 1024w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_001_logo-300x300.png 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_001_logo-150x150.png 150w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_006_001_logo-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Comme quoi, encore une fois d&rsquo;une petite idée va naitre un projet sympathique. Surement inutile, mais sympathique 🙂 Et je suis certain que le fan club de <a href="https://www.youtube.com/watch?v=eD-sqt5rA9g">Chantal Goya</a> sera content <strong>#coeur</strong>.</p>





<h2 class="wp-block-heading">Avant-Propos</h2>



<p class="wp-block-paragraph">Contrairement aux projets précédents <a href="https://erwanguillemard.com/projet-green-ray-veeam-reporting/">Green Ray</a> ou <a href="https://erwanguillemard.com/projet-dream-nebula-vmware-kpi/">Dream Nebula</a> je vais rentrer un peu plus en détail dans la technique et ce pour des raisons simples que j&rsquo;ai appris et renforcé pas mal de compétence en termes de développement.</p>



<p class="wp-block-paragraph">Cet article sera donc orienté plus développement qu&rsquo;infrastructure.</p>



<p class="wp-block-paragraph">Mon code sera disponible sur GitHub contrairement à d&rsquo;autres projets.</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Pourquoi ce choix et ce revirement de position ? </strong></p>



<p class="wp-block-paragraph">Parce que je pense que cela peut être profitable à d&rsquo;autres utilisateurs de la solution Ollama qui veulent se passer d&rsquo;OpenWebUI. 🙂 Et je pense que là c&rsquo;est rester dans le monde de l&rsquo;open-source.</p>



<p class="wp-block-paragraph">Bref, si votre curiosité est toujours suscitée je pense que le reste de l’article devrait vous satisfaire. Dans le cas contraire, je vous laisse exécuter la combinaison&nbsp;<strong>Ctrl+F4</strong> ou <strong>Ctrl+W</strong> pour fermer cet onglet.</p>



<h2 class="wp-block-heading">Prérequis</h2>



<ul class="wp-block-list">
<li><strong>SE :</strong> 
<ul class="wp-block-list">
<li>Windows (Server ou Workstation)</li>



<li>GNU/Linux (RHEL<sup data-fn="9864d609-454b-4668-93e4-84c33fbd3d0e" class="fn"><a href="#9864d609-454b-4668-93e4-84c33fbd3d0e" id="9864d609-454b-4668-93e4-84c33fbd3d0e-link">7</a></sup> ou Debian)</li>
</ul>
</li>



<li><strong>Apps :</strong>
<ul class="wp-block-list">
<li>Ollama</li>
</ul>
</li>



<li><strong>Autres :</strong>
<ul class="wp-block-list">
<li>PowerShell version 5 et supérieur</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">Guide</h2>



<ul class="wp-block-list">
<li><a href="https://erwanguillemard.com/projet-zelen-zajac-ollama-client-ia-partie-1-theorie">Partie 1 : Théorie</a>
<ul class="wp-block-list">
<li>Définir l&rsquo;expression du besoin</li>



<li>Aborder le cahier des charges</li>



<li>Défendre les solutions techniques retenus</li>
</ul>
</li>



<li><a href="https://erwanguillemard.com/projet-zelen-zajac-ollama-client-ia-partie-2-pratique">Partie 2 : Pratique</a>
<ul class="wp-block-list">
<li>Guide de déploiement de la solution</li>



<li>Paramétrage de l&rsquo;application</li>
</ul>
</li>



<li><a href="https://erwanguillemard.com/projet-zelen-zajac-ollama-client-ia-partie-3-demonstration">Partie 3 : Démonstration</a>
<ul class="wp-block-list">
<li>Présentation de la solution dans les différents modes qui ont été développés</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">Ce petit projet a été source de défis pour ne pas écrire challenges et de montée en compétence sur le code. Oui moi qui ne jure que sur le CLI, je me mets à faire du GUI. </p>



<p class="wp-block-paragraph">La plus belle satisfaction reste d&rsquo;avoir fait mon premier code cross-plateform .Net entre les SEs<sup data-fn="8ae87058-3ec7-4203-8667-e45f6b3a5164" class="fn"><a href="#8ae87058-3ec7-4203-8667-e45f6b3a5164" id="8ae87058-3ec7-4203-8667-e45f6b3a5164-link">8</a></sup> Windows et Linux. Le côté agnostique permet donc d&rsquo;avoir une seule version du code ce qui facilite l&rsquo;évolution et le maintien du code, mais surtout d&rsquo;offrir les mêmes services peu importe la nature du système de l&rsquo;utilisateur. Je me sens à ce moment comme un chevalier ayant réussi ça quête… Ou pas car le démoniaque lapin est toujours là est doit être rassasié (amélioré, je voulais dire &lt;3 ) !</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="160" height="90" src="https://erwanguillemard.com/wp-content/uploads/2026/05/PP_006_008_fond.gif" alt="" class="wp-image-3832" style="width:441px;height:auto"/></figure>
</div>


<p class="wp-block-paragraph">Si je me réfère à l&rsquo;actualité au moment de la rédaction de ce billet, la volonté du gouvernement français de se libérer des technologies américaines sur les outils informatiques aux détriments de solutions françaises et open source viennent alimenter d&rsquo;eau mon moulin.</p>



<p class="wp-block-paragraph">Au-delà de ces derniers points, j&rsquo;ai trouvé intéressant de manipuler l&rsquo;API OLLAMA dans le cadre d&rsquo;un réseau local afin d&rsquo;offrir une solution viable et fiable dans une PME.</p>



<p class="wp-block-paragraph">Mon application reste certes à évoluer pour être réellement concurrentiel aux solutions actuellement sur le marché. Toutefois est-ce là mon objectif ? Je ne crois pas, du moins je n&rsquo;ai pas cette prétention.</p>



<p class="wp-block-paragraph">Ce qui me rassurer néanmoins, ce que j&rsquo;ai pu faire nativement peut donc être implémenté comme plugin d&rsquo;une application, voir encore être utilisé comme une passerelle applicative entre deux applications. Par exemple, j&rsquo;ai la volonté de reprendre mon projet de passerelle applicative entre VEEAMOne et ITOP pour générer des tickets sur le déclenchement d&rsquo;une alarme d&rsquo;exploitation géré par l&rsquo;IA. Ca, c&rsquo;est bandant comme projet et serait super faire un pas de plus vers l&rsquo;efficience !</p>



<p class="wp-block-paragraph">L&rsquo;IA que je voyais comme une menace est ennemie au final selon l&rsquo;usage que nous voulons en faire devient un outil puissant. Certes, j&rsquo;ai mis du temps à être convaincu par la chose mais il n&rsquo;est jamais trop tard. Le plus important pour moi est de rester supérieur à l&rsquo;IA dans l&rsquo;usage que je vais en faire. </p>



<p class="wp-block-paragraph">Le mot de la fin :</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>C&rsquo;est l&rsquo;histoire d&rsquo;un Lama qui rencontre un Lapin, vous buvez un verre ? Puis un homme rentre dans un bar. Stop appelez Brigitte BARDOT ! J&rsquo;ai mon API qui me dérange ! <a href="https://www.youtube.com/watch?v=OLX5d9l6N4Y">Je je suis agnostique, je suis un lapin</a></em> !</p>
<cite>Erwan GUILLEMARD</cite></blockquote>



<h2 class="wp-block-heading">Sources</h2>



<ul class="wp-block-list">
<li><a href="https://learn.microsoft.com/fr-fr/powershell/scripting/install/install-powershell-on-linux?view=powershell-7.6&amp;viewFallbackFrom=powershell-7.1">Windows : Installer Powershell pour Linux</a></li>



<li>Article : OpenWebui</li>



<li>Article : Ollama</li>
</ul>


<ol class="wp-block-footnotes"><li id="3c238b86-0447-4ce9-8d8d-9de00b698ba6"><strong>IA :</strong> Intelligence Artificielle <a href="#3c238b86-0447-4ce9-8d8d-9de00b698ba6-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="d93bfd9a-2f90-476d-aa8e-1e89b2a1d303"><strong>API :</strong> Application Programing Interface <a href="#d93bfd9a-2f90-476d-aa8e-1e89b2a1d303-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="87c4ae21-fecd-403f-8e83-790ff6782e42"><strong>SS_045 :</strong> SystemScript #45 <a href="#87c4ae21-fecd-403f-8e83-790ff6782e42-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="4157211a-1421-4b7f-991f-5b01f3f1e8da"><strong>GS_045 :</strong> GraphicalScript #45 <a href="#4157211a-1421-4b7f-991f-5b01f3f1e8da-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="c8caa45d-16d4-4278-8ccc-77558ca817d5"><strong>CLI :</strong> Client Lign Interface <a href="#c8caa45d-16d4-4278-8ccc-77558ca817d5-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="8443a5bd-9822-4617-8326-496debed06f8"><strong>GUI :</strong> Graphical User Interface <a href="#8443a5bd-9822-4617-8326-496debed06f8-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="9864d609-454b-4668-93e4-84c33fbd3d0e"><strong>RHEL :</strong> RedHat Entreprise Linux <a href="#9864d609-454b-4668-93e4-84c33fbd3d0e-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="8ae87058-3ec7-4203-8667-e45f6b3a5164"><strong>SE :</strong> Système d&rsquo;Exploitation <a href="#8ae87058-3ec7-4203-8667-e45f6b3a5164-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li></ol>


<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
