<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Clean on slash-root.fr</title><link>https://beta.slash-root.fr/tags/clean/</link><description>Recent content in Clean on slash-root.fr</description><generator>Hugo -- gohugo.io</generator><language>fr-fr</language><lastBuildDate>Mon, 11 Nov 2024 19:32:44 +0100</lastBuildDate><atom:link href="https://beta.slash-root.fr/tags/clean/index.xml" rel="self" type="application/rss+xml"/><item><title>Git : How to smudge and clean ?</title><link>https://beta.slash-root.fr/git-how-to-smudge-and-clean/</link><pubDate>Sun, 27 Oct 2024 23:36:07 +0100</pubDate><guid>https://beta.slash-root.fr/git-how-to-smudge-and-clean/</guid><description>&lt;img src="https://beta.slash-root.fr/git-how-to-smudge-and-clean/cover.png" alt="Featured image of post Git : How to smudge and clean ?" /&gt;&lt;h2 id="préambule"&gt;&lt;a href="#pr%c3%a9ambule" class="header-anchor"&gt;&lt;/a&gt;Préambule
&lt;/h2&gt;&lt;p&gt;Il était une fois, dans le royaume du développement, un développeur nommé John. En plein milieu d'un projet complexe, qui impliquait des fichiers de configuration .env et .yaml pour se connecter à une API tournant dans un conteneur Docker, John a commis l'impensable : il a ouvert un dépôt contenant une clé API Mailgun en clair dans un fichier .env utilisé pour la configuration du docker compose.&lt;/p&gt;
&lt;p&gt;À peine avait-il réalisé son erreur qu'un désastre s'annonçait. Non seulement sa clé d'API avait été compromise, mais son compte Mailgun avait également été coupé, le plongeant dans un tourbillon de préoccupations. Une procédure rigoureuse devait être suivie pour le réactiver, impliquant la réinitialisation des mots de passe et des clés d'API. Une perte de temps énorme qui plongea notre petit John dans une énorme tristesse.&lt;/p&gt;
&lt;p&gt;Face à l'urgence de partager son code Python avec un autre développeur pour résoudre un problème pressant, John a décidé d'agir. Bien que la meilleure solution aurait été de monter un vault sécurisé, le temps pressait. Il a donc opté pour un mécanisme de nettoyage et de restauration connu sous le nom de &amp;quot;smudge and clean&amp;quot;.&lt;/p&gt;
&lt;h2 id="les-faits"&gt;&lt;a href="#les-faits" class="header-anchor"&gt;&lt;/a&gt;Les faits
&lt;/h2&gt;&lt;p&gt;Il a ajouté dans le fichier &lt;code&gt;.git/config&lt;/code&gt; de son projet, les lignes suivantes :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;filter &lt;span style="color:#e6db74"&gt;&amp;#34;secrets&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; clean &lt;span style="color:#f92672"&gt;=&lt;/span&gt; ../scripts/filter-secrets.sh clean
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; smudge &lt;span style="color:#f92672"&gt;=&lt;/span&gt; ../scripts/filter-secrets.sh smudge
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ces lignes indiquaient à Git d'utiliser son script de filtrage chaque fois qu'il &lt;code&gt;push&lt;/code&gt; ou &lt;code&gt;pull&lt;/code&gt; des &lt;code&gt;commits&lt;/code&gt;. Dans ce script, il a employé &lt;code&gt;sed&lt;/code&gt; pour remplacer sa clé API par une phrase humoristique, de sorte qu'elle ne soit jamais exposée dans le dépôt.&lt;/p&gt;
&lt;h2 id="filter-secrets"&gt;&lt;a href="#filter-secrets" class="header-anchor"&gt;&lt;/a&gt;Filter secrets
&lt;/h2&gt;&lt;p&gt;Le script de filtrage &lt;code&gt;filter-secrets.sh&lt;/code&gt; en question ressemblait à cela : &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;$1&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;clean&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;]&lt;/span&gt;; &lt;span style="color:#66d9ef"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# Clean (replace sensitive data with placeholders)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sed -e &lt;span style="color:#e6db74"&gt;&amp;#39;s/XXXXXXXXX/{API_KEY_PLACEHOLDER}/g&amp;#39;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -e &lt;span style="color:#e6db74"&gt;&amp;#39;s/YYYYYYYYY/{SENDING_API_KEY_PLACEHOLDER}/g&amp;#39;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -e &lt;span style="color:#e6db74"&gt;&amp;#39;s/ZZZZZZZZZ/{SMTP_PASSWORD_PLACEHOLDER}/g&amp;#39;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -e &lt;span style="color:#e6db74"&gt;&amp;#39;s/AAAAAAAAA/{POSTGRES_PASSWORD_PLACEHOLDER}/g&amp;#39;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -e &lt;span style="color:#e6db74"&gt;&amp;#39;s/BBBBBBBBB/{TWS_USERID_PLACEHOLDER}/g&amp;#39;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -e &lt;span style="color:#e6db74"&gt;&amp;#39;s/CCCCCCCCCC/{TWS_PASSWORD_PLACEHOLDER}/g&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# Si une erreur se produit avec sed, renvoyer un code d&amp;#39;erreur&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt; $? -ne &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; &lt;span style="color:#f92672"&gt;]&lt;/span&gt;; &lt;span style="color:#66d9ef"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; echo &lt;span style="color:#e6db74"&gt;&amp;#34;Erreur lors de l&amp;#39;exécution du clean&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; exit &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;elif&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;$1&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;smudge&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;]&lt;/span&gt;; &lt;span style="color:#66d9ef"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# Smudge (replace placeholders with sensitive data)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sed -e &lt;span style="color:#e6db74"&gt;&amp;#39;s/{API_KEY_PLACEHOLDER}/XXXXXXXXX/g&amp;#39;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -e &lt;span style="color:#e6db74"&gt;&amp;#39;s/{SENDING_API_KEY_PLACEHOLDER}/YYYYYYYYY/g&amp;#39;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -e &lt;span style="color:#e6db74"&gt;&amp;#39;s/{SMTP_PASSWORD_PLACEHOLDER}/ZZZZZZZZZ/g&amp;#39;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -e &lt;span style="color:#e6db74"&gt;&amp;#39;s/{POSTGRES_PASSWORD_PLACEHOLDER}/AAAAAAAAA/g&amp;#39;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -e &lt;span style="color:#e6db74"&gt;&amp;#39;s/{TWS_USERID_PLACEHOLDER}/BBBBBBBBB/g&amp;#39;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -e &lt;span style="color:#e6db74"&gt;&amp;#39;s/{TWS_PASSWORD_PLACEHOLDER}/CCCCCCCCCC/g&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt; $? -ne &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; &lt;span style="color:#f92672"&gt;]&lt;/span&gt;; &lt;span style="color:#66d9ef"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; echo &lt;span style="color:#e6db74"&gt;&amp;#34;Erreur lors de l&amp;#39;exécution du smudge&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; exit &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;exit &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="les-attributs"&gt;&lt;a href="#les-attributs" class="header-anchor"&gt;&lt;/a&gt;Les attributs
&lt;/h2&gt;&lt;p&gt;Pour finaliser le tout, il a modifié un fichier &lt;code&gt;.git/info/attributes&lt;/code&gt; où il a défini quels fichiers de configuration devaient passer par ce filtre :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;config.yaml filter&lt;span style="color:#f92672"&gt;=&lt;/span&gt;secrets
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.env filter&lt;span style="color:#f92672"&gt;=&lt;/span&gt;secrets
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="conclusion"&gt;&lt;a href="#conclusion" class="header-anchor"&gt;&lt;/a&gt;Conclusion
&lt;/h2&gt;&lt;p&gt;Grâce à son ingéniosité, John a pu collaborer sur son projet sans craindre pour la sécurité de ses informations sensibles en se donnant le temps de monter proprement un Vault. À la fin de la journée, il avait non seulement corrigé son erreur, mais aussi appris à jongler avec la sécurité dans le monde des dépôts Git. Et c'est ainsi qu'il a vécu heureux, protégé de la menace des fuites de secrets, et avec un compte Mailgun réactivé, prêt à affronter de nouveaux défis.&lt;/p&gt;</description></item></channel></rss>