J’utilise les services de Bitwarden pour stocker mes mots de passe et clés. On peut aussi héberger ça via Vaultwarden mais comme j’ai pas confiance en moi après avoir supprimé des années de (backup de) blogging, je n’héberge plus aucun service critique directement au garage pour l’instant…
Quoi qu’il en soit, ces gestionnaires reposent sur un accès unique à l’ensemble de ses mots de passe. En cas de plantage du service ou tout simplement de perte de mémoire, ça peut devenir compliqué. BW-Export permet, comme son nom l’indique, d’exporter ses données Bitwarden de manière sécurisée en utilisant l’outil Bitwarden-CLI original, dans un Docker. L’export réalisé peut donc être réinjecté en quelques clics via l’application/plugin Bitwarden.
Chacun fera comme il veut, je lance le Docker tous les 15 jours en cron et lui demande de conserver toujours 3 sauvegardes différentes. Il existe un template pour UNRAID mais même sur cet OS, je préfère lancer ça tous les 15 jours via User Scripts.
Pour s’en servir, il convient de récupérer son client_id et client_secret, son mot de passe unique BW et d’en choisir un pour le chiffrement du backup.docker run --rm \
--name=bitwarden-export \
-e TZ=Europe/Paris \
-e BW_CLIENTID=user.aaa \
-e BW_CLIENTSECRET=bbb \
-e BW_PASSWORD=ccc \
-e EXPORT_PASSWORD=ddd \
-e KEEP_LAST_BACKUPS=3 \
-e FILE_LOG=/var/data/logs.log \
-v /mnt/user/appdata/bw-export:/var/data \
-v /mnt/user/appdata/bw-export:/var/attachments \
0netx/bw-export
Le process de sécurité de BW nous indique que nos identifiants sont utilisés en CLI
On peut voir dans les logs que les informations sensibles ne sont pas rapportées
root@HomeBox:~# tree /mnt/user/appdata/bw-export/
/mnt/user/appdata/bw-export/
├── 20240817084820-bw-export
│ └── bitwarden_encrypted_export_20240817104824.json
├── 20240817090948-bw-export
│ └── bitwarden_encrypted_export_20240817110952.json
├── 20240817094105-bw-export
│ └── bitwarden_encrypted_export_20240817114110.json
└── logs.log
Exemple de sauvegarde chiffrée
{
"encrypted": true,
"passwordProtected": true,
"salt": "xxx",
"kdfType": 0,
"kdfIterations": 100000,
"encKeyValidation_DO_NOT_EDIT": "xxx",
"data": "2.OMlq6tqWKl1uNOFzhsZTDw==|AUrb+ToMJySQgg+1iVDN1518QKtBezn0eCkQiEgaQNVzC/vVAcCao39jCOHI1/Pq02ZuJJepsKHezoBLArvpqtTscl5F8gYCVyF4S1/kZDE8VkuT4JrPF+QgP4/ehKZARnn4FQZqUnbOcP1CLZ6tYjaMUhiBSmXiHv2jBLhgFxhOXA2Wyt7fKYuFTKOemycLOmFUOx88ce9LUucgmYr5XIKxK3Fpa5IXt49/YwsE1b9piyEWMmDt2paM6oEui7bXKG4HUz9M8N+O9gPjVBgps1Mi65Klgy0WTPALRPh2Cu/10iKIEQuXOTpjlsskMhoYFCpcVnfeJD11a8Bp97SrFeXwWB5IzvaIUqUyxrBxeoi9B4BovhLFfnBIf7Jg30BeLUTLINNNySg3aBkXdEVZEKKAvH [...]