From 29492484463695da4a4ae699a44eceb44a5dd377 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9drix?= Date: Sun, 17 May 2026 22:14:05 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20s=C3=A9curit=C3=A9=20=E2=80=94=20remote?= =?UTF-8?q?=20SSH=20+=20v=C3=A9rification=20GPG=20=C3=A0=20l'installation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remote origin passé en SSH (token retiré de l'URL) - make install dépend de make verify (vérifie la signature GPG du dernier tag) - Sans tag signé : avertissement non bloquant (bootstrap) - Avec tag signé et clé invalide : erreur bloquante - DEVELOPER.md : instructions pour signer les tags de release - README.md : mention de l'import de clé GPG Co-Authored-By: Claude Sonnet 4.6 --- DEVELOPER.md | 19 ++++++++++++++++++- Makefile | 19 +++++++++++++++++-- README.md | 11 +++++++++-- 3 files changed, 44 insertions(+), 5 deletions(-) diff --git a/DEVELOPER.md b/DEVELOPER.md index eae9f9b..8aba2a5 100644 --- a/DEVELOPER.md +++ b/DEVELOPER.md @@ -46,4 +46,21 @@ Chaque script doit avoir une fiche `local/share/doc/scripts-bash/.1.md` ave ### Remote Git -Le remote `origin` utilise HTTPS avec le token Gitea intégré dans l'URL (`https://user:TOKEN@git.abonnel.fr/...`). +Le remote `origin` utilise SSH (`git@git.abonnel.fr:cedricAbonnel/scripts-bash.git`). +Les credentials ne transitent jamais dans l'URL. + +### Signature GPG des releases + +`make install` vérifie la signature GPG du dernier tag avant d'installer. +Chaque release doit être taguée et signée : + +```bash +git tag -s v1.x -m "Release v1.x" +git push origin v1.x +``` + +Pour que les utilisateurs puissent vérifier, ils doivent importer la clé publique du développeur : + +```bash +gpg --keyserver keys.openpgp.org --recv-keys +``` diff --git a/Makefile b/Makefile index f9d0c45..236cd65 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,7 @@ DOC_SRC := $(wildcard local/share/doc/scripts-bash/*.md) MAN_PAGES := $(patsubst local/share/doc/scripts-bash/%.md,local/share/man/man1/%,$(DOC_SRC)) # ────────────────────────────────────────────────────────────── -.PHONY: all build install uninstall clean +.PHONY: all build install uninstall clean verify ## Cible par défaut : installe tout dans ~/.local/ all: install @@ -33,8 +33,23 @@ local/share/man/man1/%: local/share/doc/scripts-bash/%.md pandoc -s $< -t man -o $@ @echo " MAN $@" +## verify : vérifie la signature GPG du dernier tag avant d'installer +verify: + @tag=$$(git describe --tags --abbrev=0 2>/dev/null) || { \ + echo " GPG Avertissement : aucun tag signé trouvé — intégrité non vérifiée."; \ + echo " Importez la clé publique du développeur et vérifiez avec : git tag -v "; \ + exit 0; \ + }; \ + if git verify-tag "$$tag" 2>/dev/null; then \ + echo " GPG $$tag : signature valide"; \ + else \ + echo " GPG Erreur : signature invalide pour le tag $$tag"; \ + echo " Importez la clé publique du développeur avant d'installer."; \ + exit 1; \ + fi + ## install : déploie tout dans ~/.local/ (aucune dépendance externe) -install: +install: verify @[ -d "local/bin" ] || { echo "Erreur : lancer depuis la racine du projet scripts-bash"; exit 1; } @mkdir -p "$(INSTALL_BIN)" "$(INSTALL_MAN)" "$(INSTALL_DOC)" "$(INSTALL_YTDLL)/lib" @for f in $(SCRIPTS_SH); do \ diff --git a/README.md b/README.md index 2b4baf9..f22682b 100644 --- a/README.md +++ b/README.md @@ -10,8 +10,15 @@ cd scripts-bash make install ``` -`make install` copie les scripts dans `~/.local/bin`, les pages man dans `~/.local/share/man/man1`, -et ajoute `~/.local/bin` au `PATH` dans `~/.bashrc` si nécessaire. Rechargez votre terminal après l'installation. +`make install` vérifie la signature GPG du dernier tag, copie les scripts dans `~/.local/bin`, +les pages man dans `~/.local/share/man/man1`, et ajoute `~/.local/bin` au `PATH` dans `~/.bashrc` +si nécessaire. Rechargez votre terminal après l'installation. + +Pour que la vérification GPG fonctionne, importez la clé publique du développeur au préalable : + +```bash +gpg --keyserver keys.openpgp.org --recv-keys +``` ## Scripts