Security (CRITICAL): - Add .env.example with strong password generation instructions - Fix path traversal validation in restore.sh (now detects all .. patterns) - Secure .env loading with set -a/set +a in all scripts - Add logs/ to .gitignore to prevent credential leaks Backup & Restore (IMPORTANT): - Add file locking system to prevent concurrent backups - Add disk space verification before backup operations - Generate SHA256 checksums for all backups - Verify checksums before restoration - Create safety database backup before restore - Implement comprehensive logging to ./logs/ directory - Fix BACKUP_RETENTION_DAYS inconsistency - Replace dangerous find -delete with safe iteration Update & Recovery: - Backup docker-compose.yml before updates with auto-rollback - Add version display before/after updates - Increase timeouts to 120s for slow containers - Dynamic backup suggestion in recover.sh Compatibility: - Add Docker Compose v2 support with v1 fallback in all scripts - Standardized log() function across all scripts New Features: - Add check-health.sh: comprehensive system health monitoring - Add SECURITY.md: complete security documentation - Update Makefile with check-health and recover commands - Centralized logging with timestamps and levels 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
6.6 KiB
6.6 KiB
Sécurité et Best Practices
Ce document décrit les mesures de sécurité et les best practices implémentées dans ce projet Nextcloud.
✅ Corrections de Sécurité Appliquées
🔒 Gestion des Secrets
Fichier .env
- ✅
.envajouté au.gitignorepour éviter de commiter les secrets - ✅
.env.examplecréé avec des instructions claires - ✅ Instructions pour générer des mots de passe forts (min 32 caractères)
- ⚠️ IMPORTANT: Changez tous les mots de passe par défaut avec:
openssl rand -base64 32
Gestion des Mots de Passe
- ✅
MYSQL_PWDutilisé pour éviter l'exposition des mots de passe dans les commandes - ✅ Pas de mots de passe en clair dans les logs
- ✅ Variables d'environnement chargées de manière sécurisée avec
set -a
🛡️ Protection des Scripts
Validation des Entrées
- ✅ backup.sh: Variables requises validées avec
${VAR:?message} - ✅ restore.sh: Protection contre path traversal améliorée
- ✅ restore.sh: Validation du type de fichier (gzip)
- ✅ restore.sh: Utilisation de
realpathpour résoudre les chemins
Sécurité des Opérations
- ✅
set -euo pipefaildans tous les scripts - ✅ Protection
${VAR:?}pour éviter les suppressions accidentelles - ✅ Système de lock pour empêcher les backups simultanés
- ✅ Fonctions de cleanup avec
trappour gérer les erreurs
📊 Logging et Audit
Traçabilité
- ✅ Logs centralisés dans
./logs/avec timestamps - ✅ Fonction
log()standardisée dans tous les scripts - ✅ Tous les scripts créent des logs horodatés
- ✅ Codes de sortie et erreurs loggés
Monitoring
- ✅ Script
check-health.shpour vérifier l'état du système - ✅ Vérification de l'espace disque avant backup
- ✅ Vérification de l'âge des backups
🔐 Intégrité des Données
Checksums
- ✅ Génération automatique de checksums SHA256 pour les backups
- ✅ Vérification des checksums avant restauration
- ✅ Détection de fichiers corrompus
Backups de Sécurité
- ✅ Backup automatique de la DB avant restauration
- ✅ Backup du
docker-compose.ymlavant mise à jour - ✅ Option de créer un backup avant restauration
🚀 Docker Compose
Compatibilité
- ✅ Support de Docker Compose v2 (
docker compose) - ✅ Fallback vers Docker Compose v1 (
docker-compose) - ✅ Détection automatique de la version disponible
📋 Checklist de Sécurité
Configuration Initiale
- Copier
.env.examplevers.env - Générer des mots de passe forts avec
openssl rand -base64 32 - Modifier tous les mots de passe dans
.env:MYSQL_ROOT_PASSWORDMYSQL_PASSWORDREDIS_HOST_PASSWORD
- Vérifier que
.envn'est PAS dans git:git status - Configurer les paramètres de production (domaine, SSL, etc.)
Maintenance Régulière
- Exécuter
make check-healthrégulièrement - Vérifier les logs dans
./logs/ - S'assurer que les backups sont créés (< 24h)
- Vérifier l'espace disque disponible
- Tester les restaurations périodiquement
Avant une Mise en Production
- Tous les mots de passe sont forts et uniques
- SSL/TLS configuré (via Traefik ou autre)
- Domaine configuré dans
TRUSTED_DOMAINS - Backups automatiques configurés (cron)
- Logs configurés et monitorés
- Health checks configurés
🔧 Scripts et Outils
Scripts de Maintenance
| Script | Description | Sécurité |
|---|---|---|
backup.sh |
Backup complet | Lock, checksum, vérif espace disque |
restore.sh |
Restauration | Vérif checksum, backup sécurité DB |
update.sh |
Mise à jour | Backup auto, rollback docker-compose |
recover.sh |
Récupération d'erreur | Logs, suggestions dynamiques |
occ.sh |
Wrapper OCC | Support Docker Compose v2 |
check-health.sh |
Health check complet | Vérifications système complètes |
Commandes Make
make backup # Créer un backup complet
make restore <file> # Restaurer un backup
make update # Mettre à jour Nextcloud
make check-health # Vérifier l'état du système
make recover # Récupérer après une erreur
🚨 Gestion des Incidents
En cas d'erreur
-
Consulter les logs:
ls -lth ./logs/ tail -f ./logs/backup_*.log -
Vérifier l'état du système:
make check-health -
Tenter une récupération:
make recover -
Si nécessaire, restaurer un backup:
make restore backups/nextcloud_backup_YYYYMMDD_HHMMSS.tar.gz
Récupération après Compromission
Si vous soupçonnez une compromission:
-
Arrêter les services immédiatement:
make down -
Analyser les logs:
docker-compose logs > incident_logs.txt cat ./logs/*.log > app_logs.txt -
Restaurer depuis un backup propre:
make restore <backup_avant_incident> -
Changer TOUS les mots de passe
-
Vérifier les utilisateurs et permissions
-
Mettre à jour vers la dernière version
📚 Références
Best Practices
Commandes Utiles
# Générer un mot de passe fort
openssl rand -base64 32
# Vérifier les permissions
ls -la .env
# Devrait être: -rw------- (600)
# Vérifier qu'aucun secret n'est dans git
git grep -i password
git grep -i secret
# Audit de sécurité basique
make check-health
📝 Notes de Version
Version actuelle
Améliorations de sécurité:
- ✅ Protection des secrets (.env hors git)
- ✅ Validation des entrées utilisateur
- ✅ Checksums pour intégrité des backups
- ✅ Logging complet pour audit
- ✅ Protection contre path traversal
- ✅ Vérifications d'espace disque
- ✅ Backups de sécurité automatiques
- ✅ Support Docker Compose v2
Bugs corrigés:
- ✅ Incohérence BACKUP_RETENTION_DAYS
- ✅ Protection find -delete dangereuse
- ✅ Path traversal incomplet
- ✅ Pas de vérification checksums
- ✅ Pas de backup avant restore
Fonctionnalités ajoutées:
- ✅ Script de health check complet
- ✅ Système de lock pour backups
- ✅ Génération automatique de checksums
- ✅ Logs centralisés avec timestamps
- ✅ Backup dynamique suggéré dans recover
Date de dernière mise à jour: 2025-12-17