Aller au contenu principal

Bonnes pratiques de sécurité

Ces règles viennent d'incidents réels ou de contrôles faits sur les serveurs de Bemba. Elles complètent Authentification JWT, la politique de mots de passe et la limitation des requêtes.

Comptes​

  • Un compte par personne ; jamais d'identifiants partagés, ni pour un enquêteur, ni pour un prestataire.
  • Désactiver un compte le jour du départ de la personne ; revoir chaque trimestre les comptes sans connexion récente.
  • Rôle minimal et périmètre minimal (institution et projets). L'accès au registre national est une exception, accordée nommément.
  • Limiter ROLE_ADMIN à deux ou trois personnes : il échappe au cloisonnement et détient toutes les permissions.
  • Encourager la double authentification (application TOTP), disponible pour chaque utilisateur dans Mon profil → Sécurité, et l'exiger des administrateurs.
  • Ne jamais transmettre un mot de passe par messagerie ; préférer le lien « mot de passe oublié » ou le lien magique.

Données personnelles​

Le registre contient des données nominatives de ménages vulnérables.

  • Les plaintes sensibles (exploitation et abus sexuels, harcèlement sexuel) ne sont visibles qu'avec plaintes.sensibles_view ; les accorder à un cercle très restreint.
  • Les photos et pièces jointes ne sont servies que par des liens signés valables 12 heures : ne pas les copier dans des documents partagés.
  • Les exports Excel ou CSV sortent les données du cloisonnement : les stocker sur un espace protégé et les supprimer après usage.
  • Pour un test ou une démonstration, utiliser la préproduction, jamais des données de production copiées sur un poste.

Secrets​

  • Aucun secret dans le dépôt Git, dans cette documentation, dans un ticket ou dans une conversation. Un secret commité puis « retiré » par un nouveau commit reste lisible dans l'historique : il faut le changer.
  • Les secrets vivent dans le fichier d'environnement lu par Compose sur chaque serveur (~/pch-sig/.env.prod en production) et dans backend/.env, tous en mode 600. Les clés JWT sont dans backend/config/jwt/, clé privée en mode 600.
  • Après une fuite supposée, ou au départ d'une personne qui y avait accès : appliquer la procédure de rotation docs/ROTATION_SECRETS.md du dépôt (base de données, JWT, SMTP, clés d'API Anthropic et Cohere, jetons Kobo).

Serveurs​

RègleÉtat
Seuls 22 (SSH), 80 et 443 publiés sur Internet, plus 2222 (SSH de GitLab, préproduction) et 2525 (relais SMTP, ouvert au seul serveur 220)appliqué ; exporteurs et Loki liés à 127.0.0.1
SSH par clé uniquement, fail2ban actifappliqué
Toujours docker compose -f <fichier>sans -f, Compose démarre le squelette Symfony, avec une base au mot de passe par défaut
Commandes console sous www-dataune commande lancée en root casse le cache (erreurs 500)
En-têtes de sécurité et CSPposés par Nginx du frontend, voir HTTPS

Journaux et audit​

  • Les actions des utilisateurs (connexions, modifications, suppressions, exports) sont dans Administration → Audits.
  • Les journaux techniques sont conservés un an dans Loki, les erreurs remontent dans Sentry. Voir Logs.
  • Ne jamais journaliser un mot de passe, un jeton ou un numéro de compte de paiement complet ; ne pas en coller dans un signalement.

Sauvegardes​

Base de données sauvegardée chaque jour et répliquée sur le serveur de secours ; voir Sauvegarde pour la liste exacte et les points encore ouverts. Une sauvegarde n'a de valeur que si sa restauration a été testée : faire un essai de restauration au moins une fois par trimestre.

En cas d'incident​

  1. Contenir : désactiver les comptes concernés ; si un secret a fui, le changer immédiatement.
  2. Couper les sessions : vider la table refresh_tokens déconnecte tout le monde en moins d'une heure.
  3. Comprendre : audit applicatif, journaux Loki, journaux Traefik.
  4. Corriger et documenter : cause, période, données exposées.
  5. Informer l'UCP-PCH, et la Banque mondiale si des données de bénéficiaires ont pu être exposées.

Contrôles réguliers​

FréquenceContrôle
Quotidiensanté de l'API, file d'e-mails en échec vide, erreurs dans Sentry
Hebdomadaireespace disque, sauvegardes présentes, connexions échouées anormales dans l'audit
Mensuelmises à jour de sécurité Ubuntu et images Docker
Trimestrielrevue des comptes et des rôles, essai de restauration
Annuelrotation des secrets, revue de cette page