Files
agence66-nextcloud-docker/SECURITY.md
BeauTroll c6de550329 Apply critical security fixes and major improvements to all scripts
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>
2025-12-17 18:27:00 +01:00

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

  • .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:
    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

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

  1. Consulter les logs:

    ls -lth ./logs/
    tail -f ./logs/backup_*.log
    
  2. Vérifier l'état du système:

    make check-health
    
  3. Tenter une récupération:

    make recover
    
  4. 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:

  1. Arrêter les services immédiatement:

    make down
    
  2. Analyser les logs:

    docker-compose logs > incident_logs.txt
    cat ./logs/*.log > app_logs.txt
    
  3. Restaurer depuis un backup propre:

    make restore <backup_avant_incident>
    
  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

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