APT Repo Manager β Documentation Francaise¶
Gestionnaire de depot APT prive avec interface web React, API REST FastAPI, controle d'acces par roles (RBAC) et securite integree (ClamAV, Grype, SBOM).
Table des matieres¶
- Architecture
- Fonctionnalites
- Prerequis
- Installation
- Identifiants par defaut
- Structure des repertoires
- Roles et acces
- Securite
- Autres documents
Architecture¶
βββββββββββββββββββββββββββββββββββ
β Navigateur / Browser β
ββββββββββ¬ββββββββββββ¬βββββββββββββ
β β
βββββββββββββββββββΌβββ βββββΌβββββββββββββββββββββ
β frontend :3003 β β backend :8000 β
β (Nginx + React) β β (FastAPI + JWT auth) β
ββββββββββββββββββββββ βββββββββββββ¬βββββββββββββ
β
ββββββββββββββββββββββββββββββΌβββββββββββββ
β apt-repo :80 β
β (Nginx + reprepro, sans auth) β
ββββββββββββββββββββββββββββββββββ¬βββββββββ
β
βββββββββββββββββββββββββββββββββββββββββββΌββββββββ
β Volumes Docker β
β repos/pool repos/manifests repos/audit β
β repos/auth repos/security repos/gnupg β
β repos/logs repos/staging β
βββββββββββββββββββββββββββββββββββββββββββββββββββββ
Clients APT (apt-get, apt) β apt-repo:80 (acces public, lecture seule)
Fonctionnalites¶
| Fonctionnalite | Disponible |
|---|---|
| Interface web React + Tailwind | OK |
| API REST FastAPI | OK |
| Authentification locale SQLite/bcrypt | OK |
| Authentification LDAP / Active Directory | OK |
| Jetons JWT (duree 60 min) | OK |
| Jetons API pour pipelines CI/CD | OK |
| 5 roles RBAC (admin, maintainer, uploader, auditor, reader) | OK |
| Scan antivirus ClamAV a chaque upload | OK |
| Scan CVE Grype (politique : block / review / warn) | OK |
| Export SBOM CycloneDX v1.5 | OK |
| Export SBOM SPDX v2.3 | OK |
| Journal d'audit immuable (JSONL) | OK |
| Statistiques de telechargement (analyse logs Nginx) | OK |
| Import depuis sources APT amont | OK |
| Dashboard de surveillance | OK |
Prerequis¶
| Composant | Version minimale | Recommande |
|---|---|---|
| Docker | 24.0 | Derniere stable |
| Docker Compose | v2 (plugin) | Derniere stable |
| RAM | 2 Go | 4 Go |
| Espace disque | 20 Go | 50 Go+ |
| OS | Debian 11 / Ubuntu 22.04 | Ubuntu 24.04 LTS |
Note : Docker Compose v2 est installe en tant que plugin (
docker compose), et non en tant que binaire independant (docker-compose).
Installation¶
Etape 1 β Cloner le depot¶
Etape 2 β Configurer le fichier d'environnement principal¶
Editer .env et renseigner au minimum :
Etape 3 β Configurer le backend¶
Editer backend.env et renseigner au minimum :
# OBLIGATOIRE en production β generer une valeur aleatoire longue
JWT_SECRET_KEY=changez-cette-valeur-par-une-cle-aleatoire-longue
# Identifiants admin initiaux
ADMIN_USERNAME=admin
ADMIN_PASSWORD_HASH=<hash bcrypt de votre mot de passe>
Pour generer un hash bcrypt :
docker run --rm python:3.10-slim python3 -c \
"from passlib.context import CryptContext; print(CryptContext(schemes=['bcrypt']).hash('VotreMotDePasse1!'))"
Etape 4 β Lancer les conteneurs (production)¶
Pour le mode developpement (Swagger UI actif, rechargement a chaud) :
Important : En production (
ENV=production), l'interface Swagger UI (/docs) renvoie une erreur 404. Cela est intentionnel pour reduire la surface d'attaque.
Etape 5 β Verifier le deploiement¶
# Verifier l'etat des conteneurs
docker compose ps
# Verifier les journaux du backend
docker compose logs backend
# Tester l'API
curl http://localhost:8000/health
Identifiants par defaut¶
AVERTISSEMENT DE SECURITE
Les identifiants par defaut sont : - Nom d'utilisateur :
admin- Mot de passe :Admin1234!Ces identifiants DOIVENT imperativement etre changes avant toute mise en production. Ne jamais deployer avec les identifiants par defaut dans un environnement accessible au reseau.
Pour changer le mot de passe admin :
- Generer un nouveau hash bcrypt (voir etape 3 ci-dessus).
- Mettre a jour
ADMIN_PASSWORD_HASHdansbackend.env. - Relancer le backend :
docker compose restart backend.
Structure des repertoires¶
repos/
βββ pool/ # Paquets Debian (.deb) geres par reprepro
βββ manifests/ # Metadonnees des paquets (JSON par paquet)
β βββ index.json # Index global des paquets
βββ audit/ # Journal d'audit immuable (fichiers JSONL par date)
β βββ YYYY-MM-DD.jsonl
βββ auth/ # Base de donnees utilisateurs SQLite et tokens API
βββ security/ # Resultats des scans Grype et ClamAV
βββ gnupg/ # Cles GPG pour la signature du depot
βββ logs/ # Journaux Nginx analyses pour les statistiques
βββ staging/ # Zone temporaire pour les uploads avant validation
Roles et acces¶
| Role | Upload | Gestion paquets | Gestion utilisateurs | Audit | Lecture |
|---|---|---|---|---|---|
| admin | Oui | Oui | Oui | Oui | Oui |
| maintainer | Oui | Oui | Non | Oui | Oui |
| uploader | Oui | Non | Non | Non | Oui |
| auditor | Non | Non | Non | Oui | Oui |
| reader | Non | Non | Non | Non | Oui |
Securite¶
Analyse antivirus (ClamAV)¶
Chaque paquet uploade est analyse par ClamAV avant d'etre accepte dans le depot. Les paquets infectes sont rejetes et l'evenement est consigne dans le journal d'audit.
Analyse CVE (Grype)¶
Les paquets sont analyses par Grype. La politique est configurable :
blockβ Le paquet est refuse si des CVE sont detectees au-dessus du seuil.reviewβ Le paquet est mis en attente de validation manuelle.warnβ Le paquet est accepte mais un avertissement est emis.
Journal d'audit¶
Toutes les actions (uploads, suppressions, connexions, modifications de configuration) sont enregistrees dans des fichiers JSONL journaliers dans repos/audit/. Ces fichiers sont en ajout seul (append-only) et ne peuvent pas etre modifies via l'interface.
Autres documents¶
| Document | Lien |
|---|---|
| Documentation en anglais | Accueil |
| README racine (bilingue) | Accueil |