Journal des modifications¶
Toutes les modifications notables apportées à Repod sont documentées ici.
Le format suit Keep a Changelog. Repod utilise le Semantic Versioning.
[1.0.1] — 2026-05-16¶
Corrigé¶
- ClamAV : remplacement de
clamscan(tué par OOM à la limite de 1 Go) par le démonclamd— les signatures sont chargées une seule fois en mémoire. Limite mémoire du conteneur portée à 2,5 Go.gpg-agentajouté aux Dockerfiles Enterprise et Community. - Génération de clé GPG : correction des erreurs
NameError: Path is not definedetgpg-agent not installed. Ajout de--pinentry-mode loopbacket de_ensure_gnupg_permissions(). La génération de clé fonctionne désormais de manière fiable via l'interface web. - Mise à jour manuelle ClamAV :
freshclamest désormais appelé avec--log=/dev/nullpour éviter unPermission deniedsur/var/log/clamav/freshclam.log(le backend s'exécute en tant qu'appuser, pasclamav). - reprepro Community : correction de l'erreur
packages database contains unuseden exécutantreprepro clearvanishedaprès régénération deconf/distributions.conf/distributionsest désormais auto-généré avec les 4 distributions (jammy, noble, focal, bookworm), y compris leSignWithGPG. - Édition Community : suppression de 8 fichiers de service Enterprise (
cve_enrichment,security_decisions,sla_alerts,sbom,ldap_auth,email_notifications,security_sync,retention) du code source Community — modifier la variable d'environnementREPOD_EDITIONne débloque plus les fonctionnalités Enterprise.
Ajouté¶
- Initialisation automatique des distributions : les backends Enterprise et Community initialisent désormais automatiquement
conf/distributionset exécutentreprepro exportau premier démarrage — plus besoin du bouton manuel « Init distributions ». - Démon clamd :
entrypoint.shdémarre désormais le démonclamdau démarrage du conteneur.appuserest ajouté au groupeclamavafin quefreshclampuisse écrire dans le répertoire de base de données.
[1.0.0] — 2026-05-12¶
Première version stable en production, incluant l'édition Community (MIT).
Architecture à double édition¶
- Édition Community — open source (licence MIT). Inclut le pipeline d'upload complet (scan antivirus, analyse CVE, signature GPG, vérification des dépendances), la gestion des paquets, l'authentification JWT + tokens API, le RBAC à 5 rôles, l'intégration LDAP/AD, la journalisation d'audit et l'interface web.
- Édition Enterprise — ajoute la file de revue CVE avec workflow d'approbation RSSI, l'export SBOM (CycloneDX 1.5 + SPDX 2.3), une politique CVE configurable, le suivi des SLA, la synchronisation de sécurité planifiée, la rétention des paquets et les paramètres avancés.
- Les endpoints Enterprise sont présents dans l'ensemble de routes Community et renvoient un
402 Payment RequiredHTTP avec un message de mise à niveau structuré. La surface d'API est identique entre les deux éditions.
Durcissement de la sécurité¶
- Suppression du socket Docker — le backend ne monte plus
/var/run/docker.sock. Les opérations de signature GPG utilisent désormais un volume partagé (/repos/gnupg), ce qui élimine un vecteur d'évasion de conteneur. - Secret JWT validé au démarrage — l'application refuse de démarrer en mode production si
JWT_SECRET_KEYest absent ou réglé sur la valeur par défaut. - Swagger UI désactivée en production —
/docs,/redocet/openapi.jsonrenvoient 404 quandENV=production. - Tokens de réinitialisation hachés — les tokens de réinitialisation de mot de passe sont stockés uniquement sous forme de hachages SHA-256. Le token en clair n'est jamais persisté. Les liens de réinitialisation expirent après 30 minutes.
- Vérification du certificat TLS LDAP — activée par défaut (
verify_cert: true). Un avertissement est journalisé dans la console si elle est désactivée. - Secrets masqués dans l'API des paramètres —
smtp_passwordetbind_passwordsont renvoyés sous forme de••••••••dansGET /settings/. - Politique de mot de passe appliquée — minimum 8 caractères, au moins une majuscule, au moins un chiffre ou un caractère spécial. Appliquée à la création de compte, au changement de mot de passe et à la réinitialisation.
- Limites de ressources — le conteneur backend est limité à 1 Go de RAM et 1,5 CPU dans
docker-compose.yaml.
Pipeline d'upload¶
- Upload en streaming SSE complet via
POST /upload/stream— progression étape par étape en temps réel. - Upload JSON standard via
POST /upload/(legacy, conservé pour la rétrocompatibilité). - Pipeline de validation en six étapes : format, provenance SHA-256, scan antivirus, analyse CVE (avec enrichissement EPSS/KEV), signature GPG, vérification des dépendances.
- Moteur de politique CVE avec actions par sévérité (
block,review,warn,allow). - Notification webhook sur
pending_review— notifie immédiatement l'équipe RSSI dès qu'un paquet entre dans la file de revue.
Limitation de débit¶
Limites de débit appliquées aux endpoints à fort impact :
| Endpoint | Limite |
|---|---|
POST /upload/ |
20 / minute |
POST /upload/stream |
20 / minute |
POST /import/fetch |
10 / minute |
POST /import/batch |
5 / minute |
POST /import/sync |
3 / minute |
POST /auth/token |
Limité en débit |
POST /auth/forgot-password |
Limité en débit |
POST /auth/reset-password |
Limité en débit |
Piste d'audit¶
Journal d'audit JSONL en ajout seul (/repos/audit/YYYY-MM-DD.jsonl), un fichier par jour. Actions journalisées :
- Authentification :
LOGIN(avec IP source et résultat) - Gestion des utilisateurs :
USER_CREATE,USER_UPDATE,USER_DELETE - Mots de passe :
PASSWORD_CHANGE,PASSWORD_RESET - Paquets :
UPLOAD,DELETE,IMPORT,SYNC - Sécurité :
SECURITY_DECISION,QUARANTINE,RESCAN,CLAMAV_UPDATE - Configuration :
SETTINGS_CHANGE,GPG_GENERATE - Système :
INIT_DISTS,IMPORT_GROUP_DELETE
LDAP / Active Directory¶
- Compatible avec OpenLDAP (
uid) et Active Directory (sAMAccountName). - Cinq mappages de groupes : un par rôle (
group_admin,group_maintainer,group_uploader,group_auditor,group_reader). - Auto-provisioning : crée un enregistrement utilisateur local lors de la première connexion LDAP réussie.
- Synchronisation des rôles : si le groupe LDAP d'un utilisateur change, le rôle est mis à jour à la connexion suivante.
POST /settings/test-ldap— teste la connexion et le bind LDAP sans enregistrer.- Options TLS : simple, STARTTLS, LDAPS, avec bundle CA personnalisé optionnel (
ca_bundle_path).
Infrastructure¶
- Fichier compose de production (
community/docker-compose.yaml) séparé du développement. docker-compose.dev.ymlpour le développement local avec hot-reload.- Variable d'environnement
TRUSTED_PROXIESpour la liste blanche d'IP du reverse proxy. - Paramètre
app_urldanssettings.jsonpour construire des liens de réinitialisation corrects. - Le planificateur (Enterprise) exécute trois tâches cron : synchronisation de sécurité (03:00), vérification SLA (08:00), rétention (02:00). Toutes configurables. Reconfigurables à chaud via
PATCH /settings/.
Documentation¶
- Documentation bilingue (anglais + français) couvrant l'installation, l'administration, la référence API, le dossier de sécurité, le reverse proxy et la conformité.
- Cartographie de conformité NIS2 et ANSSI SecNumCloud.
- Guides pratiques : LDAP, sauvegarde/restauration, rotation de clé GPG, migration depuis Artifactory/Nexus.
[0.9.0] — 2026-03-01¶
Version bêta — tests internes.
Ajouté¶
- Export SBOM (CycloneDX 1.5, SPDX 2.3)
- Score EPSS et enrichissement CISA KEV
- File de revue RSSI pour les paquets signalés par CVE
- Authentification LDAP / Active Directory avec mappage groupe → rôle
- Tokens API pour les pipelines CI/CD
- Import de paquets depuis les sources APT amont (Ubuntu, Debian)
- Import par lot avec progression en streaming SSE
- Intégration du scanner CVE Grype
- Intégration antivirus ClamAV
- Statistiques et analyse des téléchargements
[0.5.0] — 2025-12-15¶
Version alpha.
Ajouté¶
- Dépôt APT servi par Nginx
- Upload de paquets avec validation du format et SHA-256
- Signature GPG
- Authentification JWT
- RBAC de base (admin, uploader, reader)
- Frontend web (React)
- Backend FastAPI
- Déploiement Docker Compose