<?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>iTop &#8211; erwan.guillemard</title>
	<atom:link href="https://erwanguillemard.com/tag/itop/feed/" rel="self" type="application/rss+xml" />
	<link>https://erwanguillemard.com</link>
	<description></description>
	<lastBuildDate>Wed, 05 Feb 2025 20:20:28 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8</generator>

<image>
	<url>https://erwanguillemard.com/wp-content/uploads/2024/02/cropped-Logo-sans-baseline-32x32.png</url>
	<title>iTop &#8211; erwan.guillemard</title>
	<link>https://erwanguillemard.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Projet &#8211; Passerelle VEEAMOne/ITOP</title>
		<link>https://erwanguillemard.com/projet-passerelle-veeamone-itop/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Tue, 12 Nov 2024 22:23:33 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Projets]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[iTop]]></category>
		<category><![CDATA[Projet]]></category>
		<category><![CDATA[VEEAMONE]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=2428</guid>

					<description><![CDATA[Bien, ça fait un petit moment que j&#8217;avais ça en réserve et que je me devais de vous présenter ce petit projet. Cela m&#8217;a demandé du temps. Pourquoi vous demandez vous ? Excellente question à toi qui vient d&#8217;aborder la lecture de ce billet. La réponse est simple et s&#8217;articule en deux points. Laissez-moi donc...]]></description>
										<content:encoded><![CDATA[
<p>Bien, ça fait un petit moment que j&rsquo;avais ça en réserve et que je me devais de vous présenter ce petit projet. Cela m&rsquo;a demandé du temps. Pourquoi vous demandez vous ?</p>



<p>Excellente question à toi qui vient d&rsquo;aborder la lecture de ce billet. La réponse est simple et s&rsquo;articule en deux points. Laissez-moi donc les énumérer :</p>



<ul class="wp-block-list">
<li>J&rsquo;attendais impatiemment la sortie communautaire LTS<sup data-fn="f191d455-4717-4aaf-8ff4-82c9265b904b" class="fn"><a href="#f191d455-4717-4aaf-8ff4-82c9265b904b" id="f191d455-4717-4aaf-8ff4-82c9265b904b-link">1</a></sup> ITOP 3.2.X en lieu et place de la version 2.7.X (entre nous ITOP c&rsquo;est fait une sacrée beauté &lt;3)</li>



<li>J&rsquo;avais une flemme monstrueuse de remonter un ITOP from scratch, sur un environnement durci et configurer ce dernier pour « mon organisation »</li>
</ul>



<p>Bref, malgré un emploi du temps le jour bien remplie. Me voilà repris d&rsquo;insomnie et de doutes qu&rsquo;il faut ma foi bien occuper.</p>



<p class="has-text-align-center"><strong><em>Sinon, tu te la joues BOOMER qui raconte sa LIFE sur Facebook ? Tu vas nous parler de ton projet et de tes travaux ?</em></strong> <strong><em><a href="https://www.youtube.com/watch?v=hPpdJEMRGwE&amp;ab_channel=FranceInter">#RIENAFOUTRE</a></em></strong></p>



<p>Promis, j&rsquo;arrête pour au moins deux paragraphes&#8230; Je suis parti d&rsquo;une problématique professionnelle (qui n&rsquo;intéresse malheureusement que moi et non certains de mes pairs&#8230;), comment s&rsquo;assurer des états de notre outils de supervision (monitoring) et du bon traitement des alarmes avertissements ou erreurs remontées sur notre SI<sup data-fn="d7c86f1e-4938-4f27-a623-2239f16a69e6" class="fn"><a href="#d7c86f1e-4938-4f27-a623-2239f16a69e6" id="d7c86f1e-4938-4f27-a623-2239f16a69e6-link">2</a></sup> ?</p>



<p>Une première approche est de prendre un ETP<sup data-fn="f1d99d7a-2755-48a1-8e82-84bc9b93e4c0" class="fn"><a href="#f1d99d7a-2755-48a1-8e82-84bc9b93e4c0" id="f1d99d7a-2755-48a1-8e82-84bc9b93e4c0-link">3</a></sup> compétent et qui ne coute pas trop à la société, de le scotcher à une chaise devant la solution de monitoring et de l&rsquo;autoriser à dormir que lorsque tout est au vert fixe !</p>



<p>Cette première méthode est loin de plaire à nos amis syndicalistes, partisans du code du travail et certains RH.</p>



<p>Il y a donc une seconde approche, celle où les éditeurs de solution de surveillance des SIs partent du postulat que les alertes sont envoyées par courriel (hé oui je n&rsquo;ai pas écrit e-mail). Mais là encore, c&rsquo;est compliqué de ne pas se noyer dans la volumétrie des mails et de ne pas passer à côté d&rsquo;un événement important. Point positif, nous pouvons mettre plusieurs personnes/collaborateurs derrière une BAL<sup data-fn="0aa1a249-3ecf-41de-9099-f521c19d40af" class="fn"><a href="#0aa1a249-3ecf-41de-9099-f521c19d40af" id="0aa1a249-3ecf-41de-9099-f521c19d40af-link">4</a></sup>. Quoi que cela demande de la communication (et la communication dans une entreprise n&rsquo;est pas une compétence acquise de tous. Un peu comme la politesse&#8230;).</p>



<p>Et enfin, il y a la troisième approche. Qui arrive timidement par certains éditeurs de solution de supervision qui propose d&rsquo;interfacer leurs plateformes avec une solution de ticketing (souvent ITSM<sup data-fn="1fd80a16-6c1d-4153-90e3-0ecc9f956387" class="fn"><a href="#1fd80a16-6c1d-4153-90e3-0ecc9f956387" id="1fd80a16-6c1d-4153-90e3-0ecc9f956387-link">5</a></sup>). Là autant vous dire que je fais un gros cœur avec les mains devant mon écran. C&rsquo;est ainsi que dans un article précédent traitant de VEEAMOne (je n&rsquo;ai toujours pas d&rsquo;action qu&rsquo;on se le dise), VEEAMOne propose une connexion à la solution de ticketing ServiceNow. Franchement c&rsquo;est super, il n&rsquo;y a rien à faire sauf sortir le chéquier, changer de solution de ticketing si nous en avions déjà un, lancer des projets de migration&#8230; Bref ça me pose un problème car ce n&rsquo;est pas l&rsquo;outil que j&rsquo;utilise pour la gestion de mes tickets.</p>



<p>Là, encore une fois nous avons deux possibilités :</p>



<ul class="wp-block-list">
<li>Notre solution ITSM peut créer des tickets sur réception de notification mail. Soit de manière plus concrète avec un peu de paramétrage, nous allons faire créer une requête lors de la réception d&rsquo;un email d&rsquo;alerte ou d&rsquo;avertissement. (Perso, je ne suis pas fan de cette méthode).</li>



<li>Nous utilisons les APIs des deux solutions et nous développons une petite passerelle 🙂 (Perso j&rsquo;aime d&rsquo;avantage).</li>
</ul>



<p>Toutefois et comme c&rsquo;est la solution que je vais présenter il est important de comprendre avant d&rsquo;aller plus loin qu&rsquo;il y a des avantages et beaucoup de contraintes à développer une passerelle (entre nous, nous l&rsquo;appellerons GW<sup data-fn="25af4c42-afb9-44b3-9039-e222037b293e" class="fn"><a href="#25af4c42-afb9-44b3-9039-e222037b293e" id="25af4c42-afb9-44b3-9039-e222037b293e-link">6</a></sup> parce que c&rsquo;est un mot qui me soule à écrire. Hé oui au ch***e la loi Toubon ! Mais que de grossièreté !).</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>Avantages</strong></td><td class="has-text-align-center" data-align="center"><strong>Inconvénients</strong></td></tr><tr><td class="has-text-align-center" data-align="center">Langages libres<br>Découvertes techniques<br>Satisfaire l&rsquo;appétence techniques</td><td class="has-text-align-center" data-align="center">Avoir une documentation sur les deux APIs<br>MCO du code lors des montées de version<br>Bien penser son code<br>Penser générique</td></tr></tbody></table></figure>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img fetchpriority="high" decoding="async" width="513" height="144" src="https://erwanguillemard.com/wp-content/uploads/2024/10/AP_010_002_GW.png" alt="" class="wp-image-2431" srcset="https://erwanguillemard.com/wp-content/uploads/2024/10/AP_010_002_GW.png 513w, https://erwanguillemard.com/wp-content/uploads/2024/10/AP_010_002_GW-300x84.png 300w" sizes="(max-width: 513px) 100vw, 513px" /></figure></div>


<p class="has-text-align-center has-small-font-size"><em>Nous remarquerons l&rsquo;acquisition des compétences et maitrise de l&rsquo;application PAINT. Oui, j&rsquo;ai un doctorat en PAINT appliqué !</em></p>





<h2 class="wp-block-heading">Prérequis</h2>



<ul class="wp-block-list">
<li><strong>SE :</strong>&nbsp;Windows Server 2k19 et version ultérieures</li>



<li><strong>Apps :&nbsp;</strong>VEEAMOne 12.x, ITOP 3.2.X</li>



<li><strong>Autres :</strong>
<ul class="wp-block-list">
<li>PowerShell version 5 et ultérieures</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">Avant-Propos</h2>



<p>Comme d&rsquo;habitude, je vais proposer ci-dessous un usage sécuriser de l&rsquo;outil. Je n&rsquo;ai pas la prétention toutefois de garantir un haut niveau de sécurité dans le code (ça fait longtemps et je suis un peu rouillé dans ce domaine).</p>



<p>J&rsquo;annonce en amont que le code source ne sera pas accessible sur le GitHub en libre accès. <strong>Ah ouai et pourquoi donc ?</strong></p>



<p>Je suis plutôt content de ce que j&rsquo;ai créé. Toutefois, je ne suis pas satisfait de la qualité du code et de certaines méthodes que j&rsquo;ai pu développer. Je pense qu&rsquo;un grand pas a été fait mais que cette aventure nécessite d&rsquo;être porté par et avec d&rsquo;autres personnes et ceux afin de proposer ce projet comme quelques choses d&rsquo;abouti et de communautaire. Mais voyez vous, je ne suis plus dev et je rentre sur un terrain et domaine ou le jugement est facile, faire un peu moins.</p>



<p>C&rsquo;est pourquoi, si vous êtes intéressé par ce projet, je suis à votre disposition pour échanger et collaborer sur ça factorisation et évolution.</p>



<p>Je vous rassure toutefois, je vais aller assez loin dans mes choix et dans la logique dont j&rsquo;ai construit cette GW. Sinon à quoi bon faire un article sur le sujet si ce n&rsquo;est que pour satisfaire une petit plaisir solitaire issue du fruit d&rsquo;une masturbation intellectuelle ?</p>



<h2 class="wp-block-heading">Théorie</h2>



<p>Je tiens à garder un format à peu près standard pour chacun de mes articles. Dans ce cas précis, nous considérons cette partie plus comme un cahier des charges et expressions des besoins. Naturellement, nous apporterons des réponses et solutions ce qui n&rsquo;est donc pas tout à fait juste un cahier des charges.</p>



<p>(Mais qu&rsquo;est-ce qu&rsquo;il peut être torturé ce garçon&#8230; Oui mais non ce n&rsquo;est pas ça, mais ça tout de même. Quelqu&rsquo;un veut-il prendre l&rsquo;initiative de lui mettre un coup de pelle derrière les oreilles pour qu&rsquo;il aille à l&rsquo;essentiel ?)</p>



<h3 class="wp-block-heading">Expression du besoin</h3>



<p>Bien, nous avons tous à ce jour des infrastructures virtualisées en local (onpremise) ou dans le cloud (privé ou public). En tant que fournisseur de service (Service Provider), je suis contraint de réaliser l&rsquo;exploitation de l&rsquo;ensemble de mon infrastructure hébergé chaque jour pour l&rsquo;ensemble de nos clients. Toutefois, mon périmètre est restreint aux services et infrastructures permettant d&rsquo;assurer le bon fonctionnement des environnements constituant notre infrastructure.</p>



<p>Comment s&rsquo;assurer que les serveurs clients ont bien leurs MCO<sup data-fn="f29fcc2d-94f5-4c52-9877-bad186eaca9c" class="fn"><a href="#f29fcc2d-94f5-4c52-9877-bad186eaca9c" id="f29fcc2d-94f5-4c52-9877-bad186eaca9c-link">7</a></sup> d&rsquo;effectuer par les équipes opérationnelles ? Comment s&rsquo;assurer que le responsable informatique effectue bien son MCO ?</p>



<p>Il est facile et malheureusement (je l&rsquo;ai constaté) il est facile de cacher des dysfonctionnements d&rsquo;exploitations aux yeux de l&rsquo;entreprise et de ces dirigeants. Un peu comme il est facile de cacher des cadavres dans les placards quand il n&rsquo;y a plus de place sous le tapis.</p>



<p>Possédant une solution ITSM/CMDB<sup data-fn="54fccf78-98cb-4623-8360-19b237ba2ba9" class="fn"><a href="#54fccf78-98cb-4623-8360-19b237ba2ba9" id="54fccf78-98cb-4623-8360-19b237ba2ba9-link">8</a></sup>, j&rsquo;ai nommé ITOP (là non plus je n&rsquo;ai pas d&rsquo;action), pourquoi ne pas faire remonter les éléments de notre supervision VEEAMOne dans ce dernier.</p>



<p>Cela permettrait de s&rsquo;assurer d&rsquo;être pro actif lors d&rsquo;un potentiel dysfonctionnement d&rsquo;exploitation (espace disque, consommation élevée de CPU, RAM etc.) et dans les cas les plus complexe de garder une trace du traitement et donc nourrir la base de connaissance de notre service IT ?</p>



<p>Il sera donc utile de définir un cycle de vie.</p>



<h3 class="wp-block-heading">Cahier des Charges</h3>



<p>Afin de répondre aux besoins, je prends le parti de ne pas développer de module directement côté ITOP, ni côté VEEAMOne.</p>



<p>Pourquoi ? ITOP n&rsquo;est pas pour moi une solution que je maitrise à 100% et cela demande des compétences WEB (HTML/CSS/PHP/JS et autres frameworks) que je ne possède pas. Côté VEEAMOne l&rsquo;application n&rsquo;est pas « ouverte ». Toutefois la solution que je souhaite proposer tend à une intégration côté VEEAMOne. Finalement, une fois que le code a été pondu une fois, il suffit de le traduire et l&rsquo;adapter dans un autre langage.</p>



<p>J&rsquo;ai choisi d&rsquo;utiliser en langage le framework .NET Powershell (version 5 et plus) afin d&rsquo;exécuter les opérations sur un un environnement Windows.</p>



<p>Le script sera utilisé sur un serveur Windows indépendant des deux solutions applicatives.</p>



<p>Dans un premier temps, le script sera utilisé de manière quotidienne une seule fois à 09h00. Aucun module d&rsquo;exception sera implémenté car rien ne justifie de ne pas faire remonter les alertes. Lors de la présence d&rsquo;une alerte dans la console de supervision, une alerte sera créée singulièrement avec pour contenu la dite alarme au format HTML 5.</p>



<p>Le demandeur du ticket sera un utilisateur identifié comme une service bot. Le ticket sera affecté au service IT compétent et identifié.</p>



<h4 class="wp-block-heading">Topographie &#8211; Infrastructure</h4>



<p>L&rsquo;infrastructure réseau est plutôt simple. Il suffira de prendre les ports par défaut si ces derniers n&rsquo;ont pas été modifiés (1239 pour accéder l&rsquo;API WEB de VEEAMOne et 443 pour accéder à l&rsquo;API d&rsquo;ITOP). Dans le cas contraire, il faudra chercher un dans les paramètres pour trouver l&rsquo;information.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" width="865" height="180" src="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_003_Topographie_network.png" alt="" class="wp-image-2441" style="width:485px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_003_Topographie_network.png 865w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_003_Topographie_network-300x62.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_003_Topographie_network-768x160.png 768w" sizes="(max-width: 865px) 100vw, 865px" /></figure></div>


<p>Dans l&rsquo;idée, je souhaite tirer les informations et données du serveur VEEAMOne via le Serveur Tools et pousser les données vers le Serveur ITOP.</p>



<h4 class="wp-block-heading">Topographie &#8211; Applicative</h4>



<p>La logique de traitement a été identifié et pensé de la manière suivante (dans un premier temps car je pense perfectible la chose).</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" width="886" height="283" src="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_004_Topographie_applicative.png" alt="" class="wp-image-2443" style="width:560px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_004_Topographie_applicative.png 886w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_004_Topographie_applicative-300x96.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_004_Topographie_applicative-768x245.png 768w" sizes="(max-width: 886px) 100vw, 886px" /></figure></div>


<p>Nous admirons le schéma pour apprendre à compter jusqu&rsquo;à 9 !</p>



<ul class="wp-block-list">
<li><strong>1</strong> : Appel API pour l&rsquo;ouverture de session de manière sécurisé et demande de récupération des données à collecter</li>



<li><strong>2</strong> : Autorisation de connexion et retour des données collectées ou non si absente</li>



<li><strong>3</strong> : Traitement des données brutes récupérées de VEEAMOne afin de faciliter la création des requêtes ITOP</li>



<li><strong>4</strong> : Appel API pour l&rsquo;ouverture de session de manière <mark style="background-color:rgba(0, 0, 0, 0);color:#fd0000" class="has-inline-color">NON sécurisé</mark><mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color">e</mark> (pour l&rsquo;instant) et demande de récupération des données nécessaires à la qualification des données à traiter</li>



<li><strong>5</strong> : Autorisation de connexion et retour des données demandées</li>



<li><strong>6</strong> : Création d&rsquo;une requête via API avec les informations traitées/extraites de VEEAMOne et les informations ITOP.</li>



<li><strong>7</strong> : Retour de la requête API, si cette dernière retourne un code différent de 0 il faudra se <a href="https://www.youtube.com/watch?v=XDVZoMlxzJA&amp;ab_channel=IsabelleAdjaniVEVO">plonger</a> dans la documentation et dans le MCD<sup data-fn="8cde5590-e181-4d7a-b4a4-ace5fddd45c0" class="fn"><a href="#8cde5590-e181-4d7a-b4a4-ace5fddd45c0" id="8cde5590-e181-4d7a-b4a4-ace5fddd45c0-link">9</a></sup> d&rsquo;ITOP.</li>



<li><strong>8</strong> : Appel d&rsquo;un stimulus par appel API pour assigner la requête à une équipe et respecter le cycle de vie ITOP.</li>



<li><strong>9</strong> : Comme pour l&rsquo;étape 7 il conviendra d&rsquo;être vigilant à l&rsquo;erreur retournée. Sans quoi, vous retourner avec ADJANI en case piscine.</li>
</ul>



<h4 class="wp-block-heading">Topographie &#8211; Logiciel</h4>



<p>Le script sera pensé de la manière suivante. Une partie exécutable permettant de réaliser l&rsquo;appel des différentes fonctions et l&rsquo;import des modules comportant les fonctions statiques.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="918" height="337" src="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_005_Topographie_logicielle.png" alt="" class="wp-image-2446" style="width:607px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_005_Topographie_logicielle.png 918w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_005_Topographie_logicielle-300x110.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_005_Topographie_logicielle-768x282.png 768w" sizes="auto, (max-width: 918px) 100vw, 918px" /></figure></div>


<p>En résumer, nous avons un fichier .ps1 qui va servir d&rsquo;exécutable et trois fichiers module powershell qui nous permettrons de réaliser distinctement les actions pour chacune des applications VEEAMOne et ITOP.</p>



<p><strong>Tain le mec nous dit plus haut avec un air supérieur qu&rsquo;il va nous apprendre à compter jusqu&rsquo;à 9 et là il nous dit 3 fichiers pour 2 applications. Tu nous prendrais pas par hasard pour des raclures de bidets ?</strong></p>



<p>C&rsquo;est juste et c&rsquo;est bien l&rsquo;effet souhaité. Je me suis aperçu avec le temps que la génération de rapport en HTML pesait lourd dans les fonctions ou dans les modules et qu&rsquo;il ne serait pas déconnant de dédier un module à la partie HTML. De plus un rapport nous pouvons considérer celui-ci comme immuable dans le temps. Donc il peut être qualifié comme module. 🙂 <a href="https://www.youtube.com/watch?v=u8ccGjar4Es&amp;ab_channel=Psychostick">Soit en conclusion 2+1 = 3. Mais n&rsquo;allons pas plus loin.</a></p>



<p>Et si nous regardions ce qu&rsquo;il y a dans le ventre des 3 modules ? Oui mais gros malin, tu nous as dit que tu ne voulais pas partager ton code. Tu vas faire comment ? Hé bien dirons nous que cela revient à regarder un porno sur CANAL+ sans abonnement (époque que certains lecteurs ne connaitront jamais). On devine, mais personne n&rsquo;en profite vraiment (où alors vous êtes des grands malades !).</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id2428_1711b0-ca 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-pane2428_c24b5a-2e"><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">SS_039_1_COMBODO_itop_api.psm1</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>Le module est constitué de 6 fonctions. Nous noterons le camouflage de deux informations capitales (d&rsquo;où le NON sécurisée plus haut). Il faudrait avec un peu d&rsquo;huile de coude que je modifie le code pour que ce dernier gère l&rsquo;authentification via la fonctionnalité CLIXML. Promis je travaille dessus.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="789" height="353" src="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_006_Module_ITOP.png" alt="" class="wp-image-2448" style="width:668px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_006_Module_ITOP.png 789w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_006_Module_ITOP-300x134.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_006_Module_ITOP-768x344.png 768w" sizes="auto, (max-width: 789px) 100vw, 789px" /></figure></div>


<p>Il existe deux versions de ce module. Une version compatible ITOP 2.7.X LTS et une version ITOP 3.2.X LTS. La fonction API propre à la création d&rsquo;une requête diffère entre ces deux versions.</p>



<ul class="wp-block-list">
<li><strong>formatItopNumberCustomer</strong> : Fonction qui permet de récupérer le nom et le numéro identifiant le client dans le cas où le format est du type XX-CUSTOMER. Cette fonction est plus orientée dans le cas de Service Provider. Mais qui peut le plus peu le moins c&rsquo;est pourquoi la fonction est présente par défaut</li>



<li><strong>Invoke-RestiTopMethod</strong> : Fonction qui permet de réaliser l&rsquo;appel API</li>



<li><strong>Get-REST_API_iTop</strong> : Fonction qui permet de réaliser des requêtes de type CORE/GET à notre instances ITOP</li>



<li><strong>Get-Organization</strong> : Permet de récupérer la liste des organisations présentes dans ITOP et ceux pour pouvoir créer les requêtes dans la bonne organisation</li>



<li><strong>CreateRequest-REST_API_ITOP</strong> : Fonction qui permet de réaliser des requêtes de type CORE/CREATE à notre instances ITOP pour créer une requête</li>



<li><strong>ApplyStimulus-REST_API_ITOP</strong> : Fonction qui permet de réaliser des requêtes de type CORE/APPLY_STIMULUS à notre instances ITOP pour assigner un état à notre requête créé précédemment</li>
</ul>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane2428_992d3f-fc"><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">SS_039_1_HTML_report.psm1</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>Le module est constitué de 2 fonctions.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="348" height="139" src="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_006_Module_HTML.png" alt="" class="wp-image-2450" srcset="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_006_Module_HTML.png 348w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_006_Module_HTML-300x120.png 300w" sizes="auto, (max-width: 348px) 100vw, 348px" /></figure></div>


<ul class="wp-block-list">
<li><strong>Set-ITOP_HTML-VEEAMONEREPORT</strong> : Fonction qui prend un certain nombre d&rsquo;argument en paramètre afin d&rsquo;établir le rapport HTML qui sera poussé dans le corps de notre requête ITOP</li>



<li><strong>Set-ITOP_HTML-ErrorReport</strong> : Fonction qui prend un certain nombre d&rsquo;argument en paramètre afin d&rsquo;établir le rapport HTML d&rsquo;erreur qui sera poussé dans le corps de notre requête ITOP dans le cas où la fonction initiale n&rsquo;a pas pu aboutir</li>
</ul>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane2428_eb27a0-ed"><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">SS_039_1_VEEAM_One_api.psm1</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>Nous retrouvons sensiblement les mêmes fonctions que dans le module dédié à ITOP. Bien qu&rsquo;à l&rsquo;inverse, je n&rsquo;ai pas été fainéant car la gestion de l&rsquo;authentification est sécurisée pour VEEAMOne&#8230;</p>



<p>Passons, le module est composé de 9 fonctions.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="576" height="408" src="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_006_Module_VEEAMOne.png" alt="" class="wp-image-2451" srcset="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_006_Module_VEEAMOne.png 576w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_006_Module_VEEAMOne-300x213.png 300w" sizes="auto, (max-width: 576px) 100vw, 576px" /></figure></div>


<ul class="wp-block-list">
<li><strong>Invoke-RestVEEAMOneMethod</strong> : Fonction qui permet de réaliser l&rsquo;appel API</li>



<li><strong>Connect-VEEAMOneAPI</strong> : Fonction qui permet d&rsquo;établir la connexion au webservice VEEAMOne</li>



<li><strong>Disconnection-VEEAMOneAPI</strong> : Fonction qui permet de cloturer la connexion au webservice VEEAMOne</li>



<li><strong>Get-ServerInformations</strong> : Fonction qui permet de retourner les informations du serveur VEEAMOne</li>



<li><strong>Get-Sessions</strong> : Fonction qui permet de retourner l&rsquo;ID de la session en cours</li>



<li><strong>Get-AllAlarms</strong> : Fonction qui permet de retourner toutes les alarmes en cours sur l&rsquo;application VEEAMOne à tous les niveaux Infrastructures à Backup de l&rsquo;hôte jusqu&rsquo;au VMs</li>



<li><strong>Get-License</strong> : Fonction qui permet de retourner les informations relatives aux licences</li>



<li><strong>VEEAMONE_Extract_Informations</strong> : Fonction qui permet de traiter les informations retournées précédemment et de consolider ces dernières</li>



<li><strong>Get-VEEAMONE_GlobalDataObject</strong> : Fonction qui appel la fonction précédente pour consolider le retour dans un seul objet</li>
</ul>
</div></div></div>
</div></div></div>



<h4 class="wp-block-heading">Sécurité</h4>



<p>La partie sécurité est un vrai enjeu. Je n&rsquo;ai malheureusement pas implémenté dans cette version à ce moment (version 1.3) la redirection des sorties dans un fichier de log. J&rsquo;ai gardé le mode debug, mais cela ne sera viable sur le long terme pour assurer un support adéquat.</p>



<p>Il en va de soi que nous avons besoin de 3 comptes en nous basant sur le principe de RBAC<sup data-fn="0290669f-efb9-4ab6-a7b3-b4f7eff01b1c" class="fn"><a href="#0290669f-efb9-4ab6-a7b3-b4f7eff01b1c" id="0290669f-efb9-4ab6-a7b3-b4f7eff01b1c-link">10</a></sup>.</p>



<ul class="wp-block-list">
<li><strong>VEEAMOne</strong> : Un compte permettant d&rsquo;accéder à l&rsquo;application en API en pouvant réaliser des requêtes. Donc membre du <strong><em>GLS VEEAM ONE Administrator</em></strong> par chance, le serveur étant joint au domaine, il suffira de peupler le bon GGS. Néanmoins, ce compte doit être vu comme un compte de service. Donc à restreindre dans les règles de l&rsquo;art pour empêcher toutes ouvertures de sessions</li>



<li><strong>ITOP</strong> : Le compte doit être protégé par un mot de passe robuste. Ce dernier doit avoir obligatoirement les profils <strong>Administrator</strong> et <strong>REST Services User</strong>. Ce compte devant accéder à l&rsquo;ensemble des données cela justifie le profil Administrator.</li>



<li><strong>Compte de Service</strong> : Il va être nécessaire d&rsquo;utiliser un compte de service pour exécuter notre tâche. Je préfère dans un premier temps passer par un compte utilisateur du domaine restreint plutôt que par un gMSA<sup data-fn="80135d95-15b4-4cd0-a0ec-c8ffde965f4b" class="fn"><a href="#80135d95-15b4-4cd0-a0ec-c8ffde965f4b" id="80135d95-15b4-4cd0-a0ec-c8ffde965f4b-link">11</a></sup></li>
</ul>



<p>Il faut également se poser la question du répertoire où va être stocké et appelé les scripts. Je ne préfère pas stocker ce dernier sur un partage réseau mais en local sur la partition système. Toutefois, je retire l&rsquo;accès du groupe utilisateur et ajoute la lecture et exécution uniquement sur le GLS des comptes de services restreints.</p>



<p>Il en sera de même pour le répertoire <strong>_auth</strong> qui va contenir l&rsquo;ensemble des éléments sécurisés d&rsquo;accès aux ressources via CLIXML.</p>



<p>Je pense qu&rsquo;avec toutes ces informations nous devrions être en capacité de réaliser le paramétrage nécessaire pour une implémentation.</p>



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



<p>L&rsquo;implémentation se déroulera en quatre mouvements (comme une <a href="https://www.youtube.com/watch?v=Rd0HnxWm5CY&amp;ab_channel=DWClassicalMusic">symphonie</a>), c&rsquo;est à dire le paramétrage des solutions et création des comptes, le paramétrage du script, la mise en place de la tâche planifiée et pour finir les tests de bon fonctionnement.</p>



<h3 class="wp-block-heading">Paramétrages des solutions &amp; création des accès</h3>



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



<p>Pour l&rsquo;application VEEAMOne, il n&rsquo;y a pas grand chose à faire. Tout va se faire au niveau de la création d&rsquo;un utilisateur dans notre Active Directory.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id2428_5dc585-d8 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-pane2428_bf6ff7-17"><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">1 &#8211; Création de l&rsquo;utilisateur</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>Créer un utilisateur qui devra être utilisateur du domaine.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="753" height="565" src="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_007_VEEAMOne_User.png" alt="" class="wp-image-2455" style="width:532px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_007_VEEAMOne_User.png 753w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_007_VEEAMOne_User-300x225.png 300w" sizes="auto, (max-width: 753px) 100vw, 753px" /></figure></div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane2428_b590a6-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">2 &#8211; Assignation à un groupe</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>Afin de limiter les risques au maximum, nous allons ajouter notre utilisateur au groupe de service pour restreindre le périmètre d&rsquo;attaque de ce compte.</p>



<p>Nous allons également ajouter ce dernier en tant que membre du GLS VEEAM One Administrator qui est membre du groupe local de notre serveur VEEAMOne.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="498" height="479" src="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_008_VEEAMOne_Group.png" alt="" class="wp-image-2456" style="width:367px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_008_VEEAMOne_Group.png 498w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_008_VEEAMOne_Group-300x289.png 300w" sizes="auto, (max-width: 498px) 100vw, 498px" /></figure></div></div></div></div>
</div></div></div>



<p></p>



<p>Bien, passons à ITOP.</p>



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



<p>Contrairement à VEEAMOne, il va falloir réaliser un certain nombre de modification sur notre ITOP.</p>



<p>La création d&rsquo;un ticket nécessite plusieurs champs :</p>



<ul class="wp-block-list">
<li>Le client</li>



<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">Un demandeur</mark></li>



<li>L&rsquo;origine</li>



<li>Le titre</li>



<li>Le corps</li>



<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">Le service</mark></li>



<li>Type de Requête</li>



<li>L&rsquo;impact</li>



<li>L&rsquo;urgence</li>



<li>La priorité</li>



<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">L&rsquo;Equipe de contact</mark></li>
</ul>



<p>Nous allons avoir besoin de nous assurer de la bonne existence des champs ci-haut en vert. Dans le cas contraire, il faudra créer ces derniers.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id2428_2cac9a-af 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-pane2428_69acff-fd"><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">1 &#8211; Personne</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"><div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="388" src="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_009_ITOP_Personn-1024x388.png" alt="" class="wp-image-2458" srcset="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_009_ITOP_Personn-1024x388.png 1024w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_009_ITOP_Personn-300x114.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_009_ITOP_Personn-768x291.png 768w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_009_ITOP_Personn.png 1514w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure></div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane2428_7ce1ca-20"><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">2 &#8211; Compte utilisateur</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"><div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="568" src="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_012_ITOP_CompteUtilisateur-1024x568.png" alt="" class="wp-image-2459" srcset="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_012_ITOP_CompteUtilisateur-1024x568.png 1024w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_012_ITOP_CompteUtilisateur-300x166.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_012_ITOP_CompteUtilisateur-768x426.png 768w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_012_ITOP_CompteUtilisateur.png 1069w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure></div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane2428_7ea98e-82"><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">3 &#8211; Services</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"><div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="443" src="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_010_ITOP_Services-1024x443.png" alt="" class="wp-image-2460" srcset="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_010_ITOP_Services-1024x443.png 1024w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_010_ITOP_Services-300x130.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_010_ITOP_Services-768x332.png 768w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_010_ITOP_Services.png 1498w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure></div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane2428_4ad432-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">4 &#8211; Contact</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"><div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="296" src="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_011_ITOP_EquipeInterne-1024x296.png" alt="" class="wp-image-2461" srcset="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_011_ITOP_EquipeInterne-1024x296.png 1024w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_011_ITOP_EquipeInterne-300x87.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_011_ITOP_EquipeInterne-768x222.png 768w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_011_ITOP_EquipeInterne.png 1508w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure></div></div></div></div>
</div></div></div>



<h3 class="wp-block-heading">Paramétrage du script</h3>



<p>Encore une fois, pourquoi nous narguer avec ton script si tu nous en donnes pas l&rsquo;accès ? Tu connais l&rsquo;histoire de <a href="https://www.youtube.com/watch?v=KLhOa5Jm1js&amp;ab_channel=Gojira">Marie-Antoinette</a> ?</p>



<p>Je le redis, ma décision de ne pas lever le voile maintenant n&rsquo;est pas définitive et je préfère anticiper lorsque celui-ci deviendrait accessible de tous. Toutefois avec les éléments déjà communiqués il est aisé de faire du reverse engineering.</p>



<p>Certaines variables sont donc à définir. Il serait plus aisé de créer un fichier xml (pour les jeunes dinosaures comme moi à défaut d&rsquo;un fichier ini pour les vieux dinosaures) ou d&rsquo;un fichier json (pour la nouvelle génération) pour gérer la configuration de l&rsquo;outil. M&rsquo;enfin, je ne suis que sur une version 1.3 et je dois monter en compétence dans certain domaine. Le temps étant toujours l&rsquo;éternel problème&#8230;</p>



<p>Applicable pour la version 1.3</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id2428_2ea77b-68 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="0">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane2428_88c9ca-f7"><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">1 &#8211; SS_039_1.0_ConnectorVEEAMOne-ITOP.ps1</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>On ne touche pas la première ligne, sauf si les modules changent. Je choisie de gérer le chargement des modules à travers le script.</p>



<p>La seconde ligne se trouve être tout simplement le chemin absolu où va être stocké notre script.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="741" height="73" src="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_101_ITOP_ps1conf.png" alt="" class="wp-image-2463" srcset="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_101_ITOP_ps1conf.png 741w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_101_ITOP_ps1conf-300x30.png 300w" sizes="auto, (max-width: 741px) 100vw, 741px" /></figure></div>


<p>La variable $_const_defaultItopOrganisation doit contenir le nom de l&rsquo;organisation ITOP par défaut. Dans le cas d&rsquo;un fonctionnement en tant que Service Providers, l&rsquo;outil basculera vers dans une autre condition. Si l&rsquo;organisation client n&rsquo;est pas trouvé, l&rsquo;incident sera remonté directement dans l&rsquo;organisation par défaut.</p>



<p>Il en est de même pour la variable $_const_defaultTeam_from_defaultOrganization qui va contenir l&rsquo;équipe pour qui le ticket va être assigné. Dans le cas contraire, l&rsquo;équipe sera définie sur une valeur en dur dans le code.</p>



<p>Nous ne touchons pas au format date.</p>



<p>Plus loin dans le script nous trouvons les variables liées au system notamment pour la partie authentification.</p>



<p>Il sera nécessaire de modifier le nom du domaine, le compte qui va être utilisé pour établir la connexion à l&rsquo;application VEEAMOne. De renseigner le chemin absolu où va être stocké le fichier CLIXML pour l&rsquo;authentification.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="620" height="58" src="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_102_ITOP_ps1conf.png" alt="" class="wp-image-2464" srcset="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_102_ITOP_ps1conf.png 620w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_102_ITOP_ps1conf-300x28.png 300w" sizes="auto, (max-width: 620px) 100vw, 620px" /></figure></div>


<p>Je ferai un article sur les différentes gestions des credentials et moyen d&rsquo;authentification en powershell à l&rsquo;avenir car je pense utile pour moi de connaitre l&rsquo;ensemble des méthodes et de faire un rapide feedback. Décidemment, le respect de la loi allgood est <a href="https://www.youtube.com/watch?v=qfqA1sTKhmw&amp;ab_channel=Palmashow">dead</a> là !</p>



<p>Bref, je reviendrai sur ce point plus tard, mais dans le cas d&rsquo;un dysfonctionnement d&rsquo;authentification il suffira de supprimer le fichier xml.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane2428_dedfde-4e"><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">2 &#8211; SS_039_1_VEEAM_One_api.psm1</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>Dans le fichier de module propre à VEEAMOne il faut regarder les lignes suivantes.</p>



<p><mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color">STOP ! RED FLAGS !!</mark> Depuis quand on balance des variables dans un fichier module ou header (.h représente !) gros cochon ! <em>Si l&rsquo;indien ou le vieux VERMEU te voyaient, tu ne convoiterais pas comme ça cette banane !</em></p>



<p>Oui je sais, pour le coup j&rsquo;ai fait de la merde par paquet de 10 et c&rsquo;est dégeulasse Mais avec ça je suis au moins certain que ce n&rsquo;est pas du chat GPT ! Je vous explique l&rsquo;hérésie. J&rsquo;ai d&rsquo;abord fait le code en ps1 (version 1.0) puis je me suis dit que l&rsquo;architecture n&rsquo;était pas la bonne. J&rsquo;ai donc refactorisé une partie du code mais pas tout. Ce heurte alors à la portabilité des variables, les appels et le transfert d&rsquo;argument&#8230; J&rsquo;ai fait comme d&rsquo;habitude. <a href="https://www.youtube.com/watch?v=JmghDKkeiik&amp;ab_channel=bref.">Je remets à demain, qui le remet à plus tard, mais pas à jamais&#8230;</a></p>



<p>Enfin, passons et regardons ce qui doit être modifié</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="541" height="74" src="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_103_ITOP_psm1V1_conf.png" alt="" class="wp-image-2465" srcset="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_103_ITOP_psm1V1_conf.png 541w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_103_ITOP_psm1V1_conf-300x41.png 300w" sizes="auto, (max-width: 541px) 100vw, 541px" /></figure></div>


<p>Préciser dans la première ligne l&rsquo;url de notre serveur VEEAMOne. Ne pas oublier d&rsquo;ouvrir les flux si besoin et de bien commencer par <strong>https://</strong> et terminer par <strong>/api</strong>.</p>



<p>Pour le reste, pas besoin de toucher 🙂</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane2428_91e4f8-3e"><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">3 &#8211; SS_039_1_COMBODO_itop_api.psm1</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>Idem que pour le volet précédent concernant le module VEEAMOne, c&rsquo;est à gerber&#8230; Mais c&rsquo;est comme ça et dans la vie il faut savoir serrer les dents et garder les gros morceaux (si vous avez l&rsquo;image, oui c&rsquo;est hard et dégelasse).</p>



<p>Mais comme présenté plus haut, c&rsquo;est encore plus insupportable car le couple d&rsquo;authentification à ITOP est en clair dans le fichier&#8230;</p>



<p>Oui je vais corriger ça. 🙂 Mais regardons tout de même les variables à adapter.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="766" height="87" src="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_104_ITOP_psm1V1_conf.png" alt="" class="wp-image-2469" srcset="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_104_ITOP_psm1V1_conf.png 766w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_104_ITOP_psm1V1_conf-300x34.png 300w" sizes="auto, (max-width: 766px) 100vw, 766px" /></figure></div>


<p>Dans la première ligne relative à l&rsquo;url, modifier portail.erwanguillemard.com:443 par votre url en spécifiant le port. Naturellement si vous êtes en HTTPS pas besoin de préciser le port.</p>



<p>Préciser la version de l&rsquo;API, le compte utilisateur créé précédemment (celui avec le profil REST) ainsi que son mot de passe.</p>



<p>Laissez la varibale d&rsquo;outfields à *. Sans quoi vous ne retournerez pas l&rsquo;ensemble de tous les attributs lors des appels API.</p>
</div></div></div>
</div></div></div>



<h3 class="wp-block-heading">Sécurité</h3>



<p>Deux aspects sont à considérer sur ce point. Je ne traiterai pas de la partie gMSA car cela fera le biais d&rsquo;un autre billet.</p>



<ul class="wp-block-list">
<li>Qui peut accéder au répertoire scripts ?</li>



<li>Qui peut accéder au fichier permettant l&rsquo;authentification ?</li>
</ul>



<p>A ces deux questions, je répondrai uniquement les utilisateurs administrateurs du domaines et local de notre serveur en contrôle total ainsi que le groupe de services en lecture exécutions et écritures uniquement sur le répertoire _auth. Oui sinon comment exporter le fichier xml ?</p>



<p>Ainsi, nous passerions des droits suivants :</p>



<figure class="wp-block-table aligncenter"><table class="has-fixed-layout"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>Avant</strong></td><td class="has-text-align-center" data-align="center"><strong>Après</strong></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="350" height="145" class="wp-image-2471" style="width: 350px;" src="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_105_beforeACL.png" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_105_beforeACL.png 726w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_105_beforeACL-300x124.png 300w" sizes="auto, (max-width: 350px) 100vw, 350px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="350" height="150" class="wp-image-2472" style="width: 350px;" src="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_106_afterACL.png" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_106_afterACL.png 731w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_106_afterACL-300x129.png 300w" sizes="auto, (max-width: 350px) 100vw, 350px" /></td></tr></tbody></table></figure>



<h3 class="wp-block-heading">Taches Planifiées</h3>



<p>Pour la tache planifiée, rien de plus simple il suffit de suivre le vieux Raffiki (ou <a href="https://www.abcduvin.com/index.php/term/1,2703.xhtml">Riquiqui</a> mais à trop le suivre celui là on peut <a href="https://www.youtube.com/watch?v=Gk9rW4q7y8Q&amp;ab_channel=chance">terminer mal mon copaing</a>), il connait le chemin.</p>



<p>Néanmoins, j&rsquo;ai buté et bute encore sur un os. Je vous ai cassé les pieds avec le CLIXML pour sécuriser l&rsquo;authentification ? Et bien cela se retourne contre moi&#8230; Mais pourquoi donc ?</p>



<p>Le principe du chiffrement via CLIXML repose sur l&rsquo;usage d&rsquo;une <strong>SecureString</strong> au sens .NET du terme. Pour assurer ce chiffrement, le système utilise l&rsquo;information de la session utilisateur ainsi que du SE. Or pour déchiffrer l&rsquo;information il faut donc que les conditions de chiffrement soient présente (évident <em>Capt&rsquo;ain Obivous</em>).</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>Chiffrement</strong></td><td class="has-text-align-center" data-align="center"><strong>Déchiffrement</strong></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="350" height="272" class="wp-image-2477" style="width: 350px;" src="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_110_import.png" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_110_import.png 451w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_110_import-300x233.png 300w" sizes="auto, (max-width: 350px) 100vw, 350px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="350" height="269" class="wp-image-2478" style="width: 350px;" src="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_111_export.png" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_111_export.png 461w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_111_export-300x230.png 300w" sizes="auto, (max-width: 350px) 100vw, 350px" /></td></tr></tbody></table></figure>



<p>Sauf que dans notre contexte et avec les moyens mise en œuvre pour sécuriser le compte de service nous nous retrouvons avec un usage batard&#8230; Effectivement, même si la tache planifiée utilise le bon compte, cette dernière est planifié dans une autre session. Ce qui nous retourne une erreur « bête » de déchiffrement&#8230; (POWNED mon gars).</p>



<p>Paradoxalement, si nous appelons le script en dehors de la tâche planifiée, ce dernier fonctionne sans problème. J&rsquo;ai déjà des idées et piste pour prendre pleine possession du sujet. Il faut contacter MARSHAL 🙂</p>



<p>Finalement, pas besoin de MARSHAL, après plusieurs semaines (en réalité ça fait 2 ans que je cherche&#8230; Mais chut !) je suis tombé dans les méandres d&rsquo;une discussion entre deux developper .NET dans le cadre d&rsquo;une autre projet sur cet problématique. Le post datant de 2015, en tant normal je passe alégrement mon chemin, mais là j&rsquo;ai lu la problématique et la démarche pour tenter de résoudre cette dernière. La théorie est bonne, mais semblait incomplète. Et pour le coup elle était bien incomplète. Tout est une histoire de contexte.</p>



<p>La génération du fichier chiffré (Export-CLIXML) ne doit pas être fait dans la session utilisateur, mais dans le contexte de l&rsquo;utilisateur. Et donc ? Et donc chers amis, il est nécessaire de générer le fichier depuis la tâche la première fois en demandant au préalable la saisie des credentials par l&rsquo;utilisateur. De cette manière, même avec ma session qui a servi à l&rsquo;exécution, je ne peux pas déchiffrer le contenu du fichier (fallait y penser).</p>



<p>Poussant le vice plus loin, cela fonctionne avec mon compte de service, mais également avec un compte de type MSA<sup data-fn="1efa48a9-bd98-4fd0-8da2-65480836c319" class="fn"><a href="#1efa48a9-bd98-4fd0-8da2-65480836c319" id="1efa48a9-bd98-4fd0-8da2-65480836c319-link">12</a></sup>. Pour plus de détail, je vous laisse me contacter 😉</p>



<p>M&rsquo;enfin comme dirait Gaston LAGAFFE, je pose tout de même les paramètres de la tâche planifiée ici.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id2428_25d085-26 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-pane2428_9751bb-01"><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">1 &#8211; Général</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"><div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="634" height="486" src="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_107_tsk1.png" alt="" class="wp-image-2479" srcset="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_107_tsk1.png 634w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_107_tsk1-300x230.png 300w" sizes="auto, (max-width: 634px) 100vw, 634px" /></figure></div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane2428_72dc40-33"><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">2 &#8211; Trigger</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"><div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="641" height="521" src="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_107_tsk2.png" alt="" class="wp-image-2480" srcset="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_107_tsk2.png 641w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_107_tsk2-300x244.png 300w" sizes="auto, (max-width: 641px) 100vw, 641px" /></figure></div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane2428_c455ea-29"><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">3 &#8211; Action</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"><div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="634" height="484" src="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_107_tsk3.png" alt="" class="wp-image-2481" srcset="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_107_tsk3.png 634w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_107_tsk3-300x229.png 300w" sizes="auto, (max-width: 634px) 100vw, 634px" /></figure></div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane2428_6c3bef-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">4 &#8211; Conditions</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"><div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="635" height="484" src="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_107_tsk4-1.png" alt="" class="wp-image-2484" srcset="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_107_tsk4-1.png 635w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_107_tsk4-1-300x229.png 300w" sizes="auto, (max-width: 635px) 100vw, 635px" /></figure></div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-5 kt-pane2428_9ee5ef-75"><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">5 &#8211; Settings</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"><div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="639" height="486" src="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_107_tsk5-1.png" alt="" class="wp-image-2485" srcset="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_107_tsk5-1.png 639w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_107_tsk5-1-300x228.png 300w" sizes="auto, (max-width: 639px) 100vw, 639px" /></figure></div></div></div></div>
</div></div></div>



<p></p>



<p>En truandant la chose (comprendre en insérant le password en dur et en clair), c&rsquo;est ok.</p>



<h3 class="wp-block-heading">Tests et Debug</h3>



<p>Nous n&rsquo;allons pas nous mentir, une petite fonction ou menu de debug ne serait pas du luxe. Je me le note c&rsquo;est promis. (T&rsquo;ain, il y a du pain sur la planche d&rsquo;ici Noël&#8230;).</p>



<p>Allons jeter un œil <a href="https://www.youtube.com/watch?v=sFsKTkrOIps&amp;ab_channel=InaChansons"><s>du côté de chez Swann</s></a> euh de notre ITOP pardon dans la vue des tickets en cours. Oui j&rsquo;ai aussi du travail sur mon infra @home. 🙂 Mais cela nous montre l&rsquo;intérêt de la solution ?</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="291" src="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_108_global-1024x291.png" alt="" class="wp-image-2487" srcset="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_108_global-1024x291.png 1024w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_108_global-300x85.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_108_global-768x218.png 768w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_108_global-1536x437.png 1536w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_108_global.png 1565w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Et si nous regardons une requête plus en détail ?</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="611" src="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_108_detail-1024x611.png" alt="" class="wp-image-2486" srcset="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_108_detail-1024x611.png 1024w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_108_detail-300x179.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_108_detail-768x459.png 768w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_108_detail.png 1422w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Nous retrouvons la valeur des attributs renseignés précédemment dans notre appel API. Le ticket est bien assigné à notre organisation <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">00-RONELAB</mark>, le demandeur est le <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">Service VEEAMONE</mark>. La requête est dans l&rsquo;état <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">Assignée</mark> à une équipe <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">Equipe Interne</mark> depuis l&rsquo;origine <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">Supervision</mark>. La catégorie de Service est <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">SE</mark> etc. Nous retrouvons également dans le corps de notre requête l&rsquo;ensemble des <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">informations contextuelles</mark> dans la première et seconde ligne puis le <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">détail de l&rsquo;erreur</mark> dans la troisième ligne.</p>



<p>Oui mais si ça ne fonctionne pas, tu debugs comment ?</p>



<p>Pour le coup, il nous suffira de lire les retours des calls API d&rsquo;ITOP. Si c&rsquo;est 0 tu exaltes de joie si c&rsquo;est 100 tu lis gentiment le message d&rsquo;insultes et tu corriges. Dans la grande majorité des cas les erreurs résultent d&rsquo;une modification côté ITOP d&rsquo;une valeur attendue ou d&rsquo;une valeur manquante.</p>



<p>Je vous glisse un exemple ci-dessous du script en mode debug sur la création d&rsquo;une requête à la suite d&rsquo;une alarme VEEAMOne.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="449" src="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_109_tsk5-1024x449.png" alt="" class="wp-image-2488" style="width:840px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_109_tsk5-1024x449.png 1024w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_109_tsk5-300x132.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_109_tsk5-768x337.png 768w, https://erwanguillemard.com/wp-content/uploads/2024/11/AP_010_109_tsk5.png 1249w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure></div>


<p>Dans le bloc jaune, nous avons la création du ticket. Nous voyons clairement le retour <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">code=0</mark> nous informant que l&rsquo;opération de création c&rsquo;est bien passé. Notre ticket est donc dans l&rsquo;état « Nouveau ». Dans le bloc rouge qui gère l&rsquo;assignation de notre requête (pour respecter le cycle de vie) nous constatons que nous avons une erreur qui est retourné lors de notre appel API, présence d&rsquo;une insulte et d&rsquo;un <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">code=100</mark>. Etrangement, la requête échoue mais le ticket est bien assigné. Au vu du message, la requête est incomplète ou doit comporter une erreur de syntaxe. A creuser&#8230; 🙂</p>



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



<p>La supervision comme nous le savons déjà offre une bonne vision de l&rsquo;état de santé de notre système d&rsquo;information. Cependant, il résulte lors d&rsquo;incidents ou de dysfonctionnements légers d&rsquo;exploitation un manque de suivi quant à leur résolution. Certes, un dysfonctionnement d&rsquo;espace disque sur une VM<sup data-fn="d45a292e-81b8-49a9-9313-85d6dc8e238d" class="fn"><a href="#d45a292e-81b8-49a9-9313-85d6dc8e238d" id="d45a292e-81b8-49a9-9313-85d6dc8e238d-link">13</a></sup> n&rsquo;apporte pas d&rsquo;information technique quant à sa résolution. A l&rsquo;inverse, un dysfonctionnement de synchronisation DRS<sup data-fn="64f0d887-4193-4ca4-b5fb-28e45b10840e" class="fn"><a href="#64f0d887-4193-4ca4-b5fb-28e45b10840e" id="64f0d887-4193-4ca4-b5fb-28e45b10840e-link">14</a></sup> qui nécessite de toucher au service vpxuser nécessite de nourrir la base de connaissance et de garder une trace dans la solution ITSM.</p>



<p>Vous êtes efficaces ? Soyons efficients ! L&rsquo;avantage d&rsquo;une passerelle applicative permet de se focaliser sur un point d&rsquo;entrée unique et donc d&rsquo;être réactif. Attention cela ne veut pas dire qu&rsquo;il ne faut pas regarder les autres consoles.</p>



<p>Il sera également intéressant de mesurer la volumétrie de requête créé et de se poser la question sur la stabilité ou non du SI et d&rsquo;engager ou non un plan correctif sur l&rsquo;infrastructure ou sur imaginons dans un certains cas son remplacement ou son renforcement.</p>



<p>Sur le plan service, cette méthode permettrait également de faire grandir les équipes opérationnelles quant aux traitements des différentes alarmes remontées.</p>



<p>D&rsquo;un point de vu personnel, je souffre de cette frustration de vouloir bien faire sans atteindre pleinement mon but. Le code ne sera jamais assez bien pour moi. Il reste à améliorer, factoriser, sécuriser. C&rsquo;est un métier, un métier que je n&rsquo;ai pas su faire le mien à l&rsquo;époque et maintenant (d&rsquo;un autre côté du cherche aussi, développer en Notepad++ et en Powershell ISE aussi&#8230;). <s>La frustration sur le CLIXML me laisse un gout amer. Néanmoins, pourquoi mentir et dire que tout va bien et que cela fonctionne alors que ce n&rsquo;est pas le cas ? C&rsquo;est également l&rsquo;objectif de ce site parler de ce qui fonctionne et de ce qui ne fonctionne pas ou pas comme il devrait.</s> <mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color">Hourra ! (petit update 3 mois après&#8230;). Le gout amer est partie 🙂 A partir de ce jour le script est sécurisé à travers un fichier généré par CLIXML depuis un compte de service standard et gMSA. La méthode était la bonne, mais pas la pratique. Tout est histoire de contexte finalement.</mark> Comme quoi avec persévérance 🙂</p>



<p>Il serait également facile de me reprocher sur ce petit projet de ne pas avoir émis la possibilité de traiter directement les flux de mails directement dans ITOP. Mais la tâche devient tout de suite plus titanesque. Comment gérer la remédiation dans le cas d&rsquo;une variation d&rsquo;alarme ? Je laisse ça a d&rsquo;autre, il y a des APIs il faut les utiliser. La génération de ticket sur un flux de messagerie entrant doit selon moi être définie dans un cas d&rsquo;usage précis et n&rsquo;est pas adapté à un usage de monitoring, supervision.</p>



<p>Bref, à voir si certaines personnes seraient intéressés d&rsquo;échanger sur le sujet et de faire grandir ce petit projet. A savoir que je ne baisserai pas les bras car <strong><mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color">SPOILER ALERTE</mark></strong>, j&rsquo;ai déjà développé les GWs :</p>



<ul class="wp-block-list">
<li><strong>VEEAM B&amp;R &lt;-&gt; ITOP</strong></li>



<li><strong>VSPC &lt;-&gt; ITOP</strong></li>
</ul>



<p>Oui M&rsquo;sieurs, Dames ! Et je vais faire les mêmes articles mais avec les corrections !</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>Bonjour, je viens pour la clim ! Mon papa m&rsquo;a toujours dit de ne pas accepter les call APIs des inconnus&#8230;  C&rsquo;est que j&rsquo;ai eu un CRUD sur toi, tu aimes les films de gladiateur ?</em></p>
<cite>Erwan GUILLEMARD</cite></blockquote>



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



<ul class="wp-block-list">
<li><a href="https://www.servicenow.com/fr/">ServiceNow</a></li>



<li><a href="https://www.veeam.com/fr/products/free/monitoring-analytics.html">VEEAMOne</a></li>



<li><a href="https://www.combodo.com/ITOP">ITOP by COMBODO</a></li>
</ul>


<ol class="wp-block-footnotes"><li id="f191d455-4717-4aaf-8ff4-82c9265b904b"><strong>LTS</strong> : Long Time Support <a href="#f191d455-4717-4aaf-8ff4-82c9265b904b-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="d7c86f1e-4938-4f27-a623-2239f16a69e6"><strong>SI :</strong> Système d&rsquo;Information <a href="#d7c86f1e-4938-4f27-a623-2239f16a69e6-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="f1d99d7a-2755-48a1-8e82-84bc9b93e4c0"><strong>ETP :</strong> Equivalent Temps Plein <a href="#f1d99d7a-2755-48a1-8e82-84bc9b93e4c0-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="0aa1a249-3ecf-41de-9099-f521c19d40af"><strong>BAL</strong> : Boites Aux Lettres <a href="#0aa1a249-3ecf-41de-9099-f521c19d40af-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="1fd80a16-6c1d-4153-90e3-0ecc9f956387"><strong>ITSM</strong> : Information Technology Service Management <a href="#1fd80a16-6c1d-4153-90e3-0ecc9f956387-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="25af4c42-afb9-44b3-9039-e222037b293e"><strong>GW</strong> : GateWay ou Passerelle <a href="#25af4c42-afb9-44b3-9039-e222037b293e-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="f29fcc2d-94f5-4c52-9877-bad186eaca9c"><strong>MCO</strong> : Maintien en Condition Opérationel <a href="#f29fcc2d-94f5-4c52-9877-bad186eaca9c-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="54fccf78-98cb-4623-8360-19b237ba2ba9"><strong>CMDB</strong> : Configuration Management Database <a href="#54fccf78-98cb-4623-8360-19b237ba2ba9-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="8cde5590-e181-4d7a-b4a4-ace5fddd45c0"><strong>MCD</strong> : Modèle Conceptuel des Données <a href="#8cde5590-e181-4d7a-b4a4-ace5fddd45c0-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="0290669f-efb9-4ab6-a7b3-b4f7eff01b1c"><strong>RBAC</strong> : Role Based Access Control <a href="#0290669f-efb9-4ab6-a7b3-b4f7eff01b1c-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li><li id="80135d95-15b4-4cd0-a0ec-c8ffde965f4b"><strong>gMSA</strong> : GroupManaged Service Account <a href="#80135d95-15b4-4cd0-a0ec-c8ffde965f4b-link" aria-label="Aller à la note de bas de page 11">↩︎</a></li><li id="1efa48a9-bd98-4fd0-8da2-65480836c319"><strong>MSA</strong> : Managed Service Account <a href="#1efa48a9-bd98-4fd0-8da2-65480836c319-link" aria-label="Aller à la note de bas de page 12">↩︎</a></li><li id="d45a292e-81b8-49a9-9313-85d6dc8e238d"><strong>VM</strong> : Virtual Machine <a href="#d45a292e-81b8-49a9-9313-85d6dc8e238d-link" aria-label="Aller à la note de bas de page 13">↩︎</a></li><li id="64f0d887-4193-4ca4-b5fb-28e45b10840e"><strong>DRS</strong> : Distributed Ressources Scheduler <a href="#64f0d887-4193-4ca4-b5fb-28e45b10840e-link" aria-label="Aller à la note de bas de page 14">↩︎</a></li></ol>


<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PROJET &#8211; ITOP, MARIADB &#038; DUMP</title>
		<link>https://erwanguillemard.com/projet-dump-sql/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Tue, 26 Mar 2024 00:43:00 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Projets]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[iTop]]></category>
		<category><![CDATA[Projet]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=1782</guid>

					<description><![CDATA[Il était une fois, un vendredi 22 février 2019, un jeune responsable informatique qui a décidé de réaliser un changement en production. Jusque-là, les conditions étaient favorables à cette veille de week-end. La semaine ne s&#8217;était pas si mal passée, les prémices des premiers rayons de soleil de printemps baignaient l&#8217;openspace d&#8217;une douce lumière, l&#8217;ambiance...]]></description>
										<content:encoded><![CDATA[
<p>Il était une fois, un vendredi 22 février 2019, un jeune responsable informatique qui a décidé de réaliser un changement en production. Jusque-là, les conditions étaient favorables à cette veille de week-end. La semaine ne s&rsquo;était pas si mal passée, les prémices des premiers rayons de soleil de printemps baignaient l&rsquo;openspace d&rsquo;une douce lumière, l&rsquo;ambiance était chaleureuse.</p>



<p>Mon binôme et moi-même rigolions à quelques blagues potaches de ma part. Tout allait bien. J&rsquo;enchainais dans notre solution ITSM<sup data-fn="4f016091-caee-4b8c-a7e6-1b261affbaf7" class="fn"><a href="#4f016091-caee-4b8c-a7e6-1b261affbaf7" id="4f016091-caee-4b8c-a7e6-1b261affbaf7-link">1</a></sup> les requêtes SQL<sup data-fn="8379ab85-9658-4c5e-9828-433f56ea0c75" class="fn"><a href="#8379ab85-9658-4c5e-9828-433f56ea0c75" id="8379ab85-9658-4c5e-9828-433f56ea0c75-link">2</a></sup>/OQL<sup data-fn="5263c9bd-049e-413f-971a-20c0ee6c7e4b" class="fn"><a href="#5263c9bd-049e-413f-971a-20c0ee6c7e4b" id="5263c9bd-049e-413f-971a-20c0ee6c7e4b-link">3</a></sup> avec des gros mots comme DROP, DROP CASCADE. (Vous le voyez le drame qui arrive ? Iceberg droit devant ! </p>



<p>Attention spoiler, ça ne va pas se terminer avec l&rsquo;anneau dans le volcan !). </p>



<p>Un collègue passe m&rsquo;avertir qu&rsquo;il ne peut plus traiter de ticket. Je me souviens lui avoir répondu avec un aplomb digne d&rsquo;un politicien que c&rsquo;était normal. Pourquoi s&rsquo;arrêter en si bon chemin dans l&rsquo;exécution de mes requêtes, il n&rsquo;y a pas de message d&rsquo;erreur ? Tant que je gagne je joue ! xD</p>



<p>J&rsquo;ai un peu moins rigolé quand deux minutes montre en main le responsable du centre de service m&rsquo;a indiqué que s&rsquo;il y a quelques minutes nos collègues ne pouvaient plus s&rsquo;assigner de ticket, cette fois si, ils n&rsquo;existaient même plus et ne pouvaient plus sélectionner leur nom sur l&rsquo;interface WEBUI<sup data-fn="0895739d-0898-404b-9759-53df65cec194" class="fn"><a href="#0895739d-0898-404b-9759-53df65cec194" id="0895739d-0898-404b-9759-53df65cec194-link">4</a></sup>.</p>



<p>Pour vous résumer mon état :</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>Si ça en a le gout, la texture et l&rsquo;odeur. C&rsquo;est que s&rsquo;en est !</em></p>
<cite>Ce n&rsquo;est pas de moi, mais l&rsquo;auteur je l&rsquo;espère se reconnaitra</cite></blockquote>



<p>Avant de poursuivre ce conte digne des frères GRIMM, je souhaite dans cet article vous faire part d&rsquo;une situation particulière à la limite du critique, de la réflexion pour corriger cette situation et des solutions pour se prémunir d&rsquo;une potentielle récidive. <a href="https://www.youtube.com/watch?v=hH-jgntsgaU&amp;ab_channel=InaPierreDesproges.%C3%89tonnant%2Cnon%3F">Chassez le naturel, il revient au goulot</a>&#8230;</p>





<h2 class="wp-block-heading">Prérequis</h2>



<ul class="wp-block-list">
<li><strong>SE:</strong> RHEL, DEBIAN, UBUNTU</li>



<li><strong>Apps:</strong> bash, crontab, Mariadb/Mysql</li>



<li><strong>Autres:</strong> Au moins une base de données, <a href="https://erwanguillemard.com/apps-mutt/">Apps &#8211; MUTT</a></li>
</ul>



<h2 class="wp-block-heading">(Reprise de l&rsquo;histoire)</h2>



<p>Effectivement, j&rsquo;ai bien « défoncé » quelques tables et jointures. L&rsquo;application ITSM colonne vertébrale de notre organisation n&rsquo;est plus fonctionnel. Il est 15h00 et l&rsquo;ensemble des équipes sont à l&rsquo;arrêt. Paradoxalement, j&rsquo;aurai dû continuer de passer des requêtes SQLs car si nous ne pouvions pas traiter les demandes et incidents des utilisateurs, ces derniers pouvaient créer des tickets.</p>



<p>A ce moment, nous avions bien identifié l&rsquo;origine du dysfonctionnement (1m98, 85 kilos&#8230; oui mais pas que). Nous envisagions mes collègues et moi une once d&rsquo;espoir pour faire machine arrière quant à mes actions sur la base de données.</p>



<p>C&rsquo;est un peu plus difficile quand j&rsquo;ai annoncé ne pas avoir noté toutes les requêtes que j&rsquo;avais exécuté, et que les journaux de logs sont vides. </p>



<p>Pourtant, <a href="https://www.youtube.com/watch?v=2LMiVLpOMlQ&amp;ab_channel=JasonChicandier">personne ne doit travailler le vendredi après midi, le vendredi après midi on est bleu</a>. La décision est prise. Il va falloir restaurer la base de données.</p>



<h3 class="wp-block-heading">Réunion de crise</h3>



<p>Récapitulons donc la situation, la production est hors service. Nous ne pouvons pas revenir en arrière, la production continue de tourner et à cette époque nous avions un fonctionnement particulier avec l&rsquo;un des nos clients pour lequel notre outil ITSM était « master » d&rsquo;un seconde instance ITSM satellite « slave » avec des synchronisations. Bref, un truc super mais sensible en cas de non respect du cycle de vie des tickets.</p>



<p>En dehors du cas singulier précédent, il faut savoir que dans le fonctionnement de notre organisation, nous avons des engagements de résultats sur le traitements des demandes et incidents (SLA<sup data-fn="ae4627e1-e11b-4cec-8fa2-b37da3573deb" class="fn"><a href="#ae4627e1-e11b-4cec-8fa2-b37da3573deb" id="ae4627e1-e11b-4cec-8fa2-b37da3573deb-link">5</a></sup>, OLA<sup data-fn="45db95fc-7d07-48d2-b8d8-be79e04986d3" class="fn"><a href="#45db95fc-7d07-48d2-b8d8-be79e04986d3" id="45db95fc-7d07-48d2-b8d8-be79e04986d3-link">6</a></sup>, SLR<sup data-fn="4ba39691-0448-4c1f-bdc1-f2e4dfe0a212" class="fn"><a href="#4ba39691-0448-4c1f-bdc1-f2e4dfe0a212" id="4ba39691-0448-4c1f-bdc1-f2e4dfe0a212-link">7</a></sup> etc).</p>



<p>Revenir en arrière en restaurant la base de données, oui mais sans perdre les tickets et requêtes utilisateurs en cours.</p>



<p><strong>A quelle heure pouvons nous donc restaurer la BDD ?</strong> Encore une fois c&rsquo;est là où le bât blesse. Nous n&rsquo;avons pas de dump de la base&#8230; (Nous voici donc au volant d&rsquo;une voiture qui roule à vive allure, nous pensons que tout va bien puis que d&rsquo;un coup nous découvrons que l&rsquo;assurance n&rsquo;est pas à jour. Que l&rsquo;ensemble des témoins du tableau de bord s&rsquo;allument tous comme un sapin de Noël et que les freins vont surement lâchés.)</p>



<p>Nous décidons de contacter l&rsquo;éditeur qui malheureusement ne peut rien faire pour nous dans le contexte et arrive à la même conclusion que nous. La restauration en date de la veille et inéluctable. </p>



<p>Nous réalisons toutefois un export de l&rsquo;ensemble de toutes les requêtes créés, modifiées entre le matin même de 06h00 à 18h00 sur l&rsquo;environnement ITSM de production ainsi que sur l&rsquo;environnement ITSM satellite du client, puis coupons les services. De mémoire, cela représentait un volume de 300 tickets environ.</p>



<h3 class="wp-block-heading">Excès de confiance</h3>



<p>Pourquoi cette situation ? Pourquoi ce changement n&rsquo;a-t-il pas été soumis à un CAB ? Si vous avez pris un peu le temps de lire d&rsquo;autres articles ou de lire ma présentation, je suis quelqu&rsquo;un de malchanceux marqué du signe du chat noir ascendant Pierre RICHARD (mais je le vis bien je vous rassure). Nous avions initialement mon collègue et moi pour objectif « d&rsquo;alléger » notre base de données de production. C&rsquo;est pourquoi, dans le cadre du contrat de support et d&rsquo;assistance avec l&rsquo;éditeur, après une analyse commune, nous avions établit une liste de requête <strong><em><span style="text-decoration: underline;">précise</span></em></strong>.</p>



<p>Toutefois et par prudence, il était impératif de tester sur notre environnement de test/préproduction à ISO périmètre de l&rsquo;environnement de production les dites requêtes. Chose qui a été réalisé par mes soins sans rencontrer la moindre complication ou dysfonctionnement. Le résultat est positif, tous les voyants sont verts. Pourquoi ne pas appliquer les modifications sur l&rsquo;environnement de production ? </p>



<p>C&rsquo;est là, que ça ne va pas. L&rsquo;environnement de préproduction ne fonctionne pas à ISO périmètre de l&rsquo;environnement de production. Ce dernier est sans cesse sollicité se qui n&rsquo;est pas le cas de l&rsquo;environnement de préprod. (C&rsquo;est diabolique). Et donc, l&rsquo;application des requêtes ont générés d&rsquo;autres erreurs. L&rsquo;outil ITSM m&rsquo;a gentiment proposé de corriger les dîtes erreurs. Je suis donc sortie allégrement du contexte de mon changement sans m&rsquo;en rendre compte.</p>



<p>Je pensais maitriser mes actions et n&rsquo;ais à aucun moment pensé qu&rsquo;il s&rsquo;agissait d&rsquo;un changement ! Il a suffit d&rsquo;un excès de confiance. Pour mettre à genoux l&rsquo;organisation (rien de bien dramatique en soi quand nous voyons aujourd&rsquo;hui l&rsquo;impact d&rsquo;un crypto, ce n&rsquo;est pas du tout le même impact).</p>



<p>Mais vous savez même si la chat et noir, il a toujours quelques poils blancs dans son pelage 🙂 L&rsquo;incident tombant un vendredi, il nous reste le week-end pour trouver une solution.</p>



<h3 class="wp-block-heading">Plan d&rsquo;actions</h3>



<p>C&rsquo;est incroyable de se dire que l&rsquo;action d&rsquo;un individu à impacté l&rsquo;ensemble des services et nécessité cinq collaborateurs de trois services différents. Néanmoins, personnes n&rsquo;a été malveillant à mon égard à ma grande surprise. Nous étions une équipe face, un bloc face à l&rsquo;incident en cours.</p>



<p>Nous avions donc défini le plan d&rsquo;action suivant :</p>



<ul class="wp-block-list">
<li>Restauration du serveur de base de donnée à la veille dans un environnement isolé</li>



<li>Réalisation du dump de la base de données</li>



<li>Exportation de la base de données</li>



<li>Désactivation de l&rsquo;appareillage entre l&rsquo;ITOP master et le satellite (slave)</li>



<li>Importation de la base de données sur l&rsquo;environnement de production</li>



<li>Réalisation des mêmes actions côté ITOP satellite</li>



<li>Réactivation de l&rsquo;appareillage entre les deux ITOP</li>



<li>Reprise des requêtes côté satellite depuis le fichier CSV exporté plus tôt</li>



<li>Reprise des requêtes côté master depuis le fichier CSV exporté plus tôt</li>
</ul>



<p>Sur le papier cela sonnait bien. Et pourtant encore nous allions buter sur deux points bêtes. C&rsquo;est toujours quand nous sommes dans l&#8217;embarras (pour ne pas dire dans la m***e) que nous nous rendons compte de la réalité des choses. </p>



<ul class="wp-block-list">
<li>A l&rsquo;époque, dans une console VMWare (version 5.5 de mémoire) il était ardu de taper certains caractères spécifiques. Nous avons buter pendant 30 minutes pour saisir le caractère <strong>« @</strong>« .</li>



<li>Lors de l&rsquo;import d&rsquo;un dump existant ITOP, lors de l&rsquo;application d&rsquo;un setup il est nécessaire de supprimer l&rsquo;intégralité d&rsquo;une table VIEWS. Nous ne le savions pas à l&rsquo;époque&#8230; (J&rsquo;ai dans mes tablettes un article en cours à ce propos). Nous ne sommes pas SysDBA, mais nous avons tout de même réalisé le STATMENT qui va bien. (Malgré tous ces péripéties, ils t&rsquo;ont laissé faire du SQL ? Non je vous rassure j&rsquo;étais sous tutelle 🙂 ).</li>
</ul>



<h3 class="wp-block-heading">Reprise des données</h3>



<p>La diversité des tickets et les différents paramètres des ces derniers allaient rendre difficile l&rsquo;automatisation de réimport des requêtes. Il ne suffit pas de reprendre les tickets, il est nécessaire de leurs appliquer un « stimulus » afin que les notifications, SLA, le cycle de vie etc s&rsquo;appliquent. L&rsquo;éditeur nous avait prévenu quelques heures auparavant qu&rsquo;il allait falloir user d&rsquo;huile de coude.</p>



<p>J&rsquo;ai eu à cœur d&rsquo;assumer ma faute et de porter la responsabilité de cet échec. Si mon binôme n&rsquo;était pas disponible samedi pour m&rsquo;aider il l&rsquo;était dimanche. Toutefois, j&rsquo;ai fait tout ce qui était possible pour qu&rsquo;il n&rsquo;ait rien à faire.</p>



<p>Sur les 300 et quelques tickets, il aura dû en traiter une vingtaine et c&rsquo;est je crois toujours 20 de trop. A grand coup de copier/coller, 270 tickets il faut compter à peu près 19h. (J&rsquo;ai oublié de préciser que ma femme m&rsquo;a mis un savon le soir comme quoi il est interdit de faire des changements le vendredi, blablabla. J&rsquo;ai encore le souvenir de la voir partir le samedi soir avec ces copines et revenir tôt le dimanche matin. Ca fait ne me rajeunit pas).</p>



<h3 class="wp-block-heading">Dénouement et fin</h3>



<p>Le lundi matin, tout était de nouveau fonctionnel. Le week-end a été long et les heures de sommeil rares. Toutefois, « la bêtise » était assumée. Un nombre incalculable de « Je suis désolé », « Veuillez accepter mes excuses » auprès de mes collègues ont eu lieu. Il me semble que cela les a plus agacé que l&rsquo;incident en lui même. (Effectivement le gars qui se là joue <a href="https://fr.wikipedia.org/wiki/Les_Cent_Vingt_Journ%C3%A9es_de_Sodome">Les 120 journées de Sodome</a> c&rsquo;est usant). </p>



<p>Le plus beau, restera qu&rsquo;aucun de nos clients n&rsquo;a remarqué l&rsquo;incident et le changement des SLAs de quelques heures. Si quelques interlocuteurs clients l&rsquo;ont remarqués ils n&rsquo;ont pas demandés plus de compte que cela.</p>



<p>Un REX<sup data-fn="12964d76-0031-4d00-b74e-5bcf426f014a" class="fn"><a href="#12964d76-0031-4d00-b74e-5bcf426f014a" id="12964d76-0031-4d00-b74e-5bcf426f014a-link">8</a></sup> a eu lieu en comité et nous avons su pointer les points qui devaient être améliorer. Le plus gros étant de s&rsquo;assurer au moins un dump de la base de données entre deux points de sauvegarde. Oui mais comment faire et surtout par où commencer.</p>



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



<p>A la suite de la petite histoire ci-haut, qui commence mal mais qui se termine plutôt bien. L&rsquo;une des premières questions que je me suis posé est qu&rsquo;est ce que propose ITOP ? Est ce que la solution embarque un système de sauvegarde, de dump de base de données ?</p>



<p>La réponse est oui ! Mais ça ne me convient pas !  </p>



<p>Mais il est jamais content se type. Il y a des solutions mises en place par l&rsquo;éditeur dans sa solution et ça ne lui convient pas. Je le vois déjà écrire « Oui je veux pas réinventer la roue, mais&#8230; ». Tu serais pas un SysAdmin frustré par hasard ? Qu&rsquo;est ce qui a ? </p>



<p>Pour le coup le contexte est différent. Si nous reprenons l&rsquo;architecture 2-tiers (<a href="https://erwanguillemard.com/apps-itop/">Apps &#8211; iTOP</a>), nous avons d&rsquo;un côté notre serveur web et de l&rsquo;autre notre serveur de BDD. Jusque là pas de problème.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="614" height="474" src="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_001_iTop_schema.jpg" alt="" class="wp-image-1794" style="width:386px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_001_iTop_schema.jpg 614w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_001_iTop_schema-300x232.jpg 300w" sizes="auto, (max-width: 614px) 100vw, 614px" /></figure></div>


<p>Ce qui me gène dans l&rsquo;outil mise à disposition pour COMBODO, c&rsquo;est que le stockage des dumps se fait du côté où est exécuter la commande <strong>mysqldump</strong>. Soit côté Front et donc stocké dans le répertoire web itop (<strong>/var/www/html/portail.erwanguillemard.com/data/backups/</strong>).</p>



<p>En quoi ça te gène ? En réalité il y a plusieurs points.</p>



<ul class="wp-block-list">
<li><strong>Espace disque :</strong> Il existe un risque de saturation de l&rsquo;espace de stockage du serveur web et de la partition /var/. La saturation de la partition (ou du disque) peut (plutôt va) rendre inaccessible le portail web. (Tu connais les hardlinks ?)</li>



<li><strong>Sécurité :</strong> Stocker les dumps de la base de données de production sur le serveur front publié vers l&rsquo;extérieur représente un risque en cas d&rsquo;intrusion donc de vulnérabilité et de vol de données dans le pire des cas </li>



<li><strong>Granularité :</strong> Possible uniquement de ne garder que 5 points de rétentions du lundi au vendredi à partir de 23:30.</li>



<li><strong>Mécanisme :</strong> Ce dernier est propre à ITOP est non pas une couche hors de l&rsquo;application. Que se passe-t-il si le front reboot lors de la tâche de backup ou si le réseau est indisponible, si l&rsquo;application est indisponible ?</li>
</ul>



<p>Donc si nous te comprenons bien, la fonctionnalité est naze ? Non, loin de là. Au contraire, je trouve que c&rsquo;est une excellente fonctionnalité car elle permet pour les petites bases de données de réaliser un dump dans les meilleurs délais et de ne pas avoir à se connecter directement au serveur backend. De plus, il est possible de réaliser une restauration directement depuis le portail ITOP (webui).</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="935" height="662" src="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_002_iTop_DataBackup.jpg" alt="" class="wp-image-1795" style="width:451px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_002_iTop_DataBackup.jpg 935w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_002_iTop_DataBackup-300x212.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_002_iTop_DataBackup-768x544.jpg 768w" sizes="auto, (max-width: 935px) 100vw, 935px" /></figure></div>


<p>C&rsquo;est à partir de ce constat que j&rsquo;ai décidé d&rsquo;écrire ma lettre au Père Noël (ou Saint Nicolas suivant notre situation géographique).</p>



<pre class="wp-block-code"><code>Petit Papa Noël, 

J'ai été bien sage en ce début d'année 2019 même si j'ai fait une petite boulette. Afin de ne pas reproduire cette bêtise, je souhaiterai avoir une solution qui réalise les points suivants :
* Un outil qui réalise 2 dumps par jour ou plus (automatisation)
* Un outil qui envoi un mail en cas de succès ou d'erreur du dump
* Un outil qui puisse avoir une fonctionnalité de dump manuel
* Un outil qui soit <strong>GENERIQUE</strong> et s'adapte à n'importe quelle base de données MySQL/MariaDB.
* Un outil qui fonctionne sous GNU (RHEL et DEBIAN) en bash.

Merci Père Noël, je t'aime tu es le meilleur.

Bisous, 

Erwan</code></pre>



<p>Hélas, je n&rsquo;ai toujours pas eu de réponse à ma lettre. A croire que ma « boulette » n&rsquo;était pas si petite que ça&#8230; Ce n&rsquo;est pas grave&#8230; </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>Allez, on est pas des manches, on se relève les manches et&#8230; BANZAÏ !</em></p>
<cite>Merci Groland</cite></blockquote>



<h2 class="wp-block-heading">Configuration et installation du Script</h2>



<p>Bien qu&rsquo;initialement, l&rsquo;outil que j&rsquo;ai développé venait répondre à un besoin professionnel, la version présentée dans cette article a pour seul lien que le contexte et a été développé, testé sur mon temps personnel.</p>



<h3 class="wp-block-heading">Lecture du script</h3>



<p>Comme toujours nous positionnerons le script à la racine du système de notre<em><span style="text-decoration: underline;"> serveur SGBD</span></em> dans un répertoire à part avec des droits spécifiques. L’objectif étant de toujours garantir un niveau de sécurité suffisant et d’éviter une escalade potentielle des droits.</p>



<p>J&rsquo;insiste sur ce point, l&rsquo;ensemble des actions ci-dessous sont à réaliser sur le serveur backend.</p>



<pre class="wp-block-code"><code><strong>$ sudo mkdir /script</strong>
<strong>$ sudo mkdir /script/SS_015-LINUX_MYSQL_DUMP-BDD</strong></code></pre>



<p class="has-text-align-center">Editez le fichier ou copiez le fichier suivant&nbsp;: <em><strong>SS_015_E_LINUX_MYSQL_DUMP-BDD.sh</strong></em></p>



<p>A ce jour le fichier en version E est construit de la manière suivante&nbsp;:</p>



<ul class="wp-block-list">
<li>Les constantes</li>



<li>Une fonction vérifiant les prérequis</li>



<li>Une fonction réalisant le dump de la base de données</li>



<li>Une fonction assurant la rotation des fichiers de dumps suivant le nombre de points de rétention définit</li>



<li>Une fonction pour préparer le mail</li>



<li>Une fonction d’envoi de mail</li>



<li>Une fonction pour forger le mail en html</li>
</ul>



<p>Je vous propose de parcourir ensemble le script, fonction par fonction. L&rsquo;objectif étant de partager ce bout de code et peut être pouvoir le soir me coucher en me persuadant que quelques parts, sur le SI d&rsquo;une organisation ce bout de code, maigre contribution personnel fonctionne&#8230; Laissez moi un peu rêver ou alors dites vous que vous m&rsquo;en vendez (du rêve naturellement) !</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id1782_d242d2-52 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-pane1782_6207d4-32"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title">1 &#8211; Les constantes</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"><div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="633" height="427" src="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_003_iTop_Script_Constantes-3.png" alt="" class="wp-image-1829" srcset="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_003_iTop_Script_Constantes-3.png 633w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_003_iTop_Script_Constantes-3-300x202.png 300w" sizes="auto, (max-width: 633px) 100vw, 633px" /></figure></div>


<p>Les noms des variables sont normalement explicites. Pour éviter toutes ambiguïtés :</p>



<ul class="wp-block-list">
<li><strong>_modeHTML</strong> : Pour avoir des bô rapport en HTML</li>



<li><strong>_author</strong> : Pour afficher dans le rapport le nom du créateur</li>



<li><strong>_version</strong> : Pour la version du script</li>



<li><strong>_dateRelease</strong> : Pour la date du script (dernière modification)</li>



<li><strong>_mailTo</strong> : Contient l&#8217;email du destinataire qui va être spamé de mail</li>



<li><strong>_pathLogRepository</strong> : Emplacement où seront stockés les logs à chaque exécution du script.</li>



<li><strong>_pathLogFile</strong> : Nom du fichier de log</li>



<li><strong>_pathBDDRepository</strong> : Emplacement où seront stockées les dumps</li>



<li><strong>_nbRetention </strong>: Nombre de dump à conserver</li>



<li><strong>_dbName</strong> : Nom de la base de données concerné par le traitement</li>



<li><strong>_dbUser</strong> : Nom du compte Mariadb/MySQL qui sera autorisée à réaliser le dump de la BDD</li>



<li><strong>_dbPassword </strong>: Mot de passe du compte renseigné précédemment</li>
</ul>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane1782_bd139b-cc"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title">2 &#8211; Fonction : Check Prérequis</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>Cette fonction à pour objectif de vérifier et de contrôler que toutes les conditions nécessaires au bon déroulement du script soient présentes.</p>



<ul class="wp-block-list">
<li>Création du répertoire de log si absent</li>



<li>Création du fichier de log si absent ou différent</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="974" height="402" src="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_004_iTop_Script_Constantes.png" alt="" class="wp-image-1801" srcset="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_004_iTop_Script_Constantes.png 974w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_004_iTop_Script_Constantes-300x124.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_004_iTop_Script_Constantes-768x317.png 768w" sizes="auto, (max-width: 974px) 100vw, 974px" /></figure></div>


<ul class="wp-block-list">
<li>Création du répertoire des dumps 1/2 et 2/2 journalier</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="632" src="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_005_iTop_Script_Constantes-1024x632.png" alt="" class="wp-image-1802" srcset="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_005_iTop_Script_Constantes-1024x632.png 1024w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_005_iTop_Script_Constantes-300x185.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_005_iTop_Script_Constantes-768x474.png 768w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_005_iTop_Script_Constantes.png 1158w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure></div>


<p>Si et seulement si les conditions sont présentes alors le script fera appel à la fonction suivante dumpCreate.</p>



<p class="has-text-align-center"><strong>« J&rsquo;ai une question bête ? C&rsquo;est quoi ta variable $codeArg et la commande tee ? »</strong></p>



<p class="has-text-align-left">Il est important de se rappeler « <em>il n&rsquo;y a pas de question bête, il n&rsquo;y a que des réponses stupides</em>« .</p>



<p>Lorsque j&rsquo;ai écrit ce bout de code il y a 4 ans, je souhaitais offrir la possibilité de réaliser l&rsquo;automatisation des dumps mais de garder la possibilité de lancer manuellement un dump sans à avoir à taper la commande mysqldump, le login et le mot de passe. </p>



<p>De ce fait, si nous appelons le script :</p>



<ul class="wp-block-list">
<li><span style="text-decoration: underline;">Sans argument :</span> Réalise un dump de la base de données à l&rsquo;instant T</li>



<li><span style="text-decoration: underline;">Avec argument (<strong>MidDay</strong> ou <strong>MidNight</strong>)</span> : Réalise un dump de la base de données dans un répertoire spécifique. A son intérêt si appelé dans une tâche planifiée.</li>
</ul>



<p>La commande <strong>tee</strong> offre un avantage car elle permet de retourner l&rsquo;affichage d&rsquo;un terminal dans un fichier. Ce qui permet de voir ce qui se passe lors de l&rsquo;exécution du script et de garder une trace de l&rsquo;ensemble des actions. D&rsquo;un côté cela reste plus lourd dans la syntaxe que le traditionnel <strong>2&gt;&amp;1</strong> qui ne gère que le <strong>stdout</strong> et <strong>stderr</strong>. Probablement qu&rsquo;aujourd&rsquo;hui je ferai différemment.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane1782_258d86-3d"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title">3 &#8211; Fonction : Dump Create</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>Nous rentrons dans le vif du sujet. Je réalise le dump de la base en deux temps.</p>



<ul class="wp-block-list">
<li>Export du dump .sql</li>



<li>Compression du dump .sql en .gzip</li>
</ul>



<p>Toujours en prenant en compte l&rsquo;argument passé lors de l&rsquo;appel du script pour positionner le dump dans le bon répertoire. Dans le cas contraire, le dump sera écrit à la racine du répertoire contenant les dumps.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="444" src="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_006_iTop_Script_Constantes-1024x444.png" alt="" class="wp-image-1804" srcset="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_006_iTop_Script_Constantes-1024x444.png 1024w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_006_iTop_Script_Constantes-300x130.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_006_iTop_Script_Constantes-768x333.png 768w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_006_iTop_Script_Constantes-1536x666.png 1536w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_006_iTop_Script_Constantes.png 1900w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure></div>


<p>Dans cette fonction, les commandes les plus intéressantes sont bien entendu les commandes <strong>mysqldump</strong> et <strong>gzip</strong>.</p>



<p>Pourquoi faire en deux temps alors qu&rsquo;il est tout à fait possible de réaliser ces deux actions en une seule commande ?</p>



<p>Excellente question pour laquelle je ne me souviens plus pourquoi j&rsquo;ai fait ça. Peut-être pour le plaisir de chercher midi à quatorze heures que sait où mon côté néophyte ?</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="935" height="61" src="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_007_iTop_Script_mysqldump.png" alt="" class="wp-image-1805" srcset="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_007_iTop_Script_mysqldump.png 935w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_007_iTop_Script_mysqldump-300x20.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_007_iTop_Script_mysqldump-768x50.png 768w" sizes="auto, (max-width: 935px) 100vw, 935px" /></figure></div>


<p>Nous précisons l&rsquo;utilisateur qui va réaliser le dump de la BDD (attention au permission sur la base) ainsi que son mot de passe <strong>-u</strong> <strong>$_dbUser</strong> et <strong>-p$_dbPassword</strong>. L&rsquo;option <strong>&#8211;master-data</strong> permet de se positionner si une réplication SQL est se place sur la dernière position. L&rsquo;option <strong>&#8211;quick</strong> est utile dans le cas de BDDs importante. Cela va permettre de récupérer les lignes d&rsquo;une table, ligne par ligne, plutôt que de récupérer l&rsquo;intégralité de toutes les lignes et de les garder en mémoire avant de l&rsquo;écrire. L&rsquo;option <strong>&#8211;single-transaction</strong> qui est à mon sens l&rsquo;option la plus importante de notre ligne de commande puisque cette option permet de réaliser le dump de notre base de données à chaud sans verrouiller les tables ni bloquer l&rsquo;application. Pour faire plus simple, cela permet de garantir la consistance des données de notre DUMP. L&rsquo;option <strong>&#8211;verbose</strong> est quant à elle compréhensible. Nous indiquons la BDD dont nous souhaitons réaliser le dump <strong>$_dbName</strong>, redirigeons l&rsquo;ensemble des flux dans le répertoire adéquate puis l&rsquo;ensemble des flux dans notre fichier de log.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="936" height="44" src="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_008_iTop_Script_gzipSQL.png" alt="" class="wp-image-1806" srcset="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_008_iTop_Script_gzipSQL.png 936w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_008_iTop_Script_gzipSQL-300x14.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_008_iTop_Script_gzipSQL-768x36.png 768w" sizes="auto, (max-width: 936px) 100vw, 936px" /></figure></div>


<p>La compression est plus simple puisque nous appelons la commande gzip en indiquant que nous voulons de la verbe et que nous allons forcer la création de l&rsquo;archive. Comme pour la commande précédente, nous redirigerons l&rsquo;ensemble des flux dans notre fichier de log.</p>



<p>Et donc si nous souhaitons faire cette opération en une fois ?</p>



<p>Il suffirait de faire un pipe des deux commandes.</p>



<pre class="wp-block-code"><code><strong>$ sudo /usr/bin/mysqldump -u $_dbUser -p$_dbPassword --master-data --quick --single-transaction --verbose $_dbName &gt; $argDump/`date +"%Y-%m-%d"`-$_dbName.sql 2&gt;&gt;$_pathLogRepository/$_pathLogFile | /bin/gzip -f -v $_pathBDDRepository/`date +"%Y-%m-%d"`-$_dbName.sql 2&gt;&gt;$_pathLogRepository/$_pathLogFile</strong></code></pre>



<p>Je ne l&rsquo;ai toutefois pas testé. Donc à vérifier, mais il n&rsquo;y devrait pas avoir de raison que ça ne fonctionne pas. </p>



<p>Il y a toutefois une variation entre le commande présente dans le wiki de COMBODO et ma commande. Je ne précise pas les arguments <strong>&#8211;opt</strong>, <strong>&#8211;default-character-set=utf8</strong>, &#8211;<strong>-add-drop-database</strong>. Pourquoi cette prise de liberté soudaine ?</p>



<p>L&rsquo;option <strong>&#8211;opt </strong>est activé par défaut et si nous ne référons au manuel mysqldump, cette commande est un raccourcie de plusieurs autres commandes. Dans notre cas et si l&rsquo;installation de MySQL/MariaDB a été effectué comme dans un précédent article , la question ne se pose pas. A l&rsquo;inverse, nous ne spécifions pas l&rsquo;encodage des caractères &#8211;<strong>-default-character-set</strong>. Cela pourrait nous porter préjudice. Néanmoins et par défaut si ce dernier n&rsquo;est pas spécifier, <strong>mysqldump</strong> utilisera le type <strong>utf8mb4</strong>. On ne va pas se mentir, je ne suis pas super à l&rsquo;aise sur le sujet. Si ce n&rsquo;est que l&rsquo;utf8mb4 est plus récent que le format utf8 et prend en charge les emojis etc. Par expérience, tous les dumps que j&rsquo;ai dû réimporter jusqu&rsquo;à présent ont été réalisé sans spécifier le type d&rsquo;encodage utf8. Je n&rsquo;ai pas constaté d&rsquo;erreurs ou de dysfonctionnements. Moralité, je vais me mettre au diapason. (D&rsquo;un côté faut être <a href="https://www.youtube.com/watch?v=13dvENdB2rA&amp;ab_channel=DidierSuper-Topic">un peu c*n</a> pour dire j&rsquo;ai RTFM mais j&rsquo;ai pas appliqué les recommandations de l&rsquo;éditeur&#8230;).  </p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane1782_e84990-4c"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title">4 &#8211; Fonction : CleanUp Repository</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>Je vois déjà certains SysAdmins ou Dev se dire « <strong>Nan le gazié il est pas sérieux avec son _nbRetention, il a pas osé faire une fonction de rotation de ces fichiers .sql/.gzip </strong>?! » Et bien désolé de vous décevoir, la réponse est bien un énorme <strong>OUI</strong>, j&rsquo;ai osé.</p>



<p>Pourquoi ? Simplement pour me demander comment ferai je si je devais me passer de logrotate. Et le cas échéant, j&rsquo;ai appris quelques choses d&rsquo;autres et j&rsquo;ai donc un as dans ma manche si je dois faire une rotation de fichier un jour sans logrotate.</p>



<p>(<em>Comme déjà dit plusieurs fois, il est important de savoir se perdre de temps en temps.</em>)</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="933" height="254" src="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_009_iTop_Script_LogRotate.png" alt="" class="wp-image-1807" srcset="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_009_iTop_Script_LogRotate.png 933w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_009_iTop_Script_LogRotate-300x82.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_009_iTop_Script_LogRotate-768x209.png 768w" sizes="auto, (max-width: 933px) 100vw, 933px" /></figure></div>


<p>La commande <strong>find</strong> permet de lister l&rsquo;ensemble des éléments sur un critère. Dans notre usage, nous souhaitons lister tous les éléments (fichiers réguliers) d&rsquo;un des répertoires contenant nos Dumps <strong>-type f</strong> dont la dernière modification est inférieurs au nombre de point de rétention <strong>-mtime +$argNbRetention</strong>. (Notons que cela s&rsquo;exprime en jour donc 5 x 24heures). Les fichiers ne répondant pas au critère sont supprimés <strong>-delete</strong>. </p>
</div></div></div>
</div></div></div>



<p>Je passe mon tour sur les trois dernières fonctions qui sont ennuyeuse au possible et qui pour moi n&rsquo;apportent aucun intérêt dans le projet. Puisque cela concerne l&rsquo;envoi d&rsquo;un mail de notification de succès ou d&rsquo;échec de l&rsquo;archivage ou de la réalisation du dump.</p>



<p>Qui dit notification mail, dit serveur de messagerie (<a href="https://erwanguillemard.com/apps-mutt/">Apps &#8211; MUTT</a>).</p>



<p>Nous contrôlons les droits sur le fichier afin de s&rsquo;assurer que ce dernier est bien en <strong>700</strong> pour <strong>root:root</strong>.</p>



<pre class="wp-block-code"><code><strong>$ sudo ls -ahl /script/SS_015-LINUX_MYSQL_DUMP-BDD</strong></code></pre>



<p>Dans le cas contraire, il sera nécessaire de réaliser les opérations adéquates.</p>



<h3 class="wp-block-heading">Configuration du cron</h3>



<p>Perso, je souhaite avoir un delta de 6 heures maximum en cas de panne et donc (attention largage de gros mots dans deux secondes) dans RTO<sup data-fn="9f7e3b86-4a8f-40b7-ac86-170c2e700ec4" class="fn"><a href="#9f7e3b86-4a8f-40b7-ac86-170c2e700ec4" id="9f7e3b86-4a8f-40b7-ac86-170c2e700ec4-link">9</a></sup> de 1 heure ! Généralement, les entreprises travaillant de 8h00 à 18h00 du Lundi au Vendredi, nous allons automatiser nos dumps à 12h30 et à 18h30 sur les mêmes jours.  Libre à chacun de faire comme il le souhaite. (Attention toutefois si vous avez des jobs de sauvegardes en parallèle des dumps car les SEs n&rsquo;aiment pas ça, ni le matériel d&rsquo;ailleurs les I/O<sup data-fn="d0d50e59-dc19-4682-b0aa-391d08d39353" class="fn"><a href="#d0d50e59-dc19-4682-b0aa-391d08d39353" id="d0d50e59-dc19-4682-b0aa-391d08d39353-link">10</a></sup> un univers passionnant).</p>



<pre class="wp-block-code"><code><strong># vim /etc/crontab</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="63" src="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_010_iTop_Script_crontab-1024x63.png" alt="" class="wp-image-1809" srcset="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_010_iTop_Script_crontab-1024x63.png 1024w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_010_iTop_Script_crontab-300x19.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_010_iTop_Script_crontab-768x47.png 768w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_010_iTop_Script_crontab.png 1068w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure></div>


<p>Ainsi, chaque Lundi au Vendredi à 12h30 en tant que root, le script stocké sous <strong>/script/SS_015-LINUX_MYSQL_DUMP-BDD/SS_015_E_LINUX_MYSQL_DUMP-BDD.sh</strong> avec l&rsquo;argument <strong>MidDay</strong> viendra générer un dump de la base de données compressée sous l’emplacement de stockage par défaut <strong>/midday/</strong>. Il sera de même à 18h30 mais avec l&rsquo;argument <strong>MidNight</strong>, sous l&#8217;emplacement <strong>/midgnight/</strong>.</p>



<h3 class="wp-block-heading">Configuration des logs</h3>



<p>Si vous avez déjà déployé l&rsquo;un de mes outils, vous devez déjà avoir la configuration de rotation des logs pour le contenu du répertoire /var/log/ERWAN.</p>



<p>Dans le cas contraire, éditez un fichier de rotation.</p>



<pre class="wp-block-code"><code><strong>$ sudo vim /etc/logrotate.d/rone_scripts</strong></code></pre>



<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-d6190da780a32c58f0a216807ba0e2f0"><code>/var/log/ERWAN/SS_015-LINUX_MYSQL_DUMP-BDD.log {
        daily
        rotate 7
        copytruncate
        missingok
        notifempty
}</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="934" height="110" src="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_011_iTop_Script_logrotate.png" alt="" class="wp-image-1823" srcset="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_011_iTop_Script_logrotate.png 934w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_011_iTop_Script_logrotate-300x35.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_011_iTop_Script_logrotate-768x90.png 768w" sizes="auto, (max-width: 934px) 100vw, 934px" /></figure></div>


<h3 class="wp-block-heading">Configuration de la BDD</h3>



<p class="has-text-align-center"><strong>Euh&#8230; Je veux bien que tu parles de backup, de dump, de SQL toussa toussa. Mais qu&rsquo;est ce que vient faire la configuration de la BDD dans cet article ?</strong></p>



<p>Je répondrai à cette question par une question me chuchote mon avocat. </p>



<p class="has-text-align-center"><strong>On lance le dump avec quel compte, le root ?</strong></p>



<p>Effectivement, vu sous cette angle c&rsquo;est moche. Qui peut le plus peut le moins. Mais le risque est de ne pas exposer d&rsquo;avantage notre système et de maitriser autant que faire se peu les utilisateurs et les privilèges qui leurs sont associés.</p>



<p>Alors nous allons créer un compte dédié pour la sauvegarde de nos bases MariaDB/MySQL. (D&rsquo;ailleurs saviez vous que le Dauphin de MySQL est une dédicace à la fille ainée de son fondateur et qu&rsquo;à la suite de son rachat par SUN puis ORACLE, il dédiera l&rsquo;Otarie à sa fille cadette ? Non ? Et bien voilà, nous mourrons moins c*n ce soir).</p>



<pre class="wp-block-code"><code><strong># mysql -u root -p</strong></code></pre>



<pre class="wp-block-code has-theme-palette-8-background-color has-background"><code><strong>&#91;(none)]&gt; CREATE USER `svc.backup`@'localhost' IDENTIFIED BY '5uZ9Bc5KLkIJ0io0Z_Px9';

&#91;(none)]&gt; GRANT LOCK TABLES, SELECT, PROCESS, SHOW VIEW, TRIGGER ON *.* TO '<strong>svc.backup</strong>'@'localhost';</strong>

<strong>&#91;(none)]&gt; FLUSH PRIVILEGES;</strong></code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="941" height="74" src="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_012_iTop_Script_USRSQL_permission-1.png" alt="" class="wp-image-1827" srcset="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_012_iTop_Script_USRSQL_permission-1.png 941w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_012_iTop_Script_USRSQL_permission-1-300x24.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_012_iTop_Script_USRSQL_permission-1-768x60.png 768w" sizes="auto, (max-width: 941px) 100vw, 941px" /></figure>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="941" height="64" src="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_013_iTop_Script_USRSQL_permission.png" alt="" class="wp-image-1828" srcset="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_013_iTop_Script_USRSQL_permission.png 941w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_013_iTop_Script_USRSQL_permission-300x20.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_013_iTop_Script_USRSQL_permission-768x52.png 768w" sizes="auto, (max-width: 941px) 100vw, 941px" /></figure></div>


<p>Dans les grandes lignes, nous créons notre utilisateur SQL (on pense à changer éventuellement le nom du user et le mot de passe), rien de bien compliqué. Ce qui nous intéresse en revanche se sont les permissions que nous attribuons à notre utilisateur :</p>



<ul class="wp-block-list">
<li><strong>LOCK TABLES</strong> : Parce que nous utilisons l&rsquo;argument <em>single-transaction</em> pour la consistance de la BDD</li>



<li><strong>SELECT</strong> : Pour dump les tables</li>



<li><strong>PROCESS</strong> : Dans le cas où nous viendrions à utiliser l&rsquo;argument <em>no-tablespaces</em>. Dans notre cas pratique, inutile mais peut-être pas pour d&rsquo;autres BDDs.</li>



<li><strong>TRIGGER</strong> : Pour dumps les tables TRIGGER de notre BDDs. Comme pour l&rsquo;option ci-dessous, ça serait dommage de ne sauvegarder qu&rsquo;un bout de notre BDD. Ca serait comme faire une soirée raclette mais en ne touchant pas au plateau de charcuterie. Aucun intérêt de faire une soirée raclette/dump. </li>



<li><strong>SHOW VIEW</strong> : Pour sauvegarder la table des VIEWS. Dans notre cas, nous les supprimerons si nous devons réaliser un dump de la BDD iTop. Toutefois, nous voulons <span style="text-decoration: underline;"><em>un backup complet en cas d&rsquo;avarie</em></span>.</li>
</ul>



<p>Allez, fermons notre connexion SQL et passons à l&rsquo;étape suivante. La princesse Peach nous attend, à moins que ce ne soit Peggy du Muppet Show. Je les confonds toutes les deux.</p>



<h3 class="wp-block-heading">Configuration du script</h3>



<p>Il sera nécessaire avant la configuration du script de dédié un disque pour nos dumps (comme indiqué plus haut). L&rsquo;une des grandes questions étant oui mais comment définir l&rsquo;espace de stockage afin de ne pas faire de surallocation de ressources ?</p>



<p>Il est toujours difficile d&rsquo;apporter une réponse empirique à cette question. J&rsquo;ai pour habitude de partir sur la formule suivante :</p>



<p class="has-text-align-center"><strong>DiskSize (Go) = (BDDSize (Go) * AVG Compression Rate * NBRetentionPoints) * 30 %</strong></p>



<p>Par exemple, si nous partons des données suivantes pour un total de deux jobs automatisés par jour sur 5 jours avec un taux de compressions de 46% et que notre BDD fait 2 Go :</p>



<p><strong>DiskSize (Go)</strong> = (2 Go * 0,46 * (2*5)) * 1,3</p>



<p><strong>DiskSize (Go)</strong> = 11,96 Go</p>



<p>Il nous faudrait donc un disque dédié de 12 Go. Nous avons prévu une marge de 30% d&rsquo;espace de stockage afin de ne pas avoir d&rsquo;alerte relative à notre supervision et saturer notre espace disque. Nous n&rsquo;avons ainsi pas la nécessité d&rsquo;étendre tous les deux jours ou quatre matins notre partition.</p>



<p>Attention à l&rsquo;évolution de notre base de données dans le temps. Si cette dernière « gonfle » rapidement, il sera nécessaire d&rsquo;engager les actions adéquates.</p>



<p>Optionnellement, si vous réalisez une sauvegarde de votre machine (ce qui est vivement recommandé) par une solution tierce (VEEAM, HYCU etc) vous aurez votre nombre de point de rétention de sauvegarde en dump plus votre notre de point de rétention max définit dans notre script. Cela nous fait une bonne assurance.</p>



<p>Pour la suite, je considère donc que nous avons monté un disque de 12 Go sous <strong>/mnt/backup/</strong>.</p>



<p>Les droits sur le répertoire /mnt/backup doivent être <strong>700</strong> pour l&rsquo;utilisateur <strong>root:root</strong>. N&rsquo;oublions pas qu&rsquo;en dehors de la sauvegarde, nous avons un autre backup de notre BDD. Il est donc logique de ne faire <strong><span style="text-decoration: underline;">confiance à personne</span></strong> d&rsquo;autre que root.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="545" height="25" src="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_012_iTop_Script_permission.png" alt="" class="wp-image-1824" srcset="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_012_iTop_Script_permission.png 545w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_012_iTop_Script_permission-300x14.png 300w" sizes="auto, (max-width: 545px) 100vw, 545px" /></figure></div>


<p>Editons notre script et modifions les variables suivantes.</p>



<pre class="wp-block-code"><code><strong>$ sudo vim /script/SS_015-LINUX_MYSQL_DUMP-BDD/SS_015_E_LINUX_MYSQL_DUMP-BDD.sh</strong></code></pre>



<ul class="wp-block-list">
<li><strong>_mailTo</strong> : préciser l&rsquo;adresse qui va recevoir les rapports de dump deux fois par jour.</li>



<li><strong>_pathBDDRepository</strong> : préciser le répertoire racine créé précédemment  qui va contenir nos sauvegardes <strong>/mnt/backup</strong>.</li>



<li><strong>_nbRetention</strong> : Le nombre de point que vous avez définit dans notre formule. Vous pouvez l&rsquo;augmenter ce dernier ou le diminuer à votre guise. Tant que l&rsquo;espace de stockage arrive à suivre, pas de problème.</li>



<li><strong>_dbName</strong> : Le nom de la database dont nous voulons réaliser le dump.</li>



<li><strong>_dbUser</strong> : Le compte SQL dédié uniquement à la réalisation des dumps.</li>



<li><strong>_dbPassword</strong> : Le mot de passe du compte SQL ci-haut.</li>
</ul>



<p>Et le reste, pas touche, sauvegarder les modifications.</p>



<p>Bon, plus qu&rsquo;à tester.</p>



<h2 class="wp-block-heading">Test, Let&rsquo;s the Rock of Begins</h2>



<p>Afin de vérifier que tout va bien nous allons exécuter un dump manuellement et simuler l&rsquo;automatisation d&rsquo;un dump.</p>



<pre class="wp-block-code"><code><strong># /script/SS_015-LINUX_MYSQL_DUMP-BDD/SS_015_E_LINUX_MYSQL_DUMP-BDD.sh

#/script/SS_015-LINUX_MYSQL_DUMP-BDD/SS_015_E_LINUX_MYSQL_DUMP-BDD.sh MidNight
</strong></code></pre>



<p>Normalement si nous avons bien fait les choses, nous devrions avoir dans notre console le retour suivant :</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="939" height="321" src="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_014_iTop_Script_tests.png" alt="" class="wp-image-1830" srcset="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_014_iTop_Script_tests.png 939w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_014_iTop_Script_tests-300x103.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_014_iTop_Script_tests-768x263.png 768w" sizes="auto, (max-width: 939px) 100vw, 939px" /></figure></div>


<p>Si nous laissons tourner notre script 24 heures, nous devrions avoir la structure suivante dans notre répertoire <strong>/mnt/backup</strong></p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="442" height="279" src="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_015_iTop_Script_tree.png" alt="" class="wp-image-1831" style="width:277px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_015_iTop_Script_tree.png 442w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_015_iTop_Script_tree-300x189.png 300w" sizes="auto, (max-width: 442px) 100vw, 442px" /></figure></div>


<p>Nous pourrions supprimer un sous répertoire, ce dernier sera recréé lors de la prochaine exécution du script dans le contrôle des prérequis. 🙂</p>



<p>Au début, je voulais joindre en pj le fichier de log. Mais tant que nous n&rsquo;avons pas une grosse BDDs ça passe, après c&rsquo;est plus délicat. Je dois faire des efforts dans ce sens pour mieux gérer la verbosité de mes journaux je crois.</p>



<p>Néanmoins, nous pouvons faire une tour dans le répertoire de log et consulter l&rsquo;ENSEMBLE de toutes les actions réalisées par le script.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="912" height="151" src="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_016_iTop_Script_logContent.png" alt="" class="wp-image-1832" srcset="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_016_iTop_Script_logContent.png 912w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_016_iTop_Script_logContent-300x50.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_016_iTop_Script_logContent-768x127.png 768w" sizes="auto, (max-width: 912px) 100vw, 912px" /></figure></div>


<p>Soit en petit échantillon.</p>



<figure class="wp-block-table aligncenter"><table><tbody><tr><td><img loading="lazy" decoding="async" width="500" height="270" class="wp-image-1833" style="width: 500px;" src="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_017_iTop_Script_logStart.png" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_017_iTop_Script_logStart.png 689w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_017_iTop_Script_logStart-300x162.png 300w" sizes="auto, (max-width: 500px) 100vw, 500px" /></td><td><img loading="lazy" decoding="async" width="500" height="121" class="wp-image-1834" style="width: 500px;" src="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_018_iTop_Script_logEnd.png" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_018_iTop_Script_logEnd.png 935w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_018_iTop_Script_logEnd-300x73.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_018_iTop_Script_logEnd-768x186.png 768w" sizes="auto, (max-width: 500px) 100vw, 500px" /></td></tr></tbody></table></figure>



<p>Et pour terminer, le plus important car nous ne sommes pas en permanence sur notre terminal putty, le petit mail nous informant du bon succès des opérations.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="769" height="362" src="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_019_iTop_Script_notifications.png" alt="" class="wp-image-1835" srcset="https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_019_iTop_Script_notifications.png 769w, https://erwanguillemard.com/wp-content/uploads/2024/03/PP_002_019_iTop_Script_notifications-300x141.png 300w" sizes="auto, (max-width: 769px) 100vw, 769px" /></figure></div>


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



<p>Le code source ? C&rsquo;est par là => <a href="https://github.com/EGuillemard/SS_015-LINUX_MYSQL_DUMP-BDD.git">LIEN</a> (Licence GNU).</p>



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



<p>Il n&rsquo;y a rien de pire que l&rsquo;excès de confiance dans la profession d&rsquo;AdminSys. A la différence des chirurgiens et autres médecins qui sont en dessus des divinités, l&rsquo;AdminSys se voit vite revenir à la réalité. Je pense et s&rsquo;est ce que mes mentors m&rsquo;ont inculqués, peu importe la tâche nous devons être en permanence vigilant.</p>



<p>C&rsquo;est avec ce genre de situation que nous prenons pleinement conscience des manquements sur nos systèmes d&rsquo;informations et qu&rsquo;il est nécessaire de trouver des solutions palliatives, payantes ou homemade (bancales la plus part du temps mais qui font ce que nous attendons).</p>



<p>Dans mon cas et pour revenir à la situation initiale, je pense avoir répondu à ma problématique d&rsquo;indisponibilité des données entre deux points de sauvegarde (24h). Mais c&rsquo;est encore loin d&rsquo;être parfait. La solution est générique certes, mais elle pourrait tellement être optimisée, factorisée et simplifiée.</p>



<p>Pourtant nous ne sommes pas allés au bout de ce projet. Et j&rsquo;avoue que j&rsquo;étais partagé pour aborder ce point. Je traiterai ce dernier dans un autre billet. Mais ce que nous devons garder à l&rsquo;esprit c&rsquo;est que nous avons un dump de notre base de données SQL (que ce soit, ITOP, ZABBIX ou autres applications), <em><strong>qu&rsquo;est ce qui nous dit que le contenu de notre dump est intègre et fiable ?</strong></em> Il faudrait réimporter ce dernier dans un environnement de test et recetter le dump. Ainsi la boucle serait bouclée et nous validerions notre processus de reprise de données à partir d&rsquo;un dump de bout en bout. Cela viendra s&rsquo;inscrire dans le PAS<sup data-fn="59d94d9c-a390-4bdb-a952-00265825e3f6" class="fn"><a href="#59d94d9c-a390-4bdb-a952-00265825e3f6" id="59d94d9c-a390-4bdb-a952-00265825e3f6-link">11</a></sup> de notre application, organisation.</p>



<p>Le mot de la fin :</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>Il était une petite requête, pirouette cacahouète. Il était une petite requête qui a fait une grosse boulette. </em></p>



<p><em>Pirouette, pas de caouhète. Vous passez en week end studieux sans apéro&#8230;</em></p>
<cite>Erwan GUILLEMARD</cite></blockquote>



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



<ul class="wp-block-list">
<li><a href="https://www.man-linux-magique.net/man1/find.html">FIND</a></li>



<li><a href="https://man.cx/gzip(1)/fr">GZIP</a></li>



<li><a href="https://www.itophub.io/wiki/page?id=latest:admin:backup">ITOP &#8211; DataBackup (v3.X)</a></li>



<li><a href="https://www.itophub.io/wiki/page?id=2_7_0:admin:backup">ITOP &#8211; DataBackup (v2.7.X)</a></li>



<li><a href="https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html#option_mysqldump_master-data">MYSQLDUMP &#8211; master-data</a></li>



<li><a href="https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html#option_mysqldump_quick">MYSQLDUMP &#8211; quick</a></li>



<li><a href="https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html#option_mysqldump_single-transaction">MYSQLDUMP &#8211; single-transaction</a></li>



<li><a href="https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html">MYSQLDUMP &#8211; minimum privileges</a></li>



<li><a href="https://man7.org/linux/man-pages/man1/tee.1.html">TEE</a></li>
</ul>


<ol class="wp-block-footnotes"><li id="4f016091-caee-4b8c-a7e6-1b261affbaf7">ITSM : Information Technology Service Management <a href="#4f016091-caee-4b8c-a7e6-1b261affbaf7-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="8379ab85-9658-4c5e-9828-433f56ea0c75">SQL : Structured Query Language <a href="#8379ab85-9658-4c5e-9828-433f56ea0c75-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="5263c9bd-049e-413f-971a-20c0ee6c7e4b">OQL : Object Query Language  <a href="#5263c9bd-049e-413f-971a-20c0ee6c7e4b-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="0895739d-0898-404b-9759-53df65cec194">WEBUI : WEB User Interface <a href="#0895739d-0898-404b-9759-53df65cec194-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="ae4627e1-e11b-4cec-8fa2-b37da3573deb">SLA : Service Level Agreement  <a href="#ae4627e1-e11b-4cec-8fa2-b37da3573deb-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="45db95fc-7d07-48d2-b8d8-be79e04986d3">OLA : Operational Level Agreement <a href="#45db95fc-7d07-48d2-b8d8-be79e04986d3-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="4ba39691-0448-4c1f-bdc1-f2e4dfe0a212">SLR : Service Level Requirement <a href="#4ba39691-0448-4c1f-bdc1-f2e4dfe0a212-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="12964d76-0031-4d00-b74e-5bcf426f014a">REX : Retour d&rsquo;EXpérience  <a href="#12964d76-0031-4d00-b74e-5bcf426f014a-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="9f7e3b86-4a8f-40b7-ac86-170c2e700ec4">RTO : Recovery Time Objective (différent du RPO Recovey Point Objective) <a href="#9f7e3b86-4a8f-40b7-ac86-170c2e700ec4-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="d0d50e59-dc19-4682-b0aa-391d08d39353">I/O : Input / Output <a href="#d0d50e59-dc19-4682-b0aa-391d08d39353-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li><li id="59d94d9c-a390-4bdb-a952-00265825e3f6">PAS : Plan d&rsquo;Assurance Sécurité <a href="#59d94d9c-a390-4bdb-a952-00265825e3f6-link" aria-label="Aller à la note de bas de page 11">↩︎</a></li></ol>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Apps &#8211; iTOP</title>
		<link>https://erwanguillemard.com/apps-itop/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Mon, 26 Feb 2024 21:56:00 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[iTop]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=1514</guid>

					<description><![CDATA[Comme je vous l&#8217;ai sûrement déjà dit ou si vous l&#8217;avez déjà lu, j&#8217;ai dans mon expérience personnelle et professionnelle été confronté au monde du service. Qui dit service dit prestation de service et donc retour sur cette prestation. Il existe la norme ISO 9001 visant à mettre en place un système de management de...]]></description>
										<content:encoded><![CDATA[
<p>Comme je vous l&rsquo;ai sûrement déjà dit ou si vous l&rsquo;avez déjà lu, j&rsquo;ai dans mon expérience personnelle et professionnelle été confronté au monde du service. Qui dit service dit prestation de service et donc retour sur cette prestation.</p>



<p>Il existe la norme ISO 9001 visant à mettre en place un système de management de la qualité dans l&rsquo;objectif de mesurer et d&rsquo;améliorer en continu la satisfaction des utilisateurs. L&rsquo;inconvénient d&rsquo;une norme est que cette dernière doit être renouvelée tous les trois ans et nécessite de passer par un audit externe pour être de nouveau recertifié. Pour obtenir la certification, il est nécessaire d&#8217;embrasser la norme dans sa totalité et ce même si seulement un toute petite partie vous intéresse ou vous concerne.</p>



<p>En comparaison il existe ITIL<sup data-fn="f02f5e11-1355-47bd-b6a4-f8e82f9f3efd" class="fn"><a href="#f02f5e11-1355-47bd-b6a4-f8e82f9f3efd" id="f02f5e11-1355-47bd-b6a4-f8e82f9f3efd-link">1</a></sup>. ITIL est presque comparable à la norme ISO 9001. Toutefois, il s&rsquo;agit d&rsquo;un ensemble de bonne pratiques et est adapté pour le management des systèmes d&rsquo;information. Nous retrouvons la notions de KPI<sup data-fn="dd365f01-8023-4ab0-8adf-08df37553e0c" class="fn"><a href="#dd365f01-8023-4ab0-8adf-08df37553e0c" id="dd365f01-8023-4ab0-8adf-08df37553e0c-link">2</a></sup>, de niveau d&rsquo;engagement, de qualité de service etc. Etant un ensemble de bonne pratique il est donc possible contrairement à la norme ISO 9001 de sélectionner se qui est indispensable pour l&rsquo;activité de notre organisation.</p>



<p>Niveau certification cette dernière est portée par les hommes et non par la société sans échéance de validité. Il existe plusieurs niveau de certification.</p>



<p>Si je vous parle de ces deux notions, c&rsquo;est que je souhaiterai vous présenter une solution opensource ITSM<sup data-fn="14f79a55-a8d6-4fad-a22d-1e08bd9e0eb5" class="fn"><a href="#14f79a55-a8d6-4fad-a22d-1e08bd9e0eb5" id="14f79a55-a8d6-4fad-a22d-1e08bd9e0eb5-link">3</a></sup> (construit sur l&rsquo;une des bases ITIL), incluant une CMDB<sup data-fn="2bc69c95-011a-40c2-9608-bd8bacd9a470" class="fn"><a href="#2bc69c95-011a-40c2-9608-bd8bacd9a470" id="2bc69c95-011a-40c2-9608-bd8bacd9a470-link">4</a></sup>. Je vous parle d&rsquo;<a href="https://www.combodo.com/itop">ITOP</a>, de Combodo.</p>



<p>J&rsquo;ai rencontré cette solution en 2014 lorsque j&rsquo;étais un jeune « <a href="https://fr.wikipedia.org/wiki/Le_Trou_du_Cru">trou du cru</a> » sur le marché du travail. Cette solution était utilisée par la société pour gérer au quotidien le parc informatique, les requêtes utilisateurs, les enquêtes de satisfaction et à l&rsquo;époque le MCO<sup data-fn="dce48f25-075f-413b-b5aa-4561853c7358" class="fn"><a href="#dce48f25-075f-413b-b5aa-4561853c7358" id="dce48f25-075f-413b-b5aa-4561853c7358-link">5</a></sup> afin d&rsquo;être pro-actif afin d&rsquo;éviter de potentiel incident d&rsquo;infrastructure.</p>



<p>Bref, cette solution me permet de garder un peu la forme côté GNU, en pratiquant mon bash et me remettant en cause en permanence quant à la sécurité et la bonne gestion des systèmes LINUX. Mais également comme cette solution gère les tickets de créer des passerelles entre des applications tierces (SPOILER, ça sera dans d&rsquo;autres articles).</p>



<p>Dans cette article, je souhaite partager avec vous mon retour d&rsquo;expérience sur le déploiement d&rsquo;ITOP (<strong>Community</strong> ce qui entre nous ne change rien de la version <strong>Essential</strong> ou <strong>Entreprise</strong> pour ce que fait sur mon temps libre) sur une architecture 2-Tiers durcie.</p>



<p>Point important, j&rsquo;ai pour habitude de ne travailler qu&rsquo;avec des versions LTS<sup data-fn="d81d1196-4c1d-4afc-aad3-74165b96adfa" class="fn"><a href="#d81d1196-4c1d-4afc-aad3-74165b96adfa" id="d81d1196-4c1d-4afc-aad3-74165b96adfa-link">6</a></sup> et non STS<sup data-fn="02ed2d88-6eed-4178-a3fc-45b137cd3c39" class="fn"><a href="#02ed2d88-6eed-4178-a3fc-45b137cd3c39" id="02ed2d88-6eed-4178-a3fc-45b137cd3c39-link">7</a></sup> (ça c&rsquo;est juste pour le fun). Donc à ce jour, la dernière version LTS et la 2.7. C&rsquo;est cette version que je déplorerai.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="661" src="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_002_topologie-1024x661.png" alt="" class="wp-image-1518" srcset="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_002_topologie-1024x661.png 1024w, https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_002_topologie-300x194.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_002_topologie-768x496.png 768w, https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_002_topologie.png 1087w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Le schéma topologique ci dessus représente l&rsquo;infrastructure que nous allons mettre en place. Ce schéma sera amené à évoluer en vu des projets à venir.</p>



<p>Dans la logique, il devrait y avoir publication. Malheureusement, mon lab à domicile, possède certaines contraintes :</p>



<ul class="wp-block-list">
<li>Absence de Firewall</li>



<li>Absence de hyperviseur ayant suffisamment de ressource pour faire tourner l&rsquo;ensemble de mon lab</li>



<li>Absence d&rsquo;IP Public fixe</li>



<li>Absence d&rsquo;équipement physique ou virtuelle pour réaliser de la micro segmentation (nous ferrons à l&rsquo;ancienne).</li>



<li>Faible débit, 100 Mbits/s. Blague mise à part, il n&rsquo;y a pas si longtemps j&rsquo;avais une ADSL 10Mbits/s. Donc pas si faible que ça. 🙂</li>
</ul>



<p>Ce n&rsquo;est pas grave, chaque chose en son temps. La publication n&rsquo;est pas le point le plus ardu du déploiement.</p>





<h2 class="wp-block-heading">Prérequis</h2>



<ul class="wp-block-list">
<li><strong>SE :</strong>&nbsp;RHEL</li>



<li><strong>Apps :</strong>&nbsp;ITOP, APACHE, MariaDB</li>



<li><strong>Autres :</strong>&nbsp;<a href="https://erwanguillemard.com/?p=1419">LINUX &#8211; Durcissement GNU, Recommandation ANSSI</a>, <a href="https://www.itophub.io/wiki/page?id=2_7_0:install:start">ITOP (documentation)</a></li>
</ul>



<h2 class="wp-block-heading">Installation et Durcissement du SE</h2>



<p>Concernant cette partie, je vous invite à parcourir la section déjà documentée dans l&rsquo;article <a href="https://erwanguillemard.com/apps-mutt/" data-type="link" data-id="https://erwanguillemard.com/apps-mutt/"></a><a href="https://erwanguillemard.com/?p=1419">LINUX &#8211; Durcissement GNU, Recommandation ANSSI </a>.</p>



<p>Je pars du principe que le durcissement a été réalisé. Si ce n&rsquo;est pas le cas, vous pouvez suivre directement la documentation de l&rsquo;éditeur pour le déploiement.</p>



<figure class="wp-block-table"><table class="has-background" style="background-color:#faf02a"><tbody><tr><td><strong>/!\Attention :</strong> Il est fort probable suivant votre durcissement que vous rencontriez des erreurs que je n&rsquo;aurai pas et inversement. Ainsi il est possible, que les points bloquants que je vais rencontrer ne soient pas présent de votre côté. M&rsquo;enfin, <a href="https://www.youtube.com/watch?v=u7j8gf1WQRQ&amp;ab_channel=C%27KDO">This is the law !</a> </td></tr></tbody></table></figure>



<p>Concernant les recommandations matérielles (physiques ou virtuelles), vous retrouverez les préconisations ci-dessous de l&rsquo;éditeur</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="560" height="484" src="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_002.1_preco.png" alt="" class="wp-image-1536" srcset="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_002.1_preco.png 560w, https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_002.1_preco-300x259.png 300w" sizes="auto, (max-width: 560px) 100vw, 560px" /></figure></div>


<p>Pour ce qui est des préconisations des composants et dépendantes logicielles</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="548" height="148" src="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_002.2_preco.png" alt="" class="wp-image-1537" srcset="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_002.2_preco.png 548w, https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_002.2_preco-300x81.png 300w" sizes="auto, (max-width: 548px) 100vw, 548px" /></figure></div>


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



<p>Je recommande toujours dans le cadre des serveurs de base de données de dédié un disque pour le SGBD<sup data-fn="e6efb11d-fc1c-4be3-9262-6564bec42116" class="fn"><a href="#e6efb11d-fc1c-4be3-9262-6564bec42116" id="e6efb11d-fc1c-4be3-9262-6564bec42116-link">8</a></sup> et un disque pour réaliser les dumps de ou des bases de données.</p>



<p>Dans notre cas, nous allouerons un disque de 20Go pour le SGBD et un disque de 20 Go pour nos dumps.</p>



<p>Dans le respect des bonnes pratiques GNU, je crée deux répertoires sous <strong>/mnt</strong></p>



<ul class="wp-block-list">
<li>databases</li>



<li>dump</li>
</ul>



<pre class="wp-block-code"><code><strong>$ sudo mkdir /mnt/databases
$ sudo mkdir /mnt/dump</strong></code></pre>



<p>Il est nécessaire d&rsquo;avoir préalablement créé les partitions et monté ces dernières en xfs. </p>



<p><strong>Pardon, M&rsquo;sieur, mais moi je débute avec Linux. Vous pouvez me dire comment qu&rsquo;on fait, c&rsquo;est pas plug and play ?</strong> <a href="https://www.youtube.com/watch?v=DQkGey_-W8c&amp;ab_channel=YanYannoche">On m&rsquo;appelle le chevalier blanc, je vais et je vole au secours d&rsquo;innocent&#8230;</a>. Bref c&rsquo;est un basique, mais n&rsquo;avons nous pas tous commencé par là ? Je vous invite à parcourir la section déjà documentée dans l&rsquo;article <a href="https://erwanguillemard.com/apps-mutt/" data-type="link" data-id="https://erwanguillemard.com/apps-mutt/"></a><a href="https://erwanguillemard.com/?p=1572">LINUX &#8211; Disk &amp; Part</a>.</p>



<h3 class="wp-block-heading">Mariadb &#8211; Installation</h3>



<p>Si vous êtes sur un environnement durci, avant de lancer les installations il y a quelques choses à faire, sinon vous allez être marron 🙂</p>



<p>Il est nécessaire dans le cas de notre version d&rsquo;ITOP de déployer la version 10.6 de MariaDB. Toutefois, j&rsquo;ai décidé pour des raisons pratique de faire un article dédié sur l&rsquo;installation, configuration et sécurisation du serveur MariaDB. Je vous invite à vous référer à ce dernier dans l&rsquo;article <a href="https://erwanguillemard.com/?p=1580">Apps &#8211; MariaDB</a>.</p>



<h3 class="wp-block-heading">iTOP &#8211; Configuration</h3>



<p>L&rsquo;installation, configuration et sécurisation étant terminée, nous allons enfin aborder le sujet ITOP côté BDD.</p>



<p>Il est à noter que nous pouvons sécuriser d&rsquo;avantage ITOP en implémentant la couche SSL entre notre serveur web (front) et notre serveur BDD (back). Nous aborderons dans une section singulière cette fonctionnalité optionnelle.</p>



<p>Les opérations SQL se déclinent en cinq mouvement comme une <a href="https://www.youtube.com/watch?v=5HgqPpjIH5c&amp;ab_channel=FranceMusiqueconcerts">symphonie fantastique</a>.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id1514_ea03dc-73 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-pane1514_ad3309-e1"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title">Création de l&rsquo;utilisateur</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>Créer un utilisateur en prenant bien soin d&rsquo;indiquer son nom, le subnet et son mot de passe.</p>



<pre class="wp-block-code"><code><strong>&gt; CREATE USER `itop_rone`@'192.168.13.0/255.255.255.0' IDENTIFIED BY 'fnd4D6CTFy3ykjq29AgB';</strong></code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="938" height="69" src="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_021_mariadb_itop_user-1.png" alt="" class="wp-image-1557" srcset="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_021_mariadb_itop_user-1.png 938w, https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_021_mariadb_itop_user-1-300x22.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_021_mariadb_itop_user-1-768x56.png 768w" sizes="auto, (max-width: 938px) 100vw, 938px" /></figure>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane1514_2bffe6-b6"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title">Création de la base de données</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">
<pre class="wp-block-code"><code><strong>&gt; CREATE DATABASE `itop_rone_db`;</strong></code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="938" height="43" src="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_022_mariadb_itop_db-1.png" alt="" class="wp-image-1558" srcset="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_022_mariadb_itop_db-1.png 938w, https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_022_mariadb_itop_db-1-300x14.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_022_mariadb_itop_db-1-768x35.png 768w" sizes="auto, (max-width: 938px) 100vw, 938px" /></figure>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane1514_84de10-61"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title">Sélection de la base de données</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">
<pre class="wp-block-code"><code><strong>&gt; USE 'itop_rone_db';</strong></code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="936" height="70" src="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_023_mariadb_itop_use-1.png" alt="" class="wp-image-1559" srcset="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_023_mariadb_itop_use-1.png 936w, https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_023_mariadb_itop_use-1-300x22.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_023_mariadb_itop_use-1-768x57.png 768w" sizes="auto, (max-width: 936px) 100vw, 936px" /></figure>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane1514_822dce-7f"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title">Attribution des droits</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">
<pre class="wp-block-code"><code><strong>&gt; GRANT USAGE ON *.* TO 'itop_rone'@'192.168.13.0/255.255.255.0' IDENTIFIED BY 'fnd4D6CTFy3ykjq29AgB';</strong></code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="938" height="70" src="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_024_mariadb_itop_usage-1.png" alt="" class="wp-image-1560" srcset="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_024_mariadb_itop_usage-1.png 938w, https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_024_mariadb_itop_usage-1-300x22.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_024_mariadb_itop_usage-1-768x57.png 768w" sizes="auto, (max-width: 938px) 100vw, 938px" /></figure>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-5 kt-pane1514_574358-29"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title">Attribution des privilèges</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">
<pre class="wp-block-code"><code><strong>&gt; GRANT ALL PRIVILEGES ON `itop_rone_db`.* TO 'itop_rone'@'192.168.13.0/255.255.255.0';</strong></code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="938" height="63" src="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_025_mariadb_itop_privilege.png" alt="" class="wp-image-1552" srcset="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_025_mariadb_itop_privilege.png 938w, https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_025_mariadb_itop_privilege-300x20.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_025_mariadb_itop_privilege-768x52.png 768w" sizes="auto, (max-width: 938px) 100vw, 938px" /></figure>
</div></div></div>
</div></div></div>



<p>Nous pouvons quitter la console SQL. La configuration d&rsquo;ITOP est terminée pour la partie BDD. Pour le reste, il faudra attendre la configuration du front end et le lancement de la toute première instance de wizard ITOP.</p>



<p>N&rsquo;oubliez pas également que le port SQL doit être ouvert sans quoi votre server refusera les flux entrant sur le port 3306/tcp.</p>



<pre class="wp-block-code"><code><strong>$ sudo firewall-cmd --permanent --add-port=3306/tcp
$ sudo firewall-cmd --reload</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="879" height="41" src="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_036_firewalld_3306.png" alt="" class="wp-image-1591" srcset="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_036_firewalld_3306.png 879w, https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_036_firewalld_3306-300x14.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_036_firewalld_3306-768x36.png 768w" sizes="auto, (max-width: 879px) 100vw, 879px" /></figure></div>


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



<h3 class="wp-block-heading">Installation des Dépendances</h3>



<p>Si vous êtes sur un environnement durci, avant de lancer les installations il y a quelques choses à faire, sinon vous allez être marron 🙂</p>



<p>Nous allons attaquer l&rsquo;installation de la partie web. Toujours en adéquation avec les prérequis logiciels pour la version 2.7.9. Avant toutes choses, mettons à jour notre système.</p>



<pre class="wp-block-code"><code><strong># dnf update</strong></code></pre>



<p>Et nous voila emmerdés. Notre gestionnaire de paquet connait bien les paquets php que nous souhaitons mais dans leurs dernière version <strong>8.X</strong>. Sauf que nous voulons la version<strong> 7.4</strong>&#8230; Chaque problème, sa solution.</p>



<p>Nous allons ajouter le repo <strong>Remi</strong> à notre système fournit par Fedora. Si nous nous rappelons l&rsquo;un des point de recommandation de l&rsquo;ANSSI, sommes nous à 100% sure de ce repo ? La réponse est oui. Ce repo est gérée par une communauté Fedora pour la gestion des paquets PHP en version 7 et 8. Fedora étant un système RHEL nous sommes donc compatible. Néanmoins il est important de noter qu&rsquo;il viendra prendre l&rsquo;ascendant sur les paquets <strong>PHP</strong> fournit par le système.</p>



<p>Ajouter le repo Remi.</p>



<pre class="wp-block-code"><code><strong># dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="939" height="881" src="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_026_php_remi_install.png" alt="" class="wp-image-1564" srcset="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_026_php_remi_install.png 939w, https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_026_php_remi_install-300x281.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_026_php_remi_install-768x721.png 768w" sizes="auto, (max-width: 939px) 100vw, 939px" /></figure></div>


<p>Regardons les versions disponibles de php et celles disponibles et actifs sur notre SE</p>



<pre class="wp-block-code"><code><strong># dnf module list php</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="937" height="315" src="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_026_php_remi_list_version.png" alt="" class="wp-image-1565" srcset="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_026_php_remi_list_version.png 937w, https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_026_php_remi_list_version-300x101.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_026_php_remi_list_version-768x258.png 768w" sizes="auto, (max-width: 937px) 100vw, 937px" /></figure></div>


<p>Le retour est explicit, la version qui fait foi est la version 8.1 du repo system (AppStream). Installons donc en lieu et place la version qui nous intéresse, la 7.4.</p>



<pre class="wp-block-code"><code><strong># dnf module install php:remi-7.4</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="936" height="677" src="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_028_php_remi_install_7.4.png" alt="" class="wp-image-1566" srcset="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_028_php_remi_install_7.4.png 936w, https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_028_php_remi_install_7.4-300x217.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_028_php_remi_install_7.4-768x555.png 768w" sizes="auto, (max-width: 936px) 100vw, 936px" /></figure></div>


<p>Installons les dépendances nécessaires en prenant garde à la version des modules php que nous allons installer afin que ces derniers sont bien dans la version attendu. Sinon c&rsquo;est un peu con.</p>



<pre class="wp-block-code"><code><strong># dnf install php php-zip php-mysqlnd php-mcrypt php-xml php-cli php-soap php-ldap php-gd mod_ssl graphviz php-pear-Net-Socket php-imap</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="939" height="479" src="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_029_php_module_7.4.png" alt="" class="wp-image-1567" srcset="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_029_php_module_7.4.png 939w, https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_029_php_module_7.4-300x153.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_029_php_module_7.4-768x392.png 768w" sizes="auto, (max-width: 939px) 100vw, 939px" /></figure></div>


<p>Ajoutons le daemon httpd comme service à lancer automatiquement au démarrage (sinon c&rsquo;est con va falloir le faire manuellement si la bécane va reboot comme pour la SGBD).</p>



<pre class="wp-block-code"><code><strong>$ sudo systemctl enable httpd</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="939" height="66" src="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_030_httpd_enable.png" alt="" class="wp-image-1568" srcset="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_030_httpd_enable.png 939w, https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_030_httpd_enable-300x21.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_030_httpd_enable-768x54.png 768w" sizes="auto, (max-width: 939px) 100vw, 939px" /></figure></div>


<p>Ajouter les règles de firewall pour ouvrir les ports 80/tcp et 443/tcp.</p>



<pre class="wp-block-code"><code><strong>$ sudo firewall-cmd --permanent --add-port=443/tcp
$ sudo firewall-cmd --permanent --add-port=80/tcp
$ sudo firewall-cmd --reload</strong></code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="820" height="212" src="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_036_firewalld_80-443.png" alt="" class="wp-image-1570" srcset="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_036_firewalld_80-443.png 820w, https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_036_firewalld_80-443-300x78.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_036_firewalld_80-443-768x199.png 768w" sizes="auto, (max-width: 820px) 100vw, 820px" /></figure>



<p>Créons sous <strong>/var/www/html/</strong> le répertoire qui va contenir l&rsquo;ensemble des ressources ITOP. Le nom est libre (mais nous allons tacher d&rsquo;être cohérent), attention toutefois de garder ce dernier de côté car le path sera utilisé dans le fichier de configuration ci-bas. Nous reviendrons quelques lignes plus bas sur l&rsquo;installation.</p>



<pre class="wp-block-code"><code><strong>$ sudo mkdir /var/www/html/portail.erwanguillemard.com</strong></code></pre>



<p>C&rsquo;est presque terminée. Il ne nous reste plus qu&rsquo;a déployer ITOP. Toutefois il nous reste à configurer notre serveur Apache et sécuriser ce dernier.</p>



<h3 class="wp-block-heading">Apache &#8211; Configuration</h3>



<p>La configuration est nécessaire pour publier et accéder à notre serveur web.</p>



<p>Intrinsèquement, va se jouer la sécurisation du serveur WEB à travers les aspects tels que la redirection de port <strong>http</strong> vers <strong>https</strong>, la mise en place d&rsquo;un certificat, prévention de man in the middle, ect.</p>



<p>Pour le coup, le travail est déjà fait par l&rsquo;éditeur. Et ça nous n&rsquo;allons pas nous plaindre ! Pour un fois,  c&rsquo;est plaisant d&rsquo;avoir un éditeur de solution applicative qui ne laisse pas ces utilisateurs sans directives précises. Je trouve également que cela marque considérablement l&rsquo;implication de COMBODO vis à vis de ces utilisateurs, de sa communauté et de l&rsquo;importance des données qui pourraient être contenu dans la, les bases de données ITOP. <a href="https://www.itophub.io/wiki/page?id=2_7_0:install:security">Lien</a></p>



<p>Editer un nouveau fichier sous <strong>/etc/httpd/conf.d/</strong> pour rester cohérent, il est de bonne pratique de donner en nom de fichier le sous-domaine (quand il y en a un) suivi du nom de domaine et de l&rsquo;extension avec l&rsquo;extension conf. Ainsi, dans le cas de modification de la configuration le risque d&rsquo;erreur de fichier est restreint (du moins normalement).</p>



<pre class="wp-block-code"><code><strong>$ sudo vim /etc/httpd/conf.d/portail.erwanguillemard.com.conf</strong></code></pre>



<p>Editez le fichier comme ci-dessous, bien que je ne suis pas familier des configurations WEB (désolé, un traumatisme durant mes études&#8230;) je vais expliquer autant que faire se peux ma configuration. Toutefois et comme énoncé précédemment, c&rsquo;est à vous d&rsquo;adapter les valeurs (nom et chemin hein).</p>



<p class="has-text-align-center"><img loading="lazy" decoding="async" width="1000" height="481" class="wp-image-1620" style="" src="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_060_httpd.png" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_060_httpd.png 1000w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_060_httpd-300x144.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_060_httpd-768x369.png 768w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></p>



<ul class="wp-block-list">
<li><strong>&lt;IfModule mod_ssl.c&gt;</strong> : Vérifie que le module est bien présent, sans quoi la configuration qui suit ne sera pas appliquée. Normalement, le module est présent de base dans le package d&rsquo;installation par défaut de httpd.</li>



<li><strong>&lt;VirtualHost *:443&gt;</strong> : Indique que notre serveur écoute sur toutes les IPs uniquement sur le port 443</li>



<li><strong>SSLEngine on</strong> : Précise que nous allons utiliser du chiffrement SSL</li>



<li><strong>SSLCertificateFile</strong> : Indique le fichier .crt ou .csr qui va servir au chiffrement des requêtes HTTP</li>



<li><strong>SSLCertificateKeyFile</strong> : Indique le fichier .key qui va servir à déchiffrer les requêtes HTTPS</li>



<li><strong>SSLCertificateChainFile</strong> : Permet de retourner la chaîne de certification lors des connexions HTTPS. Commentée dans mon cas car je n&rsquo;ai pas de certificat et passe donc par un autosigné</li>
</ul>



<figure class="wp-block-table"><table class="has-background" style="background-color:#faf02a"><tbody><tr><td><strong>/!\ Attention</strong> : Concernant ces trois lignes, je vous recommande si vous n&rsquo;êtes pas à l&rsquo;aise avec la génération de certificat ou manipulation d&rsquo;openssl de suivre l&rsquo;article <a href="https://erwanguillemard.com/?p=1616">LINUX &#8211; Certificats</a>.</td></tr></tbody></table></figure>



<ul class="wp-block-list">
<li><strong>ServerName</strong> : Le nom qui sera utilisé par le virtualhost pour que le serveur puisse s&rsquo;authentifier</li>



<li><strong>DocumentRoot</strong> : L&#8217;emplacement de notre site web</li>



<li><strong>&lt;Directory <em>Path</em>&gt;</strong> : Définit les options et paramètres pour le site dont nous avons spécifié le chemin</li>



<li><strong>Options -Indexes -FollowSymplinks</strong> : Autorise l&rsquo;indexation des répertoires ainsi que l&rsquo;exécution des liens symboliques contenu dans ce dernier</li>



<li><strong>AllowOverride All</strong> : Prend en compte les directives présents dans le fichier .htaccess</li>



<li><strong>Order allow, deny</strong> : Définit l&rsquo;ordre de traitement des règles. Ici les règles seront acceptées avant les règles refusées répond favorablement aux règles et se vera alors autorisé l&rsquo;accès.</li>



<li><strong>Allow from all</strong> : Autorise l&rsquo;accès sans restriction</li>
</ul>



<p>Dans l&rsquo;état, notre fichier de configuration est correct. Nous sommes donc pret à publier notre appliance si les sources étaient présent dans notre répertoire.</p>



<p>Néanmoins, il manque deux points cruciaux. Le premier est comme toujours dans notre environnement durci la configuration du SELinux. Le second point, comme évoqué plus tôt concerne la sécurisation de notre instance ITOP à travers les recommandations de l&rsquo;éditeur quand aux daemon apache ainsi que le moteur php. </p>



<p>Bien, reprenons donc là où nous en étions.</p>



<p>Le SELinux étant actif, il va être nécessaire d&rsquo;autoriser notre bon vieux démon apache à joindre le réseau, les bdds à travers le réseau et de définit les contextes d&rsquo;exécution.</p>



<pre class="wp-block-code"><code><strong>$ sudo setsebool -P httpd_enable_homedirs on
$ sudo setsebool -P httpd_can_network_connect_db 1
$ sudo setsebool -P httpd_can_network_connect on
$ sudo chcon -R -t httpd_sys_rw_content_t /var/www/html/portail.erwanguillemard.com</strong></code></pre>



<h3 class="wp-block-heading">Apache &amp; PHP &#8211; Sécurisation</h3>



<p>De mon point de vu personnel ce point bien que facultatif est à implémenter. Jusqu&rsquo;à présent je ne m&rsquo;étais jamais penché sur le sujet. Le web m&rsquo;aillant traumatisé, tant que c&rsquo;est fonctionnel ça m&rsquo;allait très bien. De nos jours, nous ne pouvons pas nous permettre de faire l&rsquo;impasse sur la sécurité et comme nous avons déjà les recommandations et préconisations de l&rsquo;éditeur, pourquoi se priver ?</p>



<p>Je ne compte pas reprendre en détails toutes les recommandations, les instructions sur le site officiel (rappel du <a href="https://www.itophub.io/wiki/page?id=2_7_0:install:security">lien</a>) sont plus qu&rsquo;explicites.</p>



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



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id1514_ffb9e0-e7 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-pane1514_1cddbe-a9"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>1 &#8211; HTTPS tu utiliseras</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>L&rsquo;explication de pourquoi utiliser le protocole HTTPS et non pas HTTP est je pense acquis par tout le monde. Il relève d&rsquo;une évidence.</p>



<p>Afin de se prémunir de l&rsquo;usage du protocole HTTP, j&rsquo;aime à faire une redirection. Dans notre fichier de configuration sous <strong>/etc/httpd/conf.d/</strong> ajouter les lignes suivantes au début du fichier avant <strong>&lt;IfModule mod_ssl.c&gt;</strong></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="726" height="86" src="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_061_http-redirect.png" alt="" class="wp-image-1622" srcset="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_061_http-redirect.png 726w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_061_http-redirect-300x36.png 300w" sizes="auto, (max-width: 726px) 100vw, 726px" /></figure></div>


<p>COMBODO préconise d&rsquo;utiliser l&rsquo;argument Strict-Transport-Security en indiquant l&rsquo;age d&rsquo;expiration et le périmètre d&rsquo;application.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="937" height="47" src="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_062_http-forced-1.png" alt="" class="wp-image-1624" srcset="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_062_http-forced-1.png 937w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_062_http-forced-1-300x15.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_062_http-forced-1-768x39.png 768w" sizes="auto, (max-width: 937px) 100vw, 937px" /></figure></div></div></div></div>
</div></div></div>



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



<p>Comme résumé par COMBODO, par défaut, le moteur PHP à un certains nombre de paramètres qui peuvent (doivent ?) être durci. L&rsquo;ensemble des modifications seront à réaliser dans le fichier <strong>/etc/php.ini</strong></p>



<pre class="wp-block-code"><code><strong>$ sudo vim /etc/php.ini</strong></code></pre>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id1514_f0ca3a-bc 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-pane1514_8b5867-5c"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>1 &#8211; Prévenir l&rsquo;injection de code JS pour sniffer les sessions</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>Perso, la seul chose que j&rsquo;ai sniffé de ma vie c&rsquo;est du poivre et j&rsquo;étais gamin. Blague à part, il est nécessaire d&rsquo;activer le paramètre <strong>session.cookie_httponly</strong>.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="804" height="91" src="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_056_php_cookie.png" alt="" class="wp-image-1625" srcset="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_056_php_cookie.png 804w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_056_php_cookie-300x34.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_056_php_cookie-768x87.png 768w" sizes="auto, (max-width: 804px) 100vw, 804px" /></figure></div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane1514_fb0739-c8"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>2 &#8211; T&rsquo;envoi que si c&rsquo;est sécure !</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>Comme précisé sur le site officiel, ce point n&rsquo;est applicable que si nous utilisons le protocole HTTPS. Je ne reviens pas sur cette évidence ? La mesure vise à envoyer les cookies et à ne fonctionner que si les connexions sont chiffrées. Activer le paramètre <strong>session.cookie_secure</strong>.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="870" height="65" src="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_057_php_cookie.secure.png" alt="" class="wp-image-1626" srcset="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_057_php_cookie.secure.png 870w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_057_php_cookie.secure-300x22.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_057_php_cookie.secure-768x57.png 768w" sizes="auto, (max-width: 870px) 100vw, 870px" /></figure></div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane1514_9c61c1-58"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>3 &#8211; Il fait bon d&rsquo;être LAXiste pour une fois&#8230;</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>Afin de rendre les cookies de session plus difficile à intercepter il faudrait activer la valeur LAX (laxiste) pour le paramètre <strong>session.cookie_samesite</strong>. Pour plus de détails, je vous laisse suivre la documentation. Notez l&rsquo;avertissement de COMBODO pour les reverse proxy quant au bon fonctionnement.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="1024" height="117" src="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_058_php_cookie.samesite.png" alt="" class="wp-image-1627" srcset="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_058_php_cookie.samesite.png 1024w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_058_php_cookie.samesite-300x34.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_058_php_cookie.samesite-768x88.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure></div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane1514_99f785-16"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>4 &#8211; Couvrez ces informations que je ne saurais voir</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>L&rsquo;un des points présent de l&rsquo;ANSSI qui est magistralement mis en évidence par COMBODO est la lecture des configurations des solutions déployées sur notre SI. L&rsquo;option <strong>zend.execption_ignore_args</strong> est actif par défaut et doit être désactivé. Dans certains cas, il est possible de retrouver dans les journaux de logs des informations sensibles tel que les logins et mdp de la BDD par exemple (rien que ça ?)</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="923" height="112" src="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_059_php_zendexception.png" alt="" class="wp-image-1628" srcset="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_059_php_zendexception.png 923w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_059_php_zendexception-300x36.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_059_php_zendexception-768x93.png 768w" sizes="auto, (max-width: 923px) 100vw, 923px" /></figure></div></div></div></div>
</div></div></div>



<h3 class="wp-block-heading">ITOP &#8211; Installation</h3>



<p>Créons sous <strong>/var/www/html/</strong> le répertoire qui va contenir l&rsquo;ensemble des ressources ITOP. Le nom est libre, attention toutefois de garder ce dernier de côté car le path sera utilisé dans le fichier de configuration ci-bas.</p>



<pre class="wp-block-code"><code><strong>$ sudo mkdir /var/www/html/portail.erwanguillemard.com</strong></code></pre>



<p>Télécharger le paquet d&rsquo;installation 2.7.9. Deux possibilités s&rsquo;offrent à nous :</p>



<ul class="wp-block-list">
<li>Télécharger directement l&rsquo;archive depuis le serveur front</li>



<li>Télécharger depuis une machine tierce puis transfert en SSH (scp ou sftp)</li>
</ul>



<p>Personnellement, j&rsquo;ai tendance à utiliser la première méthode. Tout dépendra de mon humeur et surtout du contexte de sécurité. Dans les deux cas, un contrôle de l&#8217;empreinte est nécessaire.</p>



<pre class="wp-block-code"><code><strong>$ wget https://sourceforge.net/projects/itop/files/itop/2.7.9/iTop-2.7.9-11939.zip/download</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="937" height="686" src="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_038_DL_ITOP.png" alt="" class="wp-image-1588" srcset="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_038_DL_ITOP.png 937w, https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_038_DL_ITOP-300x220.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_038_DL_ITOP-768x562.png 768w" sizes="auto, (max-width: 937px) 100vw, 937px" /></figure></div>


<pre class="wp-block-code"><code><strong>$ sha1sum /home/adm.r-one/download</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="934" height="52" src="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_039_SHA1SUM.png" alt="" class="wp-image-1589" srcset="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_039_SHA1SUM.png 934w, https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_039_SHA1SUM-300x17.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_039_SHA1SUM-768x43.png 768w" sizes="auto, (max-width: 934px) 100vw, 934px" /></figure></div>


<p>Le cas présent, l&#8217;empreinte est identique, nous pouvons poursuivre le déploiement. Créer un répertoire temporaire puis décompresser l&rsquo;archive.</p>



<pre class="wp-block-code"><code><strong>$ mkdir iTop
$ unzip download -d iTop</strong>
<strong>$ ls -al iTop/ </strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="908" height="172" src="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_040_unzip.png" alt="" class="wp-image-1590" srcset="https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_040_unzip.png 908w, https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_040_unzip-300x57.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/01/AP_002_040_unzip-768x145.png 768w" sizes="auto, (max-width: 908px) 100vw, 908px" /></figure></div>


<p>Copier l&rsquo;intégralité du contenu du répertoire web dans le répertoire créé plus tôt sous <strong>/var/www/html/&lt;mon_site>/</strong>.</p>



<pre class="wp-block-code"><code><strong>$ sudo cp -R iTop/web/* /var/www/html/portail.erwanguillemard.com/</strong></code></pre>



<p>Modifier les droits sur l&rsquo;ensemble du répertoire sous <strong>/var/www/html/&lt;mon_site></strong> afin d&rsquo;autoriser l&rsquo;utilisateur ainsi que le groupe <strong>apache</strong> à opérer. Puis autoriser le contexte SELinux pour que le daemon httpd puisse écrire dans notre répertoire web.</p>



<pre class="wp-block-code"><code><strong>$ sudo chown apache:apache -R /var/www/html/portail.erwanguillemard.com/
$ sudo chcon -R -t httpd_sys_rw_content_t /var/www/html/portail.erwanguillemard.com</strong></code></pre>



<p>Nous allons pouvoir lancer le wizard. </p>



<h3 class="wp-block-heading">iTOP &#8211; Instanciation</h3>



<p>Dans un navigateur rendez-vous sur l&rsquo;url <strong>https://votre_url/setup</strong>. Cela fonctionne également avec l&rsquo;IP, mais SPOILER ALERT, vous allez avoir une surprise durant le déploiement (à la suite de notre configuration) 🙂</p>



<p>Si vous ne publiez pas votre ITOP et que vous êtes en situation de lab, vous pouvez remédier à cette situation avec une petite surchage DNS dans votre fichier host ou alors un enregistrement de type A dans votre serveur DNS. Pour la première option, ce n&rsquo;est pas bien catholique, mais c&rsquo;est pour le bonne cause, c&rsquo;est pour du test.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id1514_68f48d-e8 kt-accordion-has-13-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-pane1514_ca6440-8b"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title">1 &#8211; Welcome 🙂</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>Si notre serveur apache est bien configuré, nous devons avoir dans notre navigateur internet l&rsquo;image ci-dessous. En complément, cette première étape nous indiquera si l&rsquo;ensemble des prérequis et dépendances sont bien présents sur notre serveur Front. Dans le cas contraire, vous n&rsquo;aurez pas de Ok. </p>



<p>Ce n&rsquo;est pas bien grave dans le cas contraire. Il vous suffira d&rsquo;installer le ou les paquets manquants.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="794" height="768" src="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_041_install1.png" alt="" class="wp-image-1599" srcset="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_041_install1.png 794w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_041_install1-300x290.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_041_install1-768x743.png 768w" sizes="auto, (max-width: 794px) 100vw, 794px" /></figure></div>


<p>Bon on continue ? 🙂</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane1514_53885d-2f"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title">2 &#8211; Install to or Upgrade to, that&rsquo;s the question&#8230;</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>Ici, dans notre situation initiale nous savons que nous allons installer une nouvelle instance d&rsquo;ITOP. Toutefois à l&rsquo;avenir si nous parlons de « relancer » un setup, il conviendra de sélectionner l&rsquo;upgrade d&rsquo;une instance existante. </p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="796" height="716" src="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_042_install2.png" alt="" class="wp-image-1600" srcset="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_042_install2.png 796w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_042_install2-300x270.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_042_install2-768x691.png 768w" sizes="auto, (max-width: 796px) 100vw, 796px" /></figure></div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane1514_ecb3c3-88"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title">3 &#8211; License Agreement</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>Ho, tiens une page inutile&#8230; C&rsquo;est ce que nous pourrions penser. Néanmoins, cette page à son importance puisqu&rsquo;elle vient rendre à Caesar ce qui appartient à Caesar et nous informe sur les licences protégeant les différentes sources et dépendances utilisées et nécessaires au fonctionnement et déploiement d&rsquo;ITOP. </p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="799" height="893" src="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_043_install3.png" alt="" class="wp-image-1601" srcset="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_043_install3.png 799w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_043_install3-268x300.png 268w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_043_install3-768x858.png 768w" sizes="auto, (max-width: 799px) 100vw, 799px" /></figure></div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane1514_7af151-2e"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title">4 &#8211; Database Configuration</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>Une des étapes que je préfère. Pourquoi ? Parce que nous sommes dans l&rsquo;exemple même de la pensée Manichéenne. Ici, si nous avons bien configuré notre serveur Front et Back end nous devons ne devrions pas avoir de problème. Dans le cas contraire c&rsquo;est que nous avons merdé dans une étape.</p>



<p>En cas d&rsquo;erreur, il relève généralement des manquements suivants :</p>



<ul class="wp-block-list">
<li>Oublie d&rsquo;ouverture du port 3306 sur le backend</li>



<li>Oublie ou mauvaise définition des PRIVILEGES ou GRANT sur la base de données</li>



<li>Oublie d&rsquo;autorisation des contextes du SELinux sur notre Front relatif à l&rsquo;usage des BDDs à travers le réseau</li>



<li>Un problème de couche 8. Vous ne savez pas taper ou réaliser un copier/coller. 😀</li>
</ul>



<p>La source du dysfonctionnement pouvant être variée, il n&rsquo;existe pas de guide universel pour réaliser un diagnostic précis. Le seul conseil que je peux vous donner et d&rsquo;approcher une analyse par dichotomie et de revenir au base en reprenant couche par couche le modèle OSI.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="792" height="753" src="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_044_install4.png" alt="" class="wp-image-1602" srcset="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_044_install4.png 792w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_044_install4-300x285.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_044_install4-768x730.png 768w" sizes="auto, (max-width: 792px) 100vw, 792px" /></figure></div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-5 kt-pane1514_762440-24"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title">5 &#8211; Admin Account</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>Définissez, le mot de passe du compte admin ainsi que la langue que vous souhaitez.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="785" height="532" src="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_045_install5.png" alt="" class="wp-image-1603" srcset="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_045_install5.png 785w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_045_install5-300x203.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_045_install5-768x520.png 768w" sizes="auto, (max-width: 785px) 100vw, 785px" /></figure></div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-6 kt-pane1514_3bad37-0e"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title">6 &#8211; Les paramètres divers</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>Choisissez la langue par défaut de l&rsquo;appliance. Pour le reste ne touchez à rien. La seule modification autorisée en dehors de la langue reste le choix d&rsquo;une instance de démo ou de production. La différence entre les deux instances est implicite.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="791" height="894" src="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_046_install6.png" alt="" class="wp-image-1604" srcset="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_046_install6.png 791w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_046_install6-265x300.png 265w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_046_install6-768x868.png 768w" sizes="auto, (max-width: 791px) 100vw, 791px" /></figure></div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-7 kt-pane1514_7acecc-d9"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title">7 &#8211; Configuration Management</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>Sélectionnez les options et modules que vous souhaitez dans votre solution ITSM. Vous êtes libre de faire du vélo sans roulette !</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="792" height="777" src="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_047_install7.png" alt="" class="wp-image-1605" srcset="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_047_install7.png 792w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_047_install7-300x294.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_047_install7-768x753.png 768w" sizes="auto, (max-width: 792px) 100vw, 792px" /></figure></div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-8 kt-pane1514_f0ae32-cc"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title">8 &#8211; Service Management</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>Faites le choix du type de service managée. Dans mon cas personnel, j&rsquo;ai choisi Service Providers puis que dans mon Lab, je souhaite me positionner comme une ESN distribuant le service à ces clients.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="788" height="784" src="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_048_install8.png" alt="" class="wp-image-1606" srcset="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_048_install8.png 788w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_048_install8-300x298.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_048_install8-150x150.png 150w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_048_install8-768x764.png 768w" sizes="auto, (max-width: 788px) 100vw, 788px" /></figure></div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-9 kt-pane1514_34c3f4-d9"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title">9 &#8211; Ticket Management</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>Vous avez 3 possibilitées, activer un portail simple à l&rsquo;attention des utilisateurs pour déclarer les ticket, une version plus avancée ou pas de portail.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="790" height="787" src="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_049_install9.png" alt="" class="wp-image-1607" srcset="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_049_install9.png 790w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_049_install9-300x300.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_049_install9-150x150.png 150w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_049_install9-768x765.png 768w" sizes="auto, (max-width: 790px) 100vw, 790px" /></figure></div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-10 kt-pane1514_ee4a93-bf"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title">10 &#8211; Change Management</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>Est ce que vous souhaitez gérer les changements dans ITOP ? Personnellement non, mais vous peut-être ? Qui sait ?</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="793" height="780" src="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_050_install10.png" alt="" class="wp-image-1608" srcset="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_050_install10.png 793w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_050_install10-300x295.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_050_install10-768x755.png 768w" sizes="auto, (max-width: 793px) 100vw, 793px" /></figure>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-11 kt-pane1514_695ba1-fe"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title">11 &#8211; Additional ITIL Tickets</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>Alors contrairement à l&rsquo;étape 10, je veux gérer les problèmes ainsi que les erreurs connues. Mais cela reste un choix purement personnel.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="789" height="785" src="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_051_install11.png" alt="" class="wp-image-1609" srcset="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_051_install11.png 789w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_051_install11-300x298.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_051_install11-150x150.png 150w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_051_install11-768x764.png 768w" sizes="auto, (max-width: 789px) 100vw, 789px" /></figure></div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-12 kt-pane1514_39a66b-3c"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title">12 &#8211; Synthèse </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>Nous arrivons au bout du WIZARD. Nous retrouvons ici l&rsquo;ensemble de nos choix et options que nous souhaitons déployés. Si tout est correct, nous pouvons initier l&rsquo;étape suivante.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="796" height="643" src="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_052_install12.png" alt="" class="wp-image-1610" srcset="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_052_install12.png 796w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_052_install12-300x242.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_052_install12-768x620.png 768w" sizes="auto, (max-width: 796px) 100vw, 796px" /></figure></div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-13 kt-pane1514_88380b-88"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title">13 &#8211; Install</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>Si l&rsquo;installation se passe bien vous devriez avoir les informations ci-dessous, puis être invité à accéder au portail.</p>



<figure class="wp-block-table aligncenter"><table><tbody><tr><td><img decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_053_install13.png" alt="" style="width: 500px;"></td><td><img loading="lazy" decoding="async" width="500" height="466" class="wp-image-1612" style="width: 500px;" src="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_054_install14.png" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_054_install14.png 791w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_054_install14-300x280.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_054_install14-768x717.png 768w" sizes="auto, (max-width: 500px) 100vw, 500px" /></td></tr></tbody></table></figure>
</div></div></div>
</div></div></div>



<p>Bien, nous voilà au terme de notre article, nous voici sur un ITOP tout propre, tout beau et vide. Mais l&rsquo;appliance est opérationnelle et c&rsquo;est là bien l&rsquo;objectif que nous nous sommes fixé en début de ce billet.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="560" src="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_055_install15-1024x560.png" alt="" class="wp-image-1613" srcset="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_055_install15-1024x560.png 1024w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_055_install15-300x164.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_055_install15-768x420.png 768w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_055_install15-1536x840.png 1536w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_055_install15.png 1838w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure></div>


<p><strong>Pop pop pop garçon ! Tu vas pas planter tes lecteurs comme ça ?</strong> Oui j&rsquo;ai oublier d&rsquo;aborder quelques points. </p>



<p>Premièrement, oui notre instance est vide et il va falloir configurer cette dernière. Pour la faire courte, je vais faire un article dédié car cela risque de faire de long. </p>



<p>Secondement, il reste quelques petites configurations dont l&rsquo;une des plus importantes, l&rsquo;exécution des tâches en background, les notifications ect. Je vous propose d&rsquo;aborder ces quelques points dans les sous parties ci-dessous.</p>



<h4 class="wp-block-heading">ITOP &#8211; Paramétrage du cron</h4>



<p>Je vais reprendre ce que j&rsquo;ai l&rsquo;habitude de faire de mon côté, vous retrouverez en détails l&rsquo;ensemble des actions sur le site de l&rsquo;éditeur (<a href="https://www.itophub.io/wiki/page?id=2_7_0:admin:cron">Lien</a>).</p>



<p>Connectons nous à notre appliance dans un navigateur web (<a href="https://portail.erwanguillemard.com/pages/UI.php">https://portail.erwanguillemard.com/pages/UI.php</a>) avec le compte <em>admin</em> et ajoutons un nouvel utilisateur (Administration&gt;Compte Utilisateur) interne à ITOP. Créer une nouvelle personne, puis compléter la fiche de contact en spécifiant le profil <strong>Administrator</strong> (cf les deux captures ci-dessous). Gardons bien à l&rsquo;esprit que les noms doivent être parlant pour faciliter le MCO de notre application.</p>



<figure class="wp-block-table aligncenter"><table><tbody><tr><td><img loading="lazy" decoding="async" width="500" height="271" class="wp-image-1636" style="width: 500px;" src="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_063_itopContact.png" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_063_itopContact.png 946w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_063_itopContact-300x162.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_063_itopContact-768x416.png 768w" sizes="auto, (max-width: 500px) 100vw, 500px" /></td><td><img loading="lazy" decoding="async" width="400" height="277" class="wp-image-1637" style="width: 400px;" src="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_063_itopPersonne.png" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_063_itopPersonne.png 871w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_063_itopPersonne-300x208.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_063_itopPersonne-768x533.png 768w" sizes="auto, (max-width: 400px) 100vw, 400px" /></td></tr></tbody></table></figure>



<p>Une fois l&rsquo;utilisateur créé, connectons nous sur notre serveur front en ssh.</p>



<figure class="wp-block-table"><table><tbody><tr><td><strong>/!\ Attention :</strong> Il est préconisé par l&rsquo;éditeur de ne pas garder le fichier de paramètre du cron dans le répertoire web car ce dernier contient des informations sensibles (login et mdp) mais de le stocker à un autre emplacement.<br>Je rencontre actuellement une frustration sur ce point car il n&rsquo;est pas opérant sur mon environnement FRONT durci. Après deux nuits de diagnostics, je vais mettre de côté cette recommandation et poursuivre les investigations en parallèle.</td></tr></tbody></table></figure>



<p>Les deux fichiers nécessaires aux taches en arrière plan seront stockés dans le répertoire web sous <strong>/conf/itop</strong>. Nous allons donc créer ce répertoire, lui appliquer les droits et saisir le contenu du fichier <strong>cron.params</strong>. (Naturellement, vous adapter les chemins ainsi que les noms de fichiers 🙂 )</p>



<pre class="wp-block-code"><code><strong>$ sudo mkdir /var/www/html/portail.erwanguillemard.com/conf/itop
$ sudo chown apache:apache -R /var/www/html/portail.erwanguillemard.com/conf/itop
$ sudo vim /<strong>var/www/html/portail.erwanguillemard.com/conf/itop</strong>/cron.params</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="385" height="79" src="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_065_cronparams.png" alt="" class="wp-image-1639" srcset="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_065_cronparams.png 385w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_065_cronparams-300x62.png 300w" sizes="auto, (max-width: 385px) 100vw, 385px" /></figure></div>


<p>Faisons de même avec le fichier cron.sh. Notez que dans le script bash, nous réorientons les flux de sortie dans un fichier de log. Il est nécessaire d&rsquo;adapter les droits en conséquence.  Je vous recommande également d&rsquo;appliquer une stratégie de rotation des logs avec <strong>logrotate</strong>. Effectivement et par expérience, le fichier de log va grossir autant que le nombre de données et d&rsquo;utilisateur sur votre appliance. Si vous ne voulez pas saturer votre espace de stockage, vous savez quoi faire.</p>



<pre class="wp-block-code"><code><strong>$ sudo vim <strong>/var/www/html/portail.erwanguillemard.com/conf/itop</strong>/cron.sh</strong></code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="938" height="120" src="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_066_cronsh.png" alt="" class="wp-image-1640" srcset="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_066_cronsh.png 938w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_066_cronsh-300x38.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_066_cronsh-768x98.png 768w" sizes="auto, (max-width: 938px) 100vw, 938px" /></figure>



<p>Auparavant dans les premières version d&rsquo;ITOP que j&rsquo;ai manipulé, les tâches planifiées (cron) étaient lancés en tant que root. <a href="https://www.youtube.com/watch?v=ZH7dG0qyzyg&amp;ab_channel=L%C3%A9oFerr%C3%A9">Avec le temps, (va tout s&rsquo;en va&#8230;)</a> il est de bonne pratique de ne pas utiliser le compte root pour des applications et d&rsquo;utiliser ce dernier avec parcimonie. C&rsquo;est pourquoi toujours en suivant les recommandations de COMBODO, nous allons réaliser ces tâches avec l&rsquo;utilisateur apache.</p>



<p>J&rsquo;aime dans un premier temps afficher l&rsquo;ensemble des tâches exécutés par l&rsquo;utilisateur puis j&rsquo;ajoute la nouvelle tâche. Pour le bien de l&rsquo;application il est recommandé d&rsquo;exécuter la tâche toutes les 5 minutes. (Alors pourquoi tu as mis 6 ? Je sais pas, peut être parce qu&rsquo;il n&rsquo;est pas premier ? 🙂 )</p>



<pre class="wp-block-code"><code><strong>$ sudo crontab -u apache -l
# crontab -u apache -e</strong></code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="816" height="61" src="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_067_cronApache.png" alt="" class="wp-image-1641" srcset="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_067_cronApache.png 816w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_067_cronApache-300x22.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_067_cronApache-768x57.png 768w" sizes="auto, (max-width: 816px) 100vw, 816px" /></figure>



<p>Nous réappliquons les permissions ainsi que les acls sur nos deux nouvelles ressources. L&rsquo;objectif étant de sécuriser au maximum le contenu de ces deux fichiers.</p>



<pre class="wp-block-code"><code><strong>$ sudo chown apache:apache -R /var/www/html/portail.erwanguillemard.com/conf/itop
$ sudo chmod 750 //var/www/html/portail.erwanguillemard.com/conf/itop/cron.sh
$ sudo chmod 640 /var/www/html/portail.erwanguillemard.com/conf/itop/cron.params
$ sudo systemctl restart crond</strong></code></pre>



<p>Pour débugger et ou contrôler la bonne exécution des tâches planifiées, nous pouvons utiliser la commande ci-dessous pour lancer manuellement les tâches. Nous pouvons également contrôler le contenu du fichier de log. En cas de dysfonctionnement, soit vous n&rsquo;avez aucun retour ou des erreurs. </p>



<p>Dans certains cas, le cron est fonctionnel mais « planté ». L&rsquo;exécution des tâches de fond étant réalisées de manière procédurale, si une tache se retrouve en carafe, les autres tâches resteront en attente. L&rsquo;identification de l&rsquo;incident sera plutôt facile car les compteurs des prochains « run » seront antérieur à la date de la dernière exécution.</p>



<pre class="wp-block-code"><code><strong>$ sudo php /var/www/html/portail.erwanguillemard.com/webservices/cron.php --auth_user=service.itop --auth_pwd='yS=&gt;LMuN&gt;5OrzvW2{Qj.' --status_only=1
ou
$ sudo tail -f /var/log/itop_cron.log</strong></code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="144" src="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_068_phpDebug-1-1024x144.png" alt="" class="wp-image-1643" srcset="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_068_phpDebug-1-1024x144.png 1024w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_068_phpDebug-1-300x42.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_068_phpDebug-1-768x108.png 768w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_068_phpDebug-1-1536x215.png 1536w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_068_phpDebug-1.png 1905w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h4 class="wp-block-heading">ITOP &#8211; Notifications</h4>



<p>Promis ensuite notre environnement sera opérationnel et nous n&rsquo;aurons plus qu&rsquo;à peupler notre application et donc notre base de données. Toutefois, notre solution de ticketing doit envoyer des notifications mails pour les échéances des CIs, le cycle de vie des requêtes, les dépassements des SLAs, TTRs etc. De base, ITOP utilise la fonction <strong>PHPMail</strong> sauf que pour des raisons de sécurité je préfère passer par un relai SMTP<strong>S</strong>.</p>



<p>Dans iTop la configuration est plutôt simple et la documentation aussi clair que de l&rsquo;eau de roche, il suffira de suivre le <a href="https://www.itophub.io/wiki/page?id=2_7_0:admin:itop_configuration_file">wiki</a> et de lire les commentaires du fichier de configuration générale. A ce niveau il y a deux moyens possible :</p>



<ul class="wp-block-list">
<li>Web : Sous <em><strong>Configuration &gt; Configuration Générale</strong></em> (si profil admin)</li>



<li>CLI : Sous <em><strong>/var/www/html/&lt;site&gt;/conf/production/config-itop.php</strong></em></li>
</ul>



<p>Pour des raisons pratiques, vous conviendrez que l&rsquo;interface en WEBUI va nous faciliter les choses, alors pourquoi se priver ?</p>



<p>Dans mon cas, je commente la ligne par défaut PHPMail pour remplacer la valeur par SMTP puis implique la configuration comme suit.</p>



<figure class="wp-block-table"><table><tbody><tr><td><strong>Variable</strong></td><td><strong>Type</strong></td><td><strong>Valeurs et commentaires</strong></td></tr><tr><td>email_transport</td><td>String</td><td>SMTP</td></tr><tr><td>email_transport_smtp.encryption</td><td>String</td><td>TLS ou SSL, champ optionnel qui permet d’activer le chiffrement sur le protocole SMTP.</td></tr><tr><td>email_transport_smtp.host</td><td>String</td><td>Mon relai smtp (ovh dans mon cas), par défaut si la variable n’est pas renseignée dans le fichier de configuration l’hote utilisé par le serveur SMTP sera la machine elle-même (localhost). Champ optionnel.</td></tr><tr><td>email_transport_smtp.password</td><td>String</td><td>Le fameux mot de passe des familles pour s’authentifier sur le serveur SMTP (host) renseigné ci-dessous. Champ optionnel.</td></tr><tr><td>email_transport_smtp.username</td><td>String</td><td>Le compte servant à s’authentifier sur le serveur SMTP (host) renseigné ci-dessous. Champ optionnel.</td></tr><tr><td>Email_transport_smtp.port</td><td>Integer</td><td>Le port à préciser pour envoyer les notifications. par défaut si la variable n’est pas renseignée dans le fichier de configuration le port utilisé sera le port 25.</td></tr></tbody></table></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="556" height="339" src="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_069_itop_notification_conf-2.png" alt="" class="wp-image-1679" srcset="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_069_itop_notification_conf-2.png 556w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_069_itop_notification_conf-2-300x183.png 300w" sizes="auto, (max-width: 556px) 100vw, 556px" /></figure>



<p>Une fois la configuration effectuée, cliquez sur le bouton enregistrer en haut de la page. Si vous avez une erreur de syntaxe, ITOP qui est bien sympa vous l&rsquo;indiquera.</p>



<p>Pour tester si notre configuration à travers notre relai SMTP fonctionne bien, utilisons la fonctionnalité mise à disposition sous https://site/setup/email.test.php</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id1514_5f27b4-1e 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-pane1514_e14537-0f"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title">Test &#8211; Config</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"><div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="650" height="587" src="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_070_itop_notification_test.png" alt="" class="wp-image-1680" srcset="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_070_itop_notification_test.png 650w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_070_itop_notification_test-300x271.png 300w" sizes="auto, (max-width: 650px) 100vw, 650px" /></figure></div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane1514_4c829e-2a"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title">Test &#8211; Confirm</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"><div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="648" height="335" src="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_071_itop_notification_confirm.png" alt="" class="wp-image-1681" srcset="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_071_itop_notification_confirm.png 648w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_071_itop_notification_confirm-300x155.png 300w" sizes="auto, (max-width: 648px) 100vw, 648px" /></figure></div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane1514_92a43e-45"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title">Test &#8211; Le facteur est passé</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"><div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="780" height="368" src="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_072_itop_notification_result.png" alt="" class="wp-image-1682" srcset="https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_072_itop_notification_result.png 780w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_072_itop_notification_result-300x142.png 300w, https://erwanguillemard.com/wp-content/uploads/2024/02/AP_002_072_itop_notification_result-768x362.png 768w" sizes="auto, (max-width: 780px) 100vw, 780px" /></figure></div></div></div></div>
</div></div></div>



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



<p>L&rsquo;une des grandes questions que vous pourriez me poser, c&rsquo;est pourquoi tout ce cirque pour installer ITOP ? Question purement légitime. La première raison, est une raison de cœur. Cette solution m&rsquo;a accompagné au tout début de vie professionnelle comme SysAdmin et représente la clé de voute du service que l&rsquo;IT délivre au quotidien tout en garantissant un bon suivi du parc informatique. La seconde est non des moindres, la solution est OpenSource. Nous pouvons donc mettre les mains facilement dans le moteur et se salir le bout des doigts en faisant « évoluer » la solution à notre convenance, au besoin des organisations et des ces utilisateurs.</p>



<p>En l&rsquo;occurrence, j&rsquo;ai un certain nombre de module qui viennent compléter ITOP pour en faire <strong>MON</strong> ITOP. Ces derniers pourraient satisfaire la communauté, pourquoi pas ? Je me suis donc dit que la première fondation de cet édifice devait passer par l&rsquo;installation d&rsquo;ITOP. Je pense également continuer quelques plus petits articles comme l&rsquo;upgrade d&rsquo;une instance existante ou autres.</p>



<p class="has-text-align-center"><strong>Et sinon, tu parles de module, tu la craches ta VALDA ?</strong> <strong>C&rsquo;est un pop up HELLO WORD ?</strong></p>



<p>Dans les articles à venir, je souhaite partager mon expérience sur :</p>



<ul class="wp-block-list">
<li>Un petit plugin d&rsquo;administration en bash d&rsquo;ITOP (front)</li>



<li>Un plugin de réalisation de dump de la BDD sur un certain nombre de point de rétention en mode service en bash (back). Indépendant de ce qui est actuellement présent dans ITOP</li>



<li>Un plugin d&rsquo;externalisation de la BDD ITOP sur un autre site en bash</li>



<li>Un gros plugin (presque une passerelle) d&rsquo;intégration de suivi de sauvegarde entre la solution VEEAM (Service Provider Console et Data Plateform) et ITOP en powershell</li>
</ul>



<p>Le monde du libre n&rsquo;a pas de limite tant qu&rsquo;il y aura du partage et une communauté pour faire vivre les solutions. ITOP et COMBODO s&rsquo;inscrivant en plein dans cette ligné.</p>



<p>Le mot de la fin :</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>Je VEEAMZip mes serveurs ITOP et tente l&rsquo;upgrade avec Jacques TOUBON ? Vous ne pouvez pas le C: est full. Vous tombez en case SYNERBOX et vous devez appliquer la loi AllGood. </em></p>
<cite>Erwan GUILLEMARD</cite></blockquote>



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



<ul class="wp-block-list">
<li><a href="https://fr.wikipedia.org/wiki/ISO_9001">ISO 9001</a></li>



<li><a href="https://fr.wikipedia.org/wiki/Information_Technology_Infrastructure_Library">ITIL</a></li>



<li><a href="https://www.combodo.com/itop">ITOP</a></li>



<li><a href="https://www.itophub.io/wiki/page?id=2_7_0:install:security">ITOP &#8211; Secure your ITOP</a></li>



<li><a href="https://mariadb.com/kb/en/yum/">Mariadb &#8211; Repo</a></li>



<li><a href="https://doc.fedora-fr.org/wiki/D%C3%A9p%C3%B4t_remi">Remi &#8211; Repo (PHP 7.4)</a></li>
</ul>


<ol class="wp-block-footnotes"><li id="f02f5e11-1355-47bd-b6a4-f8e82f9f3efd"><strong>ITIL</strong>, <em>Information Technology Insfrastructure Library</em> <a href="#f02f5e11-1355-47bd-b6a4-f8e82f9f3efd-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="dd365f01-8023-4ab0-8adf-08df37553e0c"><strong>KPI</strong>, <em>Key Performances Indicators</em> <a href="#dd365f01-8023-4ab0-8adf-08df37553e0c-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="14f79a55-a8d6-4fad-a22d-1e08bd9e0eb5"><strong>ITSM</strong>, <em>Information <em>Technology</em> Service Management</em>  <a href="#14f79a55-a8d6-4fad-a22d-1e08bd9e0eb5-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="2bc69c95-011a-40c2-9608-bd8bacd9a470"><strong>CMDB</strong>, <em>Configuration Management DataBase</em> <a href="#2bc69c95-011a-40c2-9608-bd8bacd9a470-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="dce48f25-075f-413b-b5aa-4561853c7358"><strong>MCO</strong>, <em>Maintient en Condition Opérationnel</em> <a href="#dce48f25-075f-413b-b5aa-4561853c7358-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="d81d1196-4c1d-4afc-aad3-74165b96adfa"><strong>LTS</strong>, <em>Long Time Support</em> <a href="#d81d1196-4c1d-4afc-aad3-74165b96adfa-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="02ed2d88-6eed-4178-a3fc-45b137cd3c39"><strong>STS</strong>, <em>Small Time Support</em> <a href="#02ed2d88-6eed-4178-a3fc-45b137cd3c39-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="e6efb11d-fc1c-4be3-9262-6564bec42116"><strong>SGBD</strong>, Système de Gestion de Base de Données <a href="#e6efb11d-fc1c-4be3-9262-6564bec42116-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li></ol>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
