0 Votes

Passbolt

Modifié par john le 2026/09/18 23:06

Gestionnaire de mots de passe (édition communautaire). Les secrets sont chiffrés côté navigateur avec la clé OpenPGP de chaque utilisateur : le serveur ne peut pas les lire.

Architecture

ConteneurRôle
passboltApplication
passbolt-dbBase MariaDB 10.11

La base est sur un réseau interne dédié (passbolt-internal), inaccessible aux autres conteneurs.

Variables d'environnement

VariableRôle
PB_DB_PASS, PB_DB_ROOT_PASSMots de passe de la base
PB_SMTP_FROM, PB_SMTP_HOST, PB_SMTP_PORTEnvoi des courriels
PB_SMTP_USER, PB_SMTP_PASS, PB_SMTP_TLSAuthentification SMTP

Stack

services:
 passbolt-db:
   image: mariadb:10.11
   container_name: passbolt-db
   restart: unless-stopped
   command: >
     --character-set-server=utf8mb4
     --collation-server=utf8mb4_unicode_ci
   environment:
     MARIADB_DATABASE: passbolt
     MARIADB_USER: passbolt
     MARIADB_PASSWORD: ${PB_DB_PASS}
     MARIADB_ROOT_PASSWORD: ${PB_DB_ROOT_PASS}
   volumes:
      - <APPDATA>/passbolt/db:/var/lib/mysql
   networks:
      - passbolt-internal

 passbolt:
   image: passbolt/passbolt:latest-ce
   container_name: passbolt
   restart: unless-stopped
   depends_on:
      - passbolt-db
   environment:
     TZ: Europe/Paris
     APP_FULL_BASE_URL: <URL_PASSBOLT>
     DATASOURCES_DEFAULT_HOST: passbolt-db
     DATASOURCES_DEFAULT_USERNAME: passbolt
     DATASOURCES_DEFAULT_PASSWORD: ${PB_DB_PASS}
     DATASOURCES_DEFAULT_DATABASE: passbolt
     PASSBOLT_SECURITY_PROXIES_ACTIVE: "true"
     PASSBOLT_SSL_FORCE: "true"
     EMAIL_DEFAULT_FROM_NAME: Passbolt
     EMAIL_DEFAULT_FROM: ${PB_SMTP_FROM}
     EMAIL_TRANSPORT_DEFAULT_HOST: ${PB_SMTP_HOST}
     EMAIL_TRANSPORT_DEFAULT_PORT: ${PB_SMTP_PORT}
     EMAIL_TRANSPORT_DEFAULT_USERNAME: ${PB_SMTP_USER}
     EMAIL_TRANSPORT_DEFAULT_PASSWORD: ${PB_SMTP_PASS}
     EMAIL_TRANSPORT_DEFAULT_TLS: ${PB_SMTP_TLS}
     PASSBOLT_GPG_SERVER_KEY_FINGERPRINT: <EMPREINTE_CLE_SERVEUR>
     PASSBOLT_GPG_SERVER_KEY_PUBLIC: /etc/passbolt/gpg/serverkey.asc
     PASSBOLT_GPG_SERVER_KEY_PRIVATE: /etc/passbolt/gpg/serverkey_private.asc
   extra_hosts:
      - "<DOMAINE_PASSBOLT>:host-gateway"
   volumes:
      - <APPDATA>/passbolt/gpg:/etc/passbolt/gpg
      - <APPDATA>/passbolt/jwt:/etc/passbolt/jwt
      - <APPDATA>/passbolt/gnupg:/var/lib/passbolt/.gnupg
      - <APPDATA>/passbolt/logs:/var/log/passbolt
   networks:
      - passbolt-internal
      - proxy

networks:
 passbolt-internal:
   driver: bridge
 proxy:
   external: true
  • PASSBOLT_SECURITY_PROXIES_ACTIVE : Passbolt fait confiance aux en-têtes de SWAG pour connaître l'IP et le protocole du client.
  • extra_hosts : le domaine de Passbolt pointe vers l'hôte depuis le conteneur, pour que Passbolt puisse s'appeler lui-même par son URL publique (vérifications internes) malgré l'absence de hairpin NAT.
  • Base en utf8mb4 : obligatoire pour les caractères spéciaux et les émojis dans les secrets.

Fichiers critiques

DossierContenu
passbolt/gpgClé OpenPGP du serveur (publique et privée)
passbolt/jwtClés de signature des jetons de l'application mobile
passbolt/gnupgTrousseau GnuPG du serveur
Warning

Sans la clé privée du serveur et son empreinte, une base restaurée est inutilisable. Chaque utilisateur doit aussi conserver son propre kit de récupération (sa clé privée et sa phrase secrète) : ni le serveur ni une sauvegarde ne permettent de retrouver ses secrets sans lui.

Commandes

Les commandes d'administration s'exécutent avec l'utilisateur www-data :

# Diagnostic complet (configuration, base, clés, SSL, courriel)
docker exec passbolt su -s /bin/bash -c "/usr/share/php/passbolt/bin/cake passbolt healthcheck" www-data

# Créer un administrateur (envoie un lien d'inscription)
docker exec passbolt su -s /bin/bash -c "/usr/share/php/passbolt/bin/cake passbolt register_user -u <EMAIL> -f <PRENOM> -l <NOM> -r admin" www-data

# Tester l'envoi de courriel
docker exec passbolt su -s /bin/bash -c "/usr/share/php/passbolt/bin/cake passbolt send_test_email --recipient=<EMAIL>" www-data

Après chaque mise à jour de l'image, lancer le healthcheck : toutes les lignes doivent être au vert.

Sauvegarde

  • Base : dump SQL de passbolt-db par le script de Sauvegarde.
  • Clés et configuration : <APPDATA>/passbolt, sauvegardé tel quel.