# 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 - ✅ `.env` ajouté au `.gitignore` pour éviter de commiter les secrets - ✅ `.env.example` créé 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: ```bash openssl rand -base64 32 ``` #### Gestion des Mots de Passe - ✅ `MYSQL_PWD` utilisé 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 `realpath` pour résoudre les chemins #### Sécurité des Opérations - ✅ `set -euo pipefail` dans 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 `trap` pour 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.sh` pour 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.yml` avant 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.example` vers `.env` - [ ] Générer des mots de passe forts avec `openssl rand -base64 32` - [ ] Modifier tous les mots de passe dans `.env`: - `MYSQL_ROOT_PASSWORD` - `MYSQL_PASSWORD` - `REDIS_HOST_PASSWORD` - [ ] Vérifier que `.env` n'est PAS dans git: `git status` - [ ] Configurer les paramètres de production (domaine, SSL, etc.) ### Maintenance Régulière - [ ] Exécuter `make check-health` ré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 ```bash make backup # Créer un backup complet make restore # 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 1. **Consulter les logs**: ```bash ls -lth ./logs/ tail -f ./logs/backup_*.log ``` 2. **Vérifier l'état du système**: ```bash make check-health ``` 3. **Tenter une récupération**: ```bash make recover ``` 4. **Si nécessaire, restaurer un backup**: ```bash make restore backups/nextcloud_backup_YYYYMMDD_HHMMSS.tar.gz ``` ### Récupération après Compromission Si vous soupçonnez une compromission: 1. **Arrêter les services immédiatement**: ```bash make down ``` 2. **Analyser les logs**: ```bash docker-compose logs > incident_logs.txt cat ./logs/*.log > app_logs.txt ``` 3. **Restaurer depuis un backup propre**: ```bash make restore ``` 4. **Changer TOUS les mots de passe** 5. **Vérifier les utilisateurs et permissions** 6. **Mettre à jour vers la dernière version** ## 📚 Références ### Best Practices - [OWASP Top 10](https://owasp.org/www-project-top-ten/) - [Docker Security Best Practices](https://docs.docker.com/engine/security/) - [Nextcloud Security Hardening](https://docs.nextcloud.com/server/latest/admin_manual/installation/harden_server.html) ### Commandes Utiles ```bash # 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