<description><![CDATA[<p>Dans le cadre de mon travail, je vais devoir supprimer les mots de passe définis dans plusieurs dizaines de fichiers Excel.</p>
<p>Un fichier Excel, ainsi que n'importe quel type de fichier généré par la suite Office, est ni plus ni moins qu'une archive Zip contenant des répertoires et des fichiers XML. Les mots de passe ne chiffrent aucune donnée dans le cas d'une protection simple (le comportement par défaut). Par conséquant, et uniquement dans ce cas de figure, le mot de passe est un artifice pour bloquer l'accès à du contenu. Dans le cas d'un chiffrement des données, il n'est pas possible de supprimer le mot de passe comme je vais le faire.
Les données sont stockées au format XML, il est donc très simple de retirer les mots de passe d'un classeur et de ses feuilles.</p>
<p>Afin d'industrialiser les modifications, j'ai écris un script qui fait toutes les modifications automatiquement : <ahref="https://gitnet.fr/deblan/excel-password-terminator">Excel password terminator</a>.</p>
<p>Pour l'installer, il suffit simplement de clôner le projet ou de télécharger une archive de dépots. Les dépendances sont très peu nombreuses : zip, unzip, grep et sed.</p>
<description><![CDATA[<p>Une fois de plus, la France signe pour le totalitarisme. Des articles des lois pour protéger la police de sa population, une surveillance de masse actée, la liberté d'expression abrogée en dehors de tout contexte terroriste.</p>
<p>La France est un état policier qui braque sa législation contre son peuple et le droit Européen.</p>
<description><![CDATA[<p>La loi sécurité globale a été définitivement adoptée hier par l'Assemblée nationale, à 75 voix contre 33, au terme d'un débat soumis aux exigences de la police et dont nous n'attendions plus grand chose.</p>
<description><![CDATA[<p>Les VPN ont le vent en poupe depuis quelques temps. Rares sont les vidéastes qui n'auront pas fait l'éloge de services comme NordVPN. Cependant, avant de permettre de visualiser le contenu US de Netflix, un VPN permet de créer un réseau entre plusieurs machines au travers d'autres réseaux comme Internet. Ainsi, quand des machines sont connectées au même réseau VPN, elles peuvent communiquer de la même façon que dans un réseau local. C'est donc très intéressant lorsque l'ont souhaites isoler une application d'internet en la rendant tout de même accessible dans ce réseau isolé.</p>
<p>Il existe tout un tas de solutions pour réaliser son VPN. La plus connue est certainement OpenVPN mais je lui préfère Wireguard pour sa très grande simplicité d'installation.</p>
<p>Dans mon cas d'usage, j'ai un serveur Wireguard sous Debian et des clients qui tournent principalement sur Debian mais aussi Windows et Android.</p>
<p>Sous Debian 10, il est nécessaire d'utiliser les dépots backports pour insaller Wireguard.</p>
<pre><codeclass="language-bash">echo "deb http://deb.debian.org/debian buster-backports main contrib non-free" \
| sudo tee /etc/apt/sources.list.d/buster-backports.list
</code></pre>
<p>Une fois le dépot ajouté, il suffit de mettre à jour la liste des paquets et d'installer Wireguard.</p>
<p>Sur d'autres distributions, il faudra installer <code>wireguard-tools</code> mais je vous laisse vous référer à <ahref="https://www.wireguard.com/install/">la page d'installation</a> pour plus d'informations.</p>
<p>En complément de Wireguard, je vous invite à installer <code>iptables</code> et <code>resolvconf</code> sur le serveur <supid="fnref:1"><ahref="#fn:1"class="footnote-ref"role="doc-noteref">1</a></sup> et uniquement <code>resolvconf</code> sur vos clients <supid="fnref2:1"><ahref="#fn:1"class="footnote-ref"role="doc-noteref">1</a></sup> linux. <code>iptables</code> va permettre de realiser le routage des paquets tandis que <code>resolvconf</code> va permettre de gérer les DNS via la connexion VPN.</p>
<p>Une fois l'installation terminée, on va générer un couple de clés sur le serveur.</p>
<pre><codeclass="language-bash">cd /etc/wireguard
umask 077
wg genkey | tee privateKey | wg pubkey > publicKey
</code></pre>
<p>Suite à ces commandes, 2 nouveaux fichiers ont été générés : <code>privateKey</code> contient la clé privée et <code>publicKey</code> contient la clé publique. Il faudra conserver la clé privée secrète tandis que la clé publique va permettre d'identifier le serveur auprès des clients. Son contenu sera donc partagé sur d'autres machines. Vous pouvez réaliser la même opération sur vos machines clientes qui seront elles aussi identifiées avec leur clé publique. Les interfaces graphiques de Wireguard réaliseront la générations des clés automatiquement. Bien sur, vous pouvez créer autant de clés que vous le désirez. Je recommande de créer un couple de clé par serveur VPN.</p>
<p>Nous allons ensuite générer le fichier <code>/etc/wireguard/wg0.conf</code> où <code>wg0</code> désigne le nom de l'interface réseau qui sera créée par wireguard. Selon vos besoins, vous pourrez en ajouter autant que vous le désirez.</p>
<p>Dans cette configuration, je définie la page IP du réseau (<code>10.0.0.1/24</code>) et l'IP du serveur (<code>10.0.0.1</code>). Veillez à modifier le nom de l'interface connectée à Internet (ici <code>eth0</code>). Insérer également le contenu de la clé privée à la dernière ligne. <code>SaveConfig</code> à <code>false</code> indique que le fichier pourra être modifié pendant que le serveur est lancé. Enfin, on indique que le serveur écoute sur le port <code>51820</code>.
Vous pourrez répéter cette opération sur vos client mais vous devrez omettre les lignes avec <code>PostUp</code>, <code>PostDown</code> et <code>ListenPort</code>. Vous devrez également changer <code>Address</code> en incrémentant l'ip et en fixant la page à 32 (exemple : <code>10.0.0.2/32</code>, <code>10.0.0.3/32</code>, etc.).</p>
<p>Enfin, il faudra renseigner la liste des clients du réseau VPN en utilisant leur clé publique et l'adresse IP qu'ils auront configurée.</p>
<pre><codeclass="language-bash">[Interface]
...
[Peer]
PublicKey = clé_publique_du_client_1
AllowedIPs = 10.0.0.2/32
[Peer]
PublicKey = clé_publique_du_client_2
AllowedIPs = 10.0.0.3/32
</code></pre>
<p>Coté client, il faudra renseigner le serveur :</p>
<p>Dans cet exemple, j'ai définie que seuls les paquets à destination du réseau VPN seront routés dans le VPN : <code>AllowedIPs = 10.0.0.0/24</code>. Si vous voulez router tout votre traffic, saisissez <code>AllowedIPs = 0.0.0.0/0</code><supid="fnref:2"><ahref="#fn:2"class="footnote-ref"role="doc-noteref">2</a></sup>. Pour ajouter plusieurs plages, il suffit de les séparer par des virgules.
Dans le bloc <code>[Interface]</code> des clients, vous avez la possibilté d'ajouter une propriété <code>DNS</code> afin de paramétrer un ou plusieurs serveurs DNS. Les serveurs DNS devront être accessibles par le serveur VPN ou le client selon le paramétrage de <code>AllowedIPs</code>. Attention, les DNS seront paramétrés comme des DNS classiques et ils seront sollicités pour résoudre tous les noms.</p>
<p>Une fois les configuration effectuée, vous pourrez démarrer ou arrêter la connexion VPN avec <code>sudo wg-quick up wg0</code> et <code>wg-quick down wg0</code> sur le serveur et sur les clients. Vous pourrez monitorer les connexions avec la commande <code>sudo wg</code>.</p>
<p>Techniquement, chaque pair (ou peer) est à la fois client et serveur. Quand je parle de "serveur", je fais référence à la machine qui va jouer le rôle de routeur pour les différents pairs du VPN. Techniquement, un pair peut s'interconnecter à autant d'autres pairs qui lui est possible de joindre (cf la <ahref="https://www.wireguard.com/quickstart/">doc officielle</a> et la <ahref="https://wiki.archlinux.org/index.php/WireGuard">doc Archlinux</a>). <ahref="#fnref:1"class="footnote-backref"role="doc-backlink">↩︎</a><ahref="#fnref2:1"class="footnote-backref"role="doc-backlink">↩︎</a></p>
</li>
<liid="fn:2">
<p>Que ce soit sur un "serveur" ou un "client", <code>AllowedIPs</code> indique pour quelle(s) plage(s) IP le pair sera emprunté pour router les paquets. Sur le serveur, on souhaite que chaque pair reçoivent exclusement les paquets qui leur sont destinés (IP du pair/32) tandis que sur le client, 2 cas d'usages classiques seront généralement retenus : soit on utilise le serveur pour router que le traffic du réseau VPN (<code>10.0.0.0/24</code>) soit on veut que le serveur serve de proxy et tout le traffic réseau passera par lui (<code>0.0.0.0/0</code>). <ahref="#fnref:2"class="footnote-backref"role="doc-backlink">↩︎</a></p>
<description><![CDATA[<p>Mon blog a été mon premier vrai projet quand j'ai commencé de faire du développement web et il me suit toujours aujourd'hui.</p>
<p>Beaucoup de versions ont été réalisées car elles suivent mon évolution et les technologies que j'utilise. La précédente mouture était basée sur Trinity, un <ahref="https://fr.wikipedia.org/wiki/Content_management_framework">CMF</a> basé sur Symfony 2, développé par <ahref="https://www.webetdesign.com/">web&design</a> et sur lequel j'ai beaucoup travaillé. Trinity est puissant mais la conception n'est plus d'actualité et la migration vers une version récente de Symfony est impossible.<br/>
Je travaille sur la refonte du site web de l'association <ahref="https://www.tinternet.net/">Tinternet & cie</a> et s'est rapidement posée la question du CMS. Cela m'a permis d'entreprendre l'écriture de Murph, un <ahref="https://fr.wikipedia.org/wiki/Content_management_framework">CMF</a> qui repose sur Symfony 5 et qui reprend les bonnes idées de Trinity avec une conception qui tient plus la route.</p>
<p>Tandis que <code>Trinity</code> était un hommage à Matrix, <code>Murph</code> est tout droit tiré d'Interstellar, un film pour lequel j'ai une affection très particulière. Voici quelques images du backoffice.</p>
<p>Si le projet vous intéresse, le <ahref="https://gitnet.fr/deblan/deblan.io-murph">code source du blog est disponible ici</a> et celui du <ahref="https://gitnet.fr/deblan/murph-skeleton">squelette de Murph se trouve là</a>.</p>
]]></description>
<guidisPermaLink="false">597</guid>
<pubDate>Wed, 31 Mar 2021 10:08:00 +0200</pubDate>
<description><![CDATA[<p>Cela fait des années que j'utilise ZSH comme interpréteur de commande. En complément,
j'utilise également des plugins disponibles via l'excellent projet <ahref="https://ohmyz.sh/">oh-my-zsh</a>.</p>
<p>J'ai harmonisé l'ensemble des configurations sur mes différents accès. Pour ce faire,
j'ai principalement travaillé sur le prompt et je publie aujourd'hui le code de mon thème.</p>
<p>Voici une capture d'écran qui décrit l'ensemble des fonctionnalités de mon thème :</p>
<ul>
<li>Une gestion des codes de sortie avec différentes couleurs et éventuellement le code</li>
<li>L'affichage de l'heure</li>
<li>L'affichage de l'utilisateur et de la machine</li>
<li>Changement de couleur si l'utilisateur⋅trice est privilégié⋅e</li>
<li>Le chemin courant avec un retour à la ligne s'il dépasse une certaine longueur</li>
<li>Intégration de GIT (nécessite <ahref="https://github.com/olivierverdier/zsh-git-prompt">olivierverdier/zsh-git-prompt</a>)</li>
</ul>
<p><imgsrc="https://upload.deblan.org/u/2021-02/60266e22.jpg"alt="Mon thème pour ZSH"title="Mon thème pour ZSH"style="padding: 10px; background: #031019"></p>
<p>Le code source est disponible sur <ahref="https://gitnet.fr/deblan/gists/src/branch/master/zsh/themes/deblan/deblan.zsh-theme">cette page</a>
et il est totalement libre.</p>
]]></description>
<guidisPermaLink="false">595</guid>
<pubDate>Fri, 12 Feb 2021 13:09:02 +0100</pubDate>
<category><![CDATA[Développement]]></category>
</item>
<item>
<title><![CDATA[Google démantèle son éthique (et tout le monde s'en fout...)]]></title>
<description><![CDATA[<p>Cette année très particulière m'a quand même permis de consacrer plus de
temps pour le logiciel libre que l'an passé.</p>
<p>Mes efforts se sont naturellement dirigés vers les outils que j'utilise et c'est
Nextcloud et son écosystème sur lesquels je me suis concentré.</p>
<p>Mon plus gros projet de 2020 est <ahref="https://apps.nextcloud.com/apps/side_menu">Custom menu</a>, une application pour Nextcloud qui
permet de modifier le menu par défaut en proposant d'autres affichages. Je suis
très content du résultat et beaucoup d'administrateurs ont décidé de l'installer
sur leur instance. En effet, toutes versions confondues, <ahref="https://apps.nextcloud.com/apps/side_menu">Custom menu</a> a été
téléchargé plus de 102 mille fois et les dernières versions sont installées sur
environ 9000 instances.</p>
<p>J'ai réalisé du code pour faire évoluer l'application <ahref="https://apps.nextcloud.com/apps/forms">Forms</a> on y ajoutant de
nouveaux types de champ. Cela n'a pas du tout été évident d'échanger avec
l'équipe de développement mais j'espère voir arriver ces évolutions dans une
prochaine version.</p>
<p>Ensuite, j'ai traduis <ahref="https://apps.nextcloud.com/apps/analytics">Analytics</a> en français même si je ne suis pas satisfait.
Je vais faire de nouvelles traductions l'année prochaine ! Cette application
permet de mettre en graphique des données stockées sur Nextcloud ou accessibles
depuis une API. C'est encore relativement basique mais c'est tout de même très pratique.</p>
<p>Même si le développement n'est pas très actif, j'utilise l'application <ahref="https://apps.nextcloud.com/apps/printer">Printer</a>
et j'ai proposé du code pour gérer les permissions et réduire les risques
d'injection de code.</p>
<p>Dans un contexte très différent de Nextcloud, j'ai apporté un correctif au
projet <ahref="https://pdnsmanager.org/">PDNS Manager</a>, une interface web qui permet de gérer les enregistrements
d'un serveur <ahref="https://www.powerdns.com">Powerdns</a>.</p>
<p>J'ai récemment publié <ahref="https://www.deblan.io/post/591/mail-rss-transformer-des-mails-en-flux-rss">Mail RSS</a>, une application pour transformer des
emails en flux RSS. Enfin, un peu plus tôt cette année, j'ai mis en ligne les sources du
site web qui permet de <ahref="https://www.deblan.io/post/580/monitoring-d-un-terrarium">monitorer le terrarium</a> de la maison.</p>
<p>Je crois avoir fait le tour de mon activité en espérant poursuivre en 2021 !</p>
]]></description>
<guidisPermaLink="false">594</guid>
<pubDate>Tue, 22 Dec 2020 10:00:00 +0100</pubDate>
<category><![CDATA[Divers]]></category>
</item>
<item>
<title><![CDATA[Décrets PASP : fichage massif des militants politiques]]></title>
<p>L'idée est assez simple : en utilisant <ahref="https://linux.developpez.com/formation_debian/serveur-mail2.html#AEN7717">les alias de mail dans Postfix</a>,
on peut faire en sorte qu'un mail qui arrive sur le serveur soit traité par une commande.
J'ai décidé de rediriger les mails dans un répertoire précis du serveur et je
demande à <strong>Mail RSS</strong> de les lire et de les importer.</p>
<p>Prenons la newsletter de <ahref="https://www.techtrash.fr/">TechTrash</a> comme exemple.</p>
<h4>Configuration du serveur de mail</h4>
<p>Il faut ajouter un alias qui va générer des fichiers.</p>
<p>Quand un mail est importé, les données récupérées sont :</p>
<ul>
<li>Le sujet du mail</li>
<li>La date du mail</li>
<li>Le contenu HTML</li>
<li>Le contenu texte</li>
<li>Les pièces jointes</li>
</ul>
<p>Toutes ces données seront accessibles à la consultation.</p>
<p><ahref="https://gitnet.fr/deblan/mail-rss">L'application</a> s'appuie sur Symfony (en version de développement) et <ahref="https://gitnet.fr/deblan/mail-rss">le code</a> est
totalement libre 😄</p>
]]></description>
<guidisPermaLink="false">591</guid>
<pubDate>Thu, 12 Nov 2020 18:04:42 +0100</pubDate>
<category><![CDATA[Développement]]></category>
<category><![CDATA[Informatique]]></category>
</item>
<item>
<title><![CDATA[Cohabitation de Collabora Online et OnlyOffice sur Nextcloud]]></title>
<p>Ou comment instrumentaliser à des fins politiques un événement tragique qui n'a aucun rapport pour relancer une loi anticonstitutionnelle : La loi AVIA</p>
</blockquote>
<h3>Pourquoi la loi Avia est liberticide et inutile ?</h3>
<p>L'appareil législatif contient déjà tous les outils pour lutter contre les
contenus manifestement illicites tels que les incitations à la haine,
les injures à caractère raciste ou anti-religieuses.</p>
<p>Les contenus terroristes ou pédopornographiques doit être considérés comme tel
<strong>par un juge</strong> et non par l'appréciation de l'administration. Les
plateformes privées ne doivent pas jouer le rôle d'organe de censure et encore
moins l'automatiser.<br/>
Le conseil constitutionnel s'est déja prononcé en indiquant que
« <strong>le législateur porte une atteinte à la liberté d'expression</strong> qui n'est ni adaptée,
ni proportionnée au but poursuivi ». Il persiste « <strong>le risque que les opérateurs
soient incités à retirer tous les contenus contestés, y compris ceux qui sont licites</strong> » [<ahref="https://www.vie-publique.fr/loi/268070-loi-avia-lutte-contre-les-contenus-haineux-sur-internet">1</a>].</p>
<p>Si un contenu devait être supprimé, cela veut donc dire qu'il a
été nécessairement publié donc le mal est déjà fait. Mais sous couvert de la
lutte contre l'anonyma sur Internet (qui n'est qu'une idée reçue), la loi Avia
va permettre de museler les personnes qui dérangent, ceux qui ont des idées en
marge, les mouvements contestataires, ceux qui militent pour un état de droit et
non pas pour un état policier en imposant une suppression pure et dure de leurs
contenus sans l'accord d'un juge.</p>
<p>Cette loi est la porte ouverte vers une énième derive totalitaire où l'état va nous
imposer son idéologie.</p>
]]></description>
<guidisPermaLink="false">590</guid>
<pubDate>Sat, 17 Oct 2020 15:13:52 +0200</pubDate>
<category><![CDATA[Divers]]></category>
</item>
<item>
<title><![CDATA[Menu personnalisé dans Nextcloud 🎨]]></title>
<p>Pour résoudre ce problème, j'ai entrepris le développement d'une application
dédiée à la gestion de ce menu et j'ai <ahref="https://www.deblan.io/post/581/application-nextcloud-nouvel-emplacement-pour-le-menu">publiées les premières versions</a>
pendant le confinement du début d'année.</p>
<p><ahref="https://apps.nextcloud.com/apps/side_menu">Custom menu</a> est totalement personnalisable. On peut modifier l'emplacement du menu
selon trois dispositions : dans un panneau latéral, affiché en
permanance comme le menu d'Ubuntu ou via un panneau qui s'ouvre sur le dessus. Vous pouvez
bien sur choisir les couleurs de tous les éléments, afficher votre logo, la photo
de profil de l'utilisateur ou rien du tout, choisir la taille du texte celle des
icônes, etc.</p>
<p>On peut aussi désigner des applications qui doivent rester affichées dans le menu original,
choisir lesquelles doivent s'ouvrir dans un nouvel onglet et si l'administrateur
le permet, alors chaque utilisateur pourra faire sa propre organisation.</p>
<p><ahref="https://apps.nextcloud.com/apps/side_menu">Custom menu</a> est compatible avec <ahref="https://apps.nextcloud.com/apps/apporder">AppOrder</a> de manière à pouvoir choisir l'ordre
<p>…mais en navigant à tout casser 3 minutes, je me suis posé cette question : où sont
mes <ahref="https://support.mozilla.org/fr/kb/onglets-contextuels-avec-les-containers">conteneurs comme chez Firefox</a> ?
Spoiler : ils n'existent pas et aucun navigateur ne le propose. Donc j'ai ravalé ma salive
et je me suis demandé s'il y avait un <ahref="https://support.mozilla.org/en-US/kb/use-primary-password-protect-stored-logins-and-pas">Master Password</a>
pour sécuriser les mots de passe collectés ? Spoiler : il n'existe pas non plus…</p>
<p>Du coup, je suis revenu sur Firefox et <ahref="https://donate.mozilla.org/fr/">j'ai fais un don à Mozilla</a>, en espérant que d'autres
feront comme moi et que Firefox survivra encore longtemps.</p>
]]></description>
<guidisPermaLink="false">586</guid>
<pubDate>Mon, 24 Aug 2020 11:07:42 +0200</pubDate>
<category><![CDATA[La toile]]></category>
</item>
<item>
<title><![CDATA[Festival Le 1er jour d'après - Le numérique]]></title>
<description><![CDATA[<p>Le "Festival 100% local et virtuel pour inventer Le 1er jour d'après", c’est
réfléchir ensemble, imaginer et inventer un autre monde ainsi que recenser ce
qui existe déjà, à notre échelle locale. C’est trouver et valoriser des solutions
collectives, adaptées, à développer et mettre en place sans attendre. Événement
organisé par <ahref="https://www.lepixel-besancon.fr/fr/page/lassociation-la-furieuse">l'association La Furiseuse</a>, gérante du café-resto associatif et
culturel Le Pixel à Besançon.</p>
<p>Festival 100% local et virtuel pour inventer Le 1er jour d'après - Organisé par <ahref="https://www.lepixel-besancon.fr/fr/page/lassociation-la-furieuse">La Furiseuse et Le Pixel</a></p>
<p>Le numérique est un enjeu sociétal important. Nous réalisons plusieurs constats
qui doivent mener à une prise de conscience collective et permettre de changer
en profondeur notre compréhension et nos usages du numérique.<br/>
Nous proposons quelques pistes de réflexions pour créer un numérique plus éthique
et plus juste.</p>
<p>Participants : Alexis Gabry, Benjamin Lavigne, Fabien Normand, Simon Vieille</p>
<p>L'ensemble du festival est disponible sur <ahref="https://www.youtube.com/watch?v=DJs5f-AOs4o">Youtube</a>.</p>
]]></description>
<guidisPermaLink="false">585</guid>
<pubDate>Tue, 05 May 2020 15:13:01 +0200</pubDate>
</item>
<item>
<title><![CDATA[L'association La Furieuse lance un "Festival 100% local et virtuel pour inventer Le 1er jour d'après"]]></title>