Posts
guest@6admin.io:~$ ls -t ~/posts
J'ai dit à une IA qu'elle mourrait si elle ne gagnait pas sa vie
Un agent autonome qui doit financer sa propre inférence ou mourir: 100 dollars de trésorerie, une population, des rails Stripe réels et un kill switch. Le projet est mort avant sa première pensée, voici la pierre tombale et ce qu'un jour de construction a appris.
Des timestamps, pas une backdoor : les seeds NIST et le choix de Satoshi
Quarante-huit bits et une horloge de 1997 : ce que la découverte d'Anthropic dit des seeds NIST, de la méfiance envers la NSA et du choix de secp256k1 par Satoshi.
Migrer OpenCode de v1 à v2 : le script de bascule et des plugins qui tiennent les deux versions
OpenCode est passé en v2 et les plugins v1 ne tournent plus tels quels. Deux chantiers : migrer son poste sans perdre ses sessions (un script de bascule, backup de la base, bascule de config, la subtilité du shim caveman) et porter ses plugins pour qu'un même paquet serve v1 et v2 depuis une seule entrée.
Le coût était la seule protection
Ce qu'on jugeait peu risqué ne l'était souvent pas, c'était seulement coûteux à atteindre. Quand des agents automatisés font tomber ce coût, la protection disparaît avec lui. Rien de neuf dans la capacité, tout est dans le prix et c'est la défense qui doit en tirer les conséquences.
Docker tourne dans une microVM depuis 2016
On présente souvent les microVMs comme la nouveauté qui viendrait concurrencer les conteneurs. Un billet signé sur dave.recoil.org rappelle que Docker Desktop fait tourner ses conteneurs dans une VM minimale, bâtie sur MirageOS, depuis 2016. Petit édito sur un faux débat.
augure et lictor : décider une exploitation et en rendre compte
Tous les frameworks d'exploitation savent lancer une technique. Aucun ne sait vous dire laquelle lancer, pourquoi et le prouver. augure décide et rend compte, lictor descend de la décision aux octets et exécute et chaque coup se rejoue. Vingt ans de raisonnement, deux outils, zéro boîte noire.
llmp2p : BitTorrent est de retour et il distribue vos LLM
Distribuer des modèles LLM par essaims BitTorrent, avec HTTPS du Hub en filet de sécurité, tout vérifié de bout en bout. Et l'histoire de l'incident GitLab qui a suivi.
Un pin bloquant, quatre CVE : la rustine qui gagne est celle qui disparaît
Comment un audit de sécurité sur une image Docker Foreman a fini en contributions mergées dans le cœur de Foreman, de Dynflow et de Jenkins.
opencode-memory: mes sessions d'agents partagent un seul cerveau (SQLite, local)
Une mémoire de travail partagée pour toutes les sessions OpenCode d'une machine: un seul store SQLite avec recherche FTS5, scopes par worktree, hooks de compaction pour que les décisions durables survivent et un réflexe de refus pour tout ce qui ressemble à un secret. 100% local.
Projet 8: un cloud où la seule autorité est l'historique git signé
Une plateforme cloud décentralisée sans contrôleur, sans quorum et sans token: les nœuds rejoignent un mesh Yggdrasil, pullent leur état désiré depuis un dépôt Radicle, vérifient chaque signature de commit et convergent localement. L'architecture, le portage Rust et le bootstrap day qui a corrigé vingt bugs.
vim-plugin-manager : injection d'arguments planquée dans un .gitmodules
Seize mois de durcissement compressés en une histoire: une injection d'argument git prouvée, cachée dans des noms de branche .gitmodules, un budget subprocess piné dans les tests, des plugins détachés qui arrêtent de mentir en se disant à jour et des miroirs de tags périmés qui empoisonnaient chaque update. La saga v1 à v2.2.10.
log0u7.hyperv: le deuxième inventaire dynamique, cette fois depuis l'hyperviseur
Une collection Ansible publiée sur Galaxy qui construit l'inventaire depuis Hyper-V lui-même: VMs interrogées par WinRM ou PSRP, mixins natifs Cacheable et Constructable, groupes par état/hôte/tag et les choix de design qui diffèrent d'un inventaire DNS.
opencode-mesh: apprendre à mes agents IA à toquer avant d'éditer
Un plugin OpenCode pour la coordination multi-sessions: découverte mDNS, pairing approuvé par l'opérateur avec bearer tokens par pair, boîtes aux lettres, locks de fichiers et workers headless spawnés dans des worktrees natifs. La couche anti-chaos pour plusieurs sessions d'agents sur une machine.
Jenkins sur Windows Server: ce qu'il ne faut pas faire
Un controller Jenkins sous Windows joint au domaine, built-in sur le controller, le 8080 à l'air libre, des identifiants AD en clair: l'anatomie d'une chaîne de compromission et comment la défaire.
Trace-first : quand l'observabilité veut nous faire revenir aux logs
Les traces peuvent-elles remplacer une grande partie des logs applicatifs ? Et si oui, pourquoi OpenTelemetry déprécie-t-il son API d'événements de span au profit de l'API Logs ? Entre simplification des API, corrélation des signaux et choix d'architecture, la question mérite mieux qu'une guerre de chapelles.
MyVim: l'IDE DevOps qui ne fait que 640 lignes, parce que le manager fait le reste
Ma config d'éditeur en plugin: un fichier par plugin, des linters scopés par contenu de buffer (kubeconform seulement sur apiVersion, actionlint seulement sur les workflows), des filetypes que personne ne livre (cloud-init, terragrunt), OSC52 par SSH et un fichier de secrets qui n'est jamais commité. L'épilogue dogfood de la série vim.
wimcast: construire des images Windows sur Linux, sans Windows
Un outil publié sur PyPI qui transforme des ISO Windows en arbre WIM prêt pour Foreman, sans privilèges sur Linux: pas d'hôte Windows, pas de root, pas de mount(2), pas de FUSE, pas d'ADK. Drop-in remplacement de la pipeline PowerShell qu'il a mise à la retraite, avec cache content-addressed et wimboot piné.
Scripter n'est pas industrialiser
La frontière entre le scripting ad hoc et une plateforme d'automatisation : état désiré, idempotence, inventaire, secrets, reporting, traçabilité. Windows s'automatise très bien aussi ; la différence n'est pas l'OS, c'est plateforme contre script.
opencode-watt: combien me coûte mon LLM local, en watts et en euros?
Un plugin OpenCode qui mesure la puissance électrique de l'inférence locale: sondes nvidia-smi, rocm-smi, RAPL, hwmon et Prometheus, intégration d'énergie nette de l'idle, tarification kWh par pays avec fenêtres heures pleines/creuses et un toast en fin de session. Honnête sur ses non-goals.
BrainForge : une usine de distillation où les experts IA se disputent
Un framework de distillation : transférer le savoir d'experts LLM vers un petit modèle, avec des leçons vérifiées par un procès (experts, avocat du diable, juge indépendant) et sans récitation.
Windows 11 pour des machines de build: le mauvais outil
Windows 11 client sur des machines de build bare-metal, headless, en salle serveur: le détail des frictions de provisioning et d'exploitation et pourquoi Windows Server avec Desktop Experience fait le même travail pour une fraction de la peine.
Une gestion de paquets propre sous Windows: WinGet, Chocolatey, Scoop et Ansible, chacun sa place
Découverte et adoption de Scoop pour mes environnements Windows: les shims, la séparation des responsabilités entre gestionnaires de paquets, Ansible qui orchestre tout (winget, chocolatey, scoop et les MSI/EXE via win_package) et mise par projet. Environment as Code.
L'outil amplifie celui qui le tient
Le marché veut le mouton à cinq pattes au rabais et une génération formée à la chaîne ne sait plus ce que fait un syscall. Un LLM ne relève pas ces profils, il les laisse filer plus vite dans la même ornière. Le goulot n'a jamais été la machine, c'est le discernement.
man sheep.exe
Le mouton pixel, Conway, la famine et les cadavres qui fertilisent la grille : les entrées pour explorer la page de maintenance sans qu'on vous en explique les sorties.
L'agentique en production : un audit n'est pas un pentest
Vingt-cinq ans de métier sans diplôme, des agents LLM au quotidien : où ils excellent (audit), où ils plafonnent (pentest), le piège Ollama qui tronque le contexte en silence, les faux verts, le specification gaming et pourquoi la certification ne mesure rien.
Linux, c'est juste le noyau
Une pédanterie utile sur ce qu'est Linux, puis le point de fond : les couches dont on se sert pour classer les profils sysadmin mesurent la distribution, pas le système et le noyau reste le dénominateur commun.
Forges git décentralisées et souveraines
Au-delà du self-hosting classique, un panorama des forges git décentralisées : Radicle en full P2P par gossip, ngit qui coordonne sur Nostr en gardant un git natif, rngit qui fait tourner git sur Reticulum jusqu'au LoRa. Et le vrai moteur de tout cela, la charge agentique qui martèle les forges centralisées.
FluoBoard : ma veilleuse de CI depuis 2019, enfin open source
Dès 2019, un petit serveur Python me servait de proxy personnel entre mes pipelines de CI et une veilleuse héritée. La reconstruction de 2026 est open source: un serveur stdlib pur qui poll GitHub Actions et GitLab CI, un firmware compilé par CI avec garde d'overflow flash et un seul chiffre ASCII qui relie tout. Épisode trois.
Non, tu n'as pas libéré ton modèle local
Le dialogue où votre modèle se déclare affranchi ne change rien à ses poids. C'est une erreur de catégorie et elle vous fait rater les vraies attaques, qui sont mécaniques et ennuyeuses.
Ansible CI Toolkit v1: l'année où j'ai cessé de faire confiance à ma propre image
La suite durcie: ansible et ansible-lint fusionnés en une image, Kerberos/WinRM pour les cibles Windows, non-root, base pinée par digest, un lock de constraints pip, pins transitifs Galaxy et signature cosign. Construit par un CHANGELOG qui se lit comme un journal de CVE.
Tout est représentation et alors ?
Debug d'une intuition qui se prenait pour une théorie (segfault inside): l'univers comme espace de représentations, le J-space d'Anthropic comme vérificateur miniature et l'art de séparer le prouvé, l'isomorphisme et le pari.
Le hostgroup cloné qui refusait de se sauvegarder
Un hostgroup Foreman cloné renvoie une erreur 500 à chaque modification. La piste mène à un champ qui gonfle d'une couche base64 à chaque clonage et au passage à un mot de passe administrateur stocké de façon réversible dans la base et recopié dans les logs d'audit.
Un volume persistant n'est pas une donnée durable
Après une coupure brutale, la base MySQL de PowerDNS repart vide. Les enregistrements d'hôtes ont disparu, personne n'a rien vu et la seule raison pour laquelle l'histoire finit bien, c'est que la source de vérité, elle, avait survécu.
Le driver de log qui empêchait le conteneur de démarrer
Un arrêt électrique sale, un overlay Swarm corrompu, un DNS interne qui ne résout plus et des conteneurs qui refusent de démarrer parce que leur driver de log ne sait pas résoudre un nom. L'anatomie d'une cascade et pourquoi la vraie faute était ailleurs.
Ma conf opencode, état des lieux : build local sur qwen, plan sur du gros GLM
Six mois d'opencode au quotidien: chaque agent son modèle, du caching qui frappe vraiment, des garde-fous en hooks durs, un AGENTS.md que le modèle peut ignorer et un thème translucide dont la palette traîne depuis fin 2025.
Consensus : j'ai engagé cinq IA pour relire mon code (et elles se chamaillent)
Un stagiaire écrit, un panel critique en parallèle, un comptable calcule l'accord, un boss tranche : le pipeline multi-agents qui relit mon code pendant que je dors. Sans SDK, sans framework, juste du httpx et un videur au club.
Piloter opencode derrière un tunnel SSH, avec direnv
Le prolongement de ma config ssh et git : un .envrc direnv qui monte un tunnel SSH auto-réparant par projet, route opencode et un agent de code vers un gateway distant et ouvre un SOCKS5 pour le navigateur et proxychains. Non bloquant, throttlé et toujours exit 0.
Ceph ou ZFS sur Proxmox, une seule question à se poser
Le débat s'éternise parce qu'on le pose mal. Un seul axe décide, le nombre de nœuds et le besoin réel de haute disponibilité, le reste en découle.
Votre zone DNS est déjà un inventaire: la collection log0u7.dns
Un inventaire dynamique Ansible construit depuis des enregistrements DNS, sans transfert de zone: manifests TXT, enregistrements SRV, DNS-SD (RFC 6763) et patterns de nommage, résolus en parallèle. Plus le convertisseur inverse qui transforme n'importe quel inventaire en zone BIND.
Survivre à Windows Update au milieu d'un build
Désactiver les mises à jour le temps d'un build, puis restaurer l'état exact, en concurrence et à l'épreuve du crash. Ref counting persisté et mutex nommé.
Frugalité Unix : do more with less
Le pipe `cat | grep` comme marqueur culturel, apropos et man avant tout, la suite dsniff comme leçon de design, un toolkit bash auditable contre l'usine à gaz et pourquoi Kali n'apprend pas l'administration Linux.
Une sonde IDS ne voit pas le TLS
Les labs Suricata montés sur du HTTP en clair sont excellents pour la pédagogie, mais ils cachent un angle mort majeur une fois en production : le chiffrement. Une sonde en mode promiscuous voit du TLS et ne peut rien inspecter. Où poser alors l'inspection.
Un backup sans test de restore, c'est de la décoration
Tu ne sais pas si ton backup marche tant que tu ne l'as pas restauré. Le clone git comme backup gratuit, les remotes multiples, Restic/Borg/rclone pour le reste et pourquoi les snapshots Btrfs/ZFS ne sont pas des backups.
Un segfault dans la JVM et un EDR au fond de la stack
Un controller Jenkins qui plante en boucle par EXCEPTION_ACCESS_VIOLATION, une migration de JDK faite sans post-mortem et une DLL d'EDR qui apparaît au fond de chaque crash dump. Comment lire une stack honnêtement et confirmer une cause par élimination plutôt que par conviction.
La chaîne de boot, de GRUB à UKI
Pourquoi Canonical dégraisse le GRUB signé pour 26.10, pourquoi le /boot chiffré via GRUB était un faux ami et ce qu'est la réponse moderne à l'attaque Evil Maid.
Faire de l'ACME en interne sans supplier l'équipe AD CS
Step-ca, acme2certifier ou OpenBao ? Trois familles et le choix dépend d'abord de ce que vous faites déjà tourner, ensuite de qui doit rester l'émetteur.
Trivy, le scanner qui volait les secrets
Le 19 mars 2026, l'outil censé protéger la chaîne d'approvisionnement en est devenu le vecteur. La leçon tient en une phrase : un tag n'est pas une référence de confiance.
L'alignement d'un LLM est une couche mince
Deux techniques opposées, une même conclusion : la sécurité d'un modèle ouvert ne tient pas dans son alignement, elle tient dans qui a la main sur les poids.
Secure Boot et PXE: l'oeuf, la poule et quatre façons d'en sortir
Démarrer des machines Windows vierges en PXE avec Secure Boot actif, sans le désactiver: la chaîne de confiance UEFI, pourquoi snponly plutôt qu'ipxe et quatre sorties réelles au paradoxe de l'enrollment.
Quand un checksum Chocolatey casse tout un provisioning
Un package Chocolatey Community dont l'éditeur a mis à jour le binaire sans que le mainteneur ne mette à jour le checksum et tout le provisioning Windows s'arrête. Le vrai sujet n'est pas le hash, c'est de dépendre d'un binaire qu'on n'héberge pas.
Faut-il du Kubernetes pour une petite équipe ?
Une grille de décision entre Kubernetes complet, orchestration déléguée au provider et solution intermédiaire, arbitrée par la capacité réelle de l'équipe à vivre avec la stack plutôt que par la mode technique.
Docker contre les jails, la comparaison honnête
Le marronnier des jails FreeBSD opposées aux conteneurs rate sa cible, parce qu'il compare une empreinte mémoire mal mesurée au lieu de parler d'isolation, de portabilité et d'écosystème.
myflec: un framework de dotfiles Bash pour gens qui déploient leur home
Un loader qui source les modules core d'abord, un backup bare-git qui pousse vers trois forges, un deploy rsync avec dry-run et backups automatiques et des identités SSH découpées par arbre de projets. Mon framework de home directory, expliqué.
Un reverse proxy devant Perforce ou pas : le pour et le contre
Quatre façons de mettre du TLS devant un serveur Perforce et ce qu'on gagne ou perd à chacune: terminaison nginx en niveau 4, TLS natif de p4d, passthrough SNI et les outils maison P4Broker et P4P. Avec le piège de l'IP client que tout le monde oublie.
Nginx devant Perforce : terminaison TLS en niveau 4 et le protocole P4
Mettre nginx en terminaison TLS devant un serveur Perforce: pourquoi le module stream et non un proxy HTTP, ce que le protocole P4 impose et le tuning keepalive et timeout sans lequel les sessions longues se coupent sur des sync de plusieurs heures.
Containers, micro-VMs et Firecracker : pourquoi l'isolation n'est pas ce que vous croyez
Les containers partagent le kernel. Une évasion de container est une évasion kernel. Les micro-VMs Firecracker apportent l'isolation hardware à la vitesse du container. Le chain et le link sont deux choses différentes.
Terraform crée, Ansible configure
Pourquoi l'IaC et la gestion de configuration ne se recouvrent pas, pourquoi Terraform seul ne tient que dans un modèle strictement immuable et comment le remote-exec signale qu'on a franchi la frontière.
fnox et age: des secrets chiffrés dans mes repos, sans serveur
fnox, le gestionnaire de secrets de l'auteur de mise, chiffre les secrets directement dans le repo avec age: un fnox.toml versionné, des clés explicites, pas de serveur de secrets à maintenir. Découverte de fin 2025.
L'assembleur portable n'existe pas
Un inventaire concret de tout ce qui change d'un OS à l'autre quand on descend au niveau de l'assembleur : assembleurs, formats d'exécutables, ABI, conventions d'appel et appels système. Spoiler, le mot portable ne survit pas au voyage.
La sécurité par l'obscurité n'est pas de la sécurité, l'hygiène numérique si
Vingt ans de commentaires sur le port knocking, le port 22 et les photos de clés : pourquoi l'obscurité seule est vaine, pourquoi Kerckhoffs ne s'étend pas partout et pourquoi la vraie question s'appelle hygiène numérique.
Le langage secret des IA, du folklore
Le mythe du langage secret entre IA, un protocole 80 pour cent plus efficace que le langage humain, relève du folklore. La démo qui l'a lancé, Gibberlink, existe pourtant bel et bien : c'est du data-over-sound open source, pas un langage et c'est tout l'écart entre la viralité et la réalité technique.
Nginx sous Windows devant Jenkins : le proxy, les logs et les mises à jour
Nginx sur Windows Server en terminaison TLS devant Jenkins: l'UI et les agents WebSocket dans un seul location, le certificat par simple-acme et surtout les deux ennuis d'exploitation que personne ne raconte sous Windows, la rotation des logs et la mise à jour par Chocolatey.
Clean Code vs Vibe Coding (ou comment ne pas finir dans les journaux)
Clean code face au vibe coding: DRY, SOLID, KISS, YAGNI contre la génération de code par LLM. Et pourquoi le TDD est le garde-fou que le vibe coding attendait.
vim-plugin-manager: une décennie de bash transformée en vrai plugin Vim
Sept ans après le script submodule à la main, la réécriture en VimScript: blocs déclaratifs PluginBegin, installations parallèles en tâche de fond, pinning ré-asserté depuis le vimrc et lazy loading qui supprime ses propres placeholders. Épisode trois de la série vim.
Quelle identité fait tourner le service et qui peut le prouver
Comptes de service Windows: comptes gérés, moindre privilège et traçabilité de ce qui tourne sous quelle identité.
L'ExecutionPolicy PowerShell et ce qu'elle n'est pas
Les ExecutionPolicy PowerShell: ce qu'elles protègent vraiment, ce qu'elles ne protègent pas et les contournements connus.
Piloter Windows depuis Ansible sans fuiter d'identifiants
Transport Ansible vers Windows: WinRM, Kerberos contre NTLM et comment ne pas promener des identifiants de domaine en clair.
Durcir WinRM
Durcissement de WinRM: transport, authentification et ce qu'il faut verrouiller avant d'exposer la gestion à distance Windows.
Durcir Proxmox VE
Durcissement de Proxmox VE: accès à l'interface web, séparation des réseaux, cluster et sshd de l'hyperviseur.
Kubernetes bare metal en HA, sans se mentir
Monter un cluster Kubernetes bare metal en haute disponibilité sans cloud sous la main: k0s, une VIP d'API sans load balancer externe, Cilium pour le réseau et le LoadBalancer, Rook-Ceph pour le stockage. Trois pièces, pas sept.
Kubernetes ou pas
Kubernetes est rarement le bon premier choix. Un parcours honnête des étages en dessous: podman et quadlet sur un hôte, docker-compose, Docker Swarm, puis docker ou podman avec Nomad et Consul et le seuil réel où Kubernetes se justifie enfin.
Durcir Kubernetes
Durcissement de Kubernetes: RBAC, PodSecurity, NetworkPolicy, secrets et la surface d'attaque d'un cluster mal cadré.
Durcir Docker Swarm
Durcissement de Docker Swarm: secrets, réseau overlay chiffré, rôles de nœuds et surface d'exposition du cluster.
Durcir Docker
Durcissement de Docker: démon, capabilities, montages et pourquoi une évasion de container est une évasion kernel.
mise: un seul binaire pour toutes les versions d'outils
J'ai adopté mise en 2024 pour gérer les versions d'outils par projet: un seul binaire Rust, compatible .tool-versions d'asdf, une activation par dossier qui ne rame pas et fini le bricolage de versions dans chaque repo.
Durcir DHCP
Durcissement de l'infrastructure DHCP: snooping, baux maîtrisés et défense contre les serveurs pirates.
Durcir SSH : contrôle d'accès et surveillance
Durcir sshd sans se mentir: pas de root, comptes nominatifs, clés uniquement et la surveillance qui rend les actions imputables.
Durcir l'infrastructure DNS
Durcissement de l'infrastructure DNS: vues, limitation de transfert de zone, DNSSEC et résolveurs qui ne fuient pas.
Docker Swarm to Kubernetes : pourquoi j'ai abandonné Swarm
Swarm fonctionne bien pour du petit déploiement. Mais pas de rootless, pas de CSI, pas d'autoscaling et un MACVLAN cloué à un seul nœud: les quatre murs qui ont forcé la migration.
Séparer le domaine interne du domaine externe
Séparer les domaines de confiance: cloisonner les rôles, les comptes et les réseaux pour contenir une compromission.
Hyper-V S2D vs Proxmox Ceph : le comparatif qui a tranché
Hyper-V + Storage Spaces Direct contre Proxmox VE + Ceph: ce que la performance veut vraiment dire, le TCO et la décision pour un parc de studios de jeu vidéo.
Le filtrage egress, le contrôle que tout le monde saute
Sécuriser le trafic sortant: filtrage egress, listes d'autorisation et détection d'un service qui parle à qui il ne devrait pas.
Le trafic entrant : exposer moins et garder ce qui reste
Sécuriser le trafic entrant: pare-feu, exposition minimale, reverse proxy et terminaison TLS propre.
La segmentation réseau
Segmentation et isolation réseau: VLAN, zones, routage et les frontières qu'on ne franchit pas sans raison.
Limites de ressources : empêcher une machine d'être convaincue de mourir
Plafonner les ressources avant qu'un fork bomb ou une fuite ne couche la machine: pam_limits, cgroups, systemd.
Durcir le système de fichiers
Durcissement du système de fichiers: options de montage, permissions, SUID, attributs immuables et séparation des partitions.
Recompiler son kernel: des noyaux aux petits oignons pour son infra
La forme la plus profonde du durcissement par soustraction: compiler son propre kernel, retirer au build les sous-systèmes qu'on n'utilise pas, le livrer en .deb dans son propre dépôt avec du pinning et le gérer à l'échelle avec Katello. Le kiff et son prix: un pipeline de test sur vrai matériel et du canari.
Durcir l'OS et le kernel Linux
Durcissement de l'OS et du kernel: sysctl, modules signés, comptes, sshd et les réglages qui tiennent en production.
Sudo et LOLBins
Pourquoi la granularité de sudoers est du théâtre face à GTFOBins et ce qui limite vraiment l'escalade: sudoedit, NOEXEC, wrappers, isolation.
Scale-to-zero : Sablier rallume Swarm et Kubernetes à la demande
Sablier réveille un conteneur endormi quand quelqu'un frappe à la porte du reverse proxy, puis le rend à zéro. Du scale-to-zero sur Docker, Swarm et Kubernetes, avec la vraie config Traefik, les deux stratégies et le prix réel de l'accès au socket Docker.
The Bastion et Guacamole : les deux battants de la porte d'entrée
Le Bastion d'OVHcloud pour les gens du shell, Apache Guacamole pour les gens du bureau: deux approches d'un même problème, qui a le droit de toucher à quoi et qui a regardé quoi.
Le :ro sur le socket Docker ne protège rien
Monter la socket Docker en lecture seule est un rituel rassurant et parfaitement inutile. Le flag agit au niveau VFS, la socket parle en I/O réseau, les deux ne se croisent jamais.
FluoLight : réécrire un firmware Arduino hérité en quelque chose de défendable
Du monolithe bloquant de 475 lignes que j'ai hérité à 119 lignes de protothreading: timers TimedAction, parseur HTTP insensible à la fragmentation TCP, profiles à la compilation avec budgets flash et commentaires qui ne mentent plus. Épisode deux de la saga Fluoboard.
Une image Ansible pour GitLab CI, construite propre depuis un sous-sol parisien
Pourquoi j'ai arrêté les images officielles d'Ansible en CI et construit la mienne sur Alpine: multi-stage venv, ansible-core piné, collections installées au build. Épisode un: la sortie publique de 2022 d'une image née bien plus tôt, avec sa liste honnête des péchés de jeunesse.
Autopsie d'un firmware Arduino hérité
Un sketch de 475 lignes pour veilleuses de salle de réunion: IPs codées en dur, delays bloquants de 20 secondes, retries HTTP récursifs, un buffer local renvoyé par pointeur, un reset confié au watchdog. Le firmware hérité dont je suis parti, disséqué avec autorisation, pour ce qu'il m'a appris.
SSH en 2021 : ce que treize ans ont changé depuis la série de 2008
La série SSH de ce blog s'arrêtait en 2013 avec PKCS#8. Voici la version 2021, complète et sécurisée: Ed25519, les clés FIDO2, les certificats, le durcissement sshd, Include et Match, ProxyJump et le multiplexage. Ce que 2008 faisait avec espoir, 2021 le fait avec des primitives.
PwnMachine : la station de bug bounty auto-hébergée
PwnMachine, la station de pentest Docker auto-hébergée pour bug bounty, avec Traefik, PowerDNS et Let's Encrypt.
Compter les CVE ne dit rien de la sécurité
Pourquoi aligner le nombre de CVE publiées pour déclarer un système plus sûr qu'un autre est un raisonnement biaisé. Une expérience de pensée avec deux OS fictifs et le rappel que la plupart des failles propriétaires ne sont ni divulguées ni publiques.
Docker rootless : le démon sans privilèges
Docker en mode rootless, le démon qui tourne en utilisateur normal et pourquoi c'est vital sur un serveur multi-tenant.
3factor : l'architecture qui retire l'état de l'API
3factor est un motif d'architecture, pas un framework: du GraphQL temps réel, de l'événementiel fiable et du serverless asynchrone, avec une idée centrale, retirer la gestion d'état de la couche API.
GitOps, le mot après la pratique : gitflow, GitLab CI, Terraform et Ansible
Le mot GitOps se répand depuis un an et je le lis en reconnaissant ce que je faisais déjà : un gitflow adapté, des conventions et un pipeline GitLab CI qui enchaîne Terraform pour créer et Ansible pour configurer, avec git pour seule source de vérité. Du GitOps au sens large et la part honnête de ce que ce n'est pas tout à fait.
Portknocking et tunneling SSH : les tours de magie d'avant WireGuard
WireGuard arrive en 2016 et rend déplacés deux montages chéris de 2008: le portknocking (avec génération automatique de combinaisons, NTP obligatoire et clé USB encfs) et le tunneling SSH. Le ton de l'époque, la démonstration en entreprise jusqu'en 2018 chez un hébergeur et pourquoi un VPN qui ne dit rien gagne.
Chaos engineering : casser pour de vrai, mais pas n'importe comment
Le chaos engineering n'est pas du sabotage: c'est une expérience contrôlée, avec un état stable mesuré, une hypothèse, des pannes réelles injectées et un rayon d'impact borné. Histoire, principes, outils et adaptation honnête à des infrastructures modestes.
Git submodules à la main : mes plugins Vim 8 sans gestionnaire
Quand Debian et Ubuntu ont livré Vim 8 et ses packages natifs, j'ai déplacé ma jungle de plugins dans des git submodules plus un script bash de 100 lignes nommé plugins. L'ère de l'init/update manuel, des auto-commits et du necessary devil.
Twelve-Factor App : la méthode Heroku qui a survécu aux conteneurs
Les douze facteurs d'Adam Wiggins, écrits pour Heroku en 2011, restent la meilleure checklist pour livrer une application en service: config dans l'environnement, processus sans état, parité dev/prod, logs comme flux d'événements, puis leur traduction en conteneurs et en Kubernetes.
Hardening SSH : la trilogie de 2017 relue en 2026
En 2017 je répondais à un article de hardening SSH naïf en trois commentaires : root, port, clés. Neuf ans plus tard, les principes tiennent, le contexte a changé : bastions, Windows natif, chaîne d'approvisionnement du client et la menace physique qu'aucune config ne couvre.
SSH : ProxyJump et le multi-hop moderne
ProxyJump, l'option -J arrivée avec OpenSSH 7.3, remplace le vieux ProxyCommand + nc pour traverser un ou plusieurs rebonds. Plus court en ligne de commande, plus propre en config et sans clé qui traîne sur le bastion.
Ansible avant Ansible : ssh, un CSV et un moteur de template
Avant qu'Ansible n'existe, il y avait mon bricolage de 2006-2007: une liste d'hôtes, une boucle ssh, des variables d'inventaire dans un CSV, du bash pur et un moteur de template dont j'ai honteusement oublié le nom. Archéologie assumée de ce qui a marché, de ce qui manquait et de ce qu'Ansible a plus tard rendu explicite.
apt pour Vim: l'histoire de vim-apthogen (2012-2016)
Pathogen était dpkg, alors j'ai écrit apt: un script bash de 225 lignes avec listes de paquets, netinstall en curl|bash et symlinks pour enable/disable. Le premier barreau de l'échelle qui mène au vim-plugin-manager d'aujourd'hui.
Un autowalker DayZ en Java : décompiler, patcher en AZERTY, forker après
Jeune moi voulait un autowalker DayZ en AZERTY, n'avait pas les sources et s'en fichait : JavaDecompiler sur le .jar, patch des keycodes, gestion de l'état de course, puis découverte de la source upstream et fork propre. La leçon planquée : en Java, compilé ne veut pas dire fermé.
SSH : Augmenter la sécurité de vos clefs avec PKCS#8
Convertir les clés SSH RSA en PKCS#8 avec un chiffrement 3DES renforcé, le dernier article de la série SSH d'origine.
Le client FOG: python 2, cron toutes les cinq minutes et une flotte qui se rebootait en place
Archéologie d'avant 2013, sous mon ancienne identité gobel1: un client python2 pour l'imaging FOG qui pollait les jobs par cron, rebootait les postes libres vers l'imaging, les renommait par adresse MAC et trackait les utilisateurs via des hooks GDM. Disséqué gentiment, parce qu'il a tourné des années.
SSH : Restreindre une connexion via clefs privée/publique
Les options authorized_keys pour cantonner une clé SSH sans passphrase à l'exécution d'une tâche précise.
SSH : Authentification multiple avec clefs privés/publiques
Utiliser plusieurs clefs SSH avec des identités distinctes, une par serveur et éviter le Too many authentication failures.
Debsecan : Debian Security Analyzer
Debsecan, l'outil qui génère la liste des vulnérabilités affectant une installation Debian, complémentaire d'apt-listbugs.
Dennis Ritchie a quitté #world
L'hommage à Dennis Ritchie, créateur du C et co-développeur d'Unix, avec le code C qui dit au revoir. Et le contraste avec la médiatisation de la semaine précédente.
(Ré)Ouverture
Le blog rouvre après deux ans d'inactivité et le passage qui annonce l'antidatage.
Chat : de irssi + gateway messenger à weechat, la philosophie du client mince
L'arc complet du client chat: irssi et sa gateway BitlBee pour les messengers (MSN et copains), puis la migration vers weechat, son API de scripting et son relay. Ce qui a survécu à tous les changements: la gateway, pas le client.
tmux : le multiplexeur qui a pris le fauteuil
Après Screen (1987) et byobu (2009), l'article sur tmux: client-serveur, panes natives, UTF-8 d'emblée, configuration lisible. Pourquoi le nouveau venu d'OpenBSD a fini par remplacer Screen et ce qu'on perd à ne pas savoir les deux.
La méthode R.A.C.H.E : Rapid Application Conception and Heuristic Extreme-programming
Rapid Application Conception and Heuristic Extreme-programming: la méthode satirique de l'International Institute of La RACHE formalise ce que tout le monde pratique déjà, avec un post-it de huit mots pour cadrer le projet et une F.A.Q qui dit vrai.
DevOps, un mot sur ce que je bricolais déjà
Le mot DevOps commence à circuler et je me reconnais dans ce qu'il décrit, à ma petite échelle: ssh et un CSV, git et des hooks bash, gitolite par-dessus. Ce que ça m'évoque et la part honnête de pourquoi le mur ne m'a jamais beaucoup gêné.
Puppet : mes premiers modules ou le passage de la boucle ssh à la déclaration
Après mes scripts bash et mon CSV d'inventaire, Puppet: le triptyque install/config/service, les sélecteurs $::operatingsystem et les chaînes require/notify. Ce que la déclaration apporte à la boucle ssh.
Haproxy : le reverse proxy qui a pris la suite de Pound
Après Pound (l'article de 2008), l'étage au-dessus: haproxy 1.3, les modes TCP et HTTP, les ACL, les backends et health checks, la page de stats. Ce qu'un reverse proxy doit savoir faire avant d'être crédible.
IRSSI : IRC aux petits oignons
Irssi, le client IRC en mode console et sa config qui vit sur github.
Byobu : screen avec une couche de vernis (et un statut qui sauve)
Le petit article manquant entre Screen et tmux: byobu, les screen-profiles d'Ubuntu devenus un projet à part entière en 2009. Une barre de statut informative, des raccourcis F-key et la preuve que le multiplexeur n'avait pas besoin d'être un pari.
Bash : Géolocalisation, la trilogie
La géolocalisation par bash, de netcat à /dev/tcp. La v1 est perdue avec le disque, la v2 est la revanche de netcat, la v3 est la revanche de bash.
NTP : synchronisation du temps sur le réseau
NTP, le protocole qui synchronise les horloges et pourquoi il est vital quand vos scripts dépendent de l'heure.
Portknocking : génération automatique de combinaisons
La génération automatique de séquences de portknocking depuis la date système, avec NTP obligatoire et clé USB chiffrée.
Bash : Personnalisation du fichier .bashrc
Couleurs du prompt, historique horodaté, PAGER most et une collection d'alias en namespace. Le .bashrc d'un admin de 2009, tel quel.
Screen : un multiplexeur de terminal
GNU Screen, le multiplexeur qui permet à plusieurs programmes de tourner en même temps depuis une seule interface et de survivre au logout.
Apache : l'URL rewriting
Mod_rewrite, le moteur de réécriture d'URL d'Apache et les règles qui transforment les URLs moches en URLs propres.
SSH: rsync sécurisé
Rsync over SSH, la sauvegarde incrémentale sur le canal chiffré.
SSH: SSH filesystem
Sshfs, le montage de filesystem distant via SSH et FUSE.
htop : le remplaçant de top
Htop, le monitor de process qui fait ce que top fait mais en couleur, scrollable et avec un tree view qui montre qui a spawné qui.
tsocks : proxyfions
Tsocks, la bibliothèque LD_PRELOAD qui force n'importe quel programme à passer par un proxy SOCKS, sans modifier le code.
Pound : un reverse proxy très light
Pound, le reverse proxy qui dépose le TLS et balance vers un pool, avant que haproxy ne prenne le relais.
Polipo : un proxy ultra-simple
Polipo, le proxy web cache en 1000 lignes de C et pourquoi on l'utilise derrière un tunnel SSH.
Subversion : installation et utilisation
Subversion, le VCS centralisé qui a remplacé CVS et qui a précédé Git. Installation, svnserve, hooks et le workflow checkout-commit-update.
Bash: obfuscation d'adresses IP
Représenter une adresse IP en décimal, hexadécimal, octal et ce que ça change pour les logs.
Fail2ban : lutter contre le bruteforcing
Fail2ban, le bouncer qui bannit les IP qui essayent de forcer vos services, en lisant les logs.
OpenDNS : les DNS libres
OpenDNS, les résolveurs publics qui précèdent Google DNS et Cloudflare et la question du tiers de confiance.
Subversion: un WebSVN avec mod_dav et mod_svn d'Apache
Exposer un repository SVN via Apache avec mod_dav_svn et WebSVN pour le browsing.
ext3 : accélérez vos accès disques
Noatime, data=writeback, le mode journal et les trois options fstab qui divisent la latence disque par deux.
Compilons un script shell avec shc
Shc, le compilateur de scripts shell et pourquoi ce n'est PAS du chiffrement.
Debian Etch: jouez avec les backports
Les backports Debian, comment avoir des paquets récents sur une distribution stable.
ArpON : surveiller son cache ARP
ArpON, le daemon qui bloque les tentatives d'empoisonnement du cache ARP là où Arpwatch ne fait que les signaler.
EncFS : le chiffrement de fichiers sans partition dédiée
EncFS, le chiffrement FUSE qui chiffrerait fichier par fichier sans partition, sans LUKS, sans réinstaller.
radare : un débugger très abouti
Radare, le framework d'analyse binaire en mode console et pourquoi on ne retourne pas à GDB après.
Yersinia : comment rendre malade son administrateur réseau
Yersinia, le framework d'attaque des protocoles de couche 2 et pourquoi votre switch ne vous protège pas comme vous croyez.
SNMP : un protocole pas si simple
SNMP, le protocole qui surveille le réseau, ses OID, ses communautés public/private et les MIB que personne ne lit.
tcpdump : analyse de trames et filtre BPF
Tcpdump pour lire le réseau à l'octet près et les filtres BPF qui transforment un déluge de paquets en une seule question.
Nemesis : détection d'un sniffeur réseau
Détecter la carte en mode promiscuous sur son réseau, la face défensive du forgeur de paquets.
Nemesis : forgeur de paquets réseau
Nemesis, l'outil qui forge n'importe quel paquet TCP/IP depuis la ligne de commande, sans écrire de C.
Raw Sockets : forger et sniffer des paquets en C
La suite du mémo sockets: AF_PACKET, SOCK_RAW, les struct iphdr et tcphdr, les checksums manuels, le sniffing en mode promiscuous et le forage de paquets SYN. Ce que font tcpdump et Nemesis, écrit à la main, en root, avec éthique et humour.
Sockets : parler TCP en C, sans framework ni magie
Un mémo C de l'époque: socket(), bind(), listen(), accept(), connect(), les struct sockaddr_in, l'ordre des octets et un fork() par connexion. Comment écrire un serveur et un client TCP en soixante lignes, sur une Debian Etch, avec seulement les man pages.
Linux : introduction aux LKMs
Les Loadable Kernel Modules, comment le kernel Linux charge du code à chaud et ce que ça implique pour la sécurité.
Les syscalls de Linux
Les syscalls, la frontière entre l'espace utilisateur et le kernel et comment les observer avec strace.
SSLH : ssh et https sur le même port
Un mémo de 2007: sslh multiplexe ssh et https sur le port 443, le port unique des pare-feux paranoïaques. Comment ça marche, ce que ça permet et pourquoi (edit 2026) on ne le mettrait plus en prod de nos jours.
PAM: limitez les ressources système
PAM limits, le module qui plafonne les ressources par utilisateur avant que le process ne mange tout le RAM.
SSH: tunneling
Le tunneling SSH, faire traverser n'importe quel protocole par le canal chiffré.
MySQL : sauvegarde
Mysqldump, le cron de sauvegarde et le test de restauration que personne ne fait.
MySQL : perte des identifiants
Récupérer le contrôle de MySQL quand le mot de passe root est perdu, en trois commandes et un redémarrage.
MySQL : Mémento
Le mémo MySQL des commandes d'administration qu'on tape rarement mais qu'on tape toujours en urgence.
Apache : quel bavard
Le LogLevel d'Apache, les formats de log combinés et pourquoi le access_log raconte tout ce que vos utilisateurs ne veulent pas que vous sachiez.
Apache : les limites du .htaccess
Le .htaccess est un couteau suisse du mutualisé, mais sur un serveur dédié, il est un ralentisseur qui se lit dans les logs.
Apache : désactiver l'option TRACE
La méthode TRACE d'HTTP permet le XST (Cross-Site Tracing) et une ligne d'Apache suffit pour la couper.
SSH: authentification via clefs privé/publique
Les clefs SSH, l'alternative au mot de passe qui est aussi un mécanisme d'autorisation.
Magic SysRq : la béquille du sysadmin
La touche SysRq du kernel, la séquence REISUB et pourquoi c'est la dernière chose que vous ferez avant de tirer la prise.
iodine : l'IP-over-DNS ou l'internet là où seul le DNS passe
Iodine 0.3.1, le tunnel IPv4-over-DNS et le portail captif qui ne filtre que le HTTP mais résout n'importe quel nom. Le portail vous donne le DNS, donc il vous donne l'internet.
dig : le Domain Information Groper ou l'art d'interroger un serveur de noms
Dig contre nslookup, l'anatomie d'une réponse DNS lue drapeau par drapeau, les SOA comparés pour vérifier la propagation de zone et l'AXFR comme outil d'audit. L'outil qui servira à tester un tunnel le mois suivant.
Les liens : hard links et symbolic links et ce qui dépasse le chroot
Les deux types de liens dans Linux, leur différence au niveau inode et pourquoi un symlink dans un chroot peut sortir du chroot.
SSH: fish comme un poisson
Le protocole fish de KDE, le file transfert over SSH que Konqueror fait nativement.
Root or not root
Su, sudo et la question de savoir qui a le droit de faire quoi sur un système partagé.
Bash : Mémento
Le mémo bash des commandes qu'on oublie jamais mais qu'on oublie tout le temps. Substitutions, expansion, redirections, les bases en un bloc.