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>
228 lines
6.6 KiB
Markdown
228 lines
6.6 KiB
Markdown
# 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 <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**:
|
|
```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 <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
|
|
|
|
- [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
|