Projet

Général

Profil

Vaultwarden(bitwarden) » Historique » Version 20

mathias.bert-barbedienne, 28/10/2022 09:20

1 1 johan.le.baut
# Vaultwarden (bitwarden)
2 2 johan.le.baut
3 12 johan.le.baut
{{toc}}
4 11 johan.le.baut
5
6 5 johan.le.baut
Bitwarden est un gestionnaire de mot de passes.
7 2 johan.le.baut
8 5 johan.le.baut
Vaultwarden est la version Rust de Biwarden: https://github.com/dani-garcia/vaultwarden
9 2 johan.le.baut
10 20 mathias.bert-barbedienne
Il est disponible sur: harpocrates et le port 8080 (anciennement sur https://coffre.aquilenet.fr/)
11 2 johan.le.baut
12 20 mathias.bert-barbedienne
Pour l'admin: http://localhost:8080/admin
13 2 johan.le.baut
14 1 johan.le.baut
Server: harpocrates
15 2 johan.le.baut
16 20 mathias.bert-barbedienne
## Configuration
17 2 johan.le.baut
18
19 1 johan.le.baut
20 2 johan.le.baut
### Accès utilisateurs
21 1 johan.le.baut
22
On autorise l'inscription à tous les utilisateurs ayant un mail en **@aquilenet.fr**
23
24 20 mathias.bert-barbedienne
Pour valider son inscription un utilisateur doit confirmer via l'email reçu de vaultwarden.
25 1 johan.le.baut
Il est possible d'inviter des gens extérieurs via la page d'admin uniquement.
26
27 20 mathias.bert-barbedienne
#### Accès via pc
28
Créer une config ssh dédiée pour l'accès à vaultwarden via tunnel :
29
`echo -e Host coffre.aquilenet.fr\\nPort 55555\\nUser bitwarden\\nIdentityFile ~/.ssh/id_ed25519_vaultwarden\\nLocalForward localhost:8080 localhost:8080\\nSessionType none >~/.ssh/coffre.conf`
30
31
Récupérer le couple de clef ssh non protégées de l'utilisateur non privilégié bitwarden (`/home/bitwarden/.ssh/{id_ed25519_vaultwarden,.pub}`).
32
Les copier dans le vôtre (ou modifier `~/.ssh/coffre.conf` avec vos login et clefs).
33
34
Cette configuration permet une connexion sans exécution d'un shell distant (SessionType none), d'autre part l'utilisateur bitwarden est configuré avec un "dummy shell" dans `/etc/passwd` qui ne permet pas de faire quoi que ce soit sur la machine (/home/bitwarden/Fake_Shell.sh).
35
36
lancer la connexion ssh (`ssh coffre`), puis pointer le navigateur sur `http://localhost:8080`.
37
38
#### Accès éventuel via ordiphone
39
Si on veux vraiment et si on en a le besoin réel et explicite, techniquement on peut.
40
Sur Android, utilisation de l'appli `ConnectBot` (https://play.google.com/store/apps/details?id=org.connectbot) pour l'accès via tunnel ssh et de l'appli bitwarden officielle.
41
42
Interdiction **_FORMELLE_**  d'utiliser son compte ssh habituel d'admin de l'infra pour cet usage !
43
**_OBLIGATION_** d'utiliser un compte dédié, non privilégié avec accès restreint.
44
45
Récupérer la clef publique non protégée (`/home/bitwarden/.ssh/id_ed25519_vaultwarden.pub`) ou en générer une nouvelle avec passphrase (simple à taper sur ordiphone) et dédiée à cet usage (`ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_vaultwarden`) et aller l'ajouter sur harpocrates dans `/home/bitwarden/.ssh/authorized_keys`
46
47
Copier cette clef sur l'ordiphone, puis l'importer dans l'appli ConnectBot et la protéger par passphrase si pas déjà le cas.
48
Menu en haut à droite puis "Gérer les clefs publiques" appuis sur le dossier en haut à droite, naviguer sur le support de stockage et sélectionner la clef publique.
49
Si pas fait avant, appuis long sur la clef et "Changer le mot de passe" (choisissez en une simple à taper sur ordiphone).
50
51
De retour sur le menu général, créer un nouveau serveur en cliquant sur le "+" en bas à droite
52
renseigner `bitwarden@coffre.aquilenet.fr:55555`
53
donner un nom à ce nouvel objet
54
sélectionner la clef dans "Utiliser une clef pour l'authentification"
55
décocher "Démarrer une session en ligne de commande" (seul le tunnel nous intéresse ici).
56
cocher éventuellement "Rester connecter"
57
Enregistrer en haut à droite (icône disquette).
58
59
Appuis long sur le serveur nouvellement créé, puis "éditer les redirections de port"
60
Ajout par "+"
61
Nom:vaultwarden
62
type local,
63
Port source : 8080
64
Destionation: localhost:8080
65
Enregistrer (Créer la redirection de port).
66
67
Lancer la connexion dans ConnectBot
68
taper la passphrasse
69
réduire l'appli
70
lancer l'appli bitwarden
71
la faire pointer sur http://localhost:8080 dans le menu de configuration en haut à droite
72
et enfin s'identifier sur le service.
73
74 2 johan.le.baut
### Accès admin
75
76 20 mathias.bert-barbedienne
On accède à la page d'admin via un tunnel ssh et une redirection de port vers le 8080 et http://localhost:8080/admin
77 2 johan.le.baut
78 1 johan.le.baut
Un token est demandé, il est visible sur Harpocrates dans /var/www/bitwarden/docker-compose.yaml
79 2 johan.le.baut
80
On ajoute en sécurité supplémentaire une Basic Auth dans Nginx, le fichier de conf est: `/var/www/bitwarden/.htpasswd`
81
Il contient les admins de Harpocrates avec le même hash password du /etc/shadow
82
83
## Installation
84 1 johan.le.baut
85 6 johan.le.baut
86 20 mathias.bert-barbedienne
Sur le serveur Harpocrates, on installe le service vaultwarden (initialement avec un reverse proxy nginx, désactivé depuis).
87 2 johan.le.baut
88 6 johan.le.baut
### installation du service
89 1 johan.le.baut
90 6 johan.le.baut
On peut le lancer via docker ou builder manuellement le service.
91 1 johan.le.baut
92 14 johan.le.baut
En ce moment la méthode manuelle est utilisée.
93 6 johan.le.baut
94
#### via docker et docker compose
95
96
1. Créer le dossier pour la data du service:
97
```
98
mkdir -p /srv/vw-data
99
chown -R bitwarden:bitwarden /srv/vw-data
100
```
101
102
2. On décrit le container docker à lancer via docker compose
103 2 johan.le.baut
104 1 johan.le.baut
105 2 johan.le.baut
`cat /var/www/bitwarden/docker-compose.yaml`
106
```yaml
107
version: '3'
108
109 6 johan.le.baut
services:
110 2 johan.le.baut
  vaultwarden:
111
    image: vaultwarden/server:1.25.2
112
    container_name: vaultwarden
113 4 johan.le.baut
    restart: always
114
    user: 1000:1000 # bitwarden user
115 2 johan.le.baut
    ports:
116 4 johan.le.baut
      - "127.0.0.1:8080:80"   # port app
117 2 johan.le.baut
      - "127.0.0.1:3012:3012" # port web socket
118
    environment:
119
      ADMIN_TOKEN: <Admin token> # token to connect to admin
120 4 johan.le.baut
      WEBSOCKET_ENABLED: "true"  # Enable WebSocket notifications.
121 2 johan.le.baut
      SIGNUPS_DOMAINS_WHITELIST: aquilenet.fr # on autorise seulement le @aquilenet.fr
122 1 johan.le.baut
      SIGNUPS_VERIFY: true
123 2 johan.le.baut
      INVITATIONS_ALLOWED: false  # Les utilisateurs ne peuvent pas inviter des non inscrits (seulement admin)
124 1 johan.le.baut
    volumes:
125
      - /srv/vw-data:/data
126
127 6 johan.le.baut
```
128 1 johan.le.baut
Il est possible de configurer d'autre choses via la page admin
129 6 johan.le.baut
130 1 johan.le.baut
3. Une fois docker installé, pour démarrer en background:
131 6 johan.le.baut
`cd /var/www/bitwarden/ && docker compose up -d`
132
133 20 mathias.bert-barbedienne
(4. Mise à jour avec docker)
134 6 johan.le.baut
135
Ouvrir `/var/www/bitwarden/docker-compose.yaml`
136
137
changer `image: vaultwarden/server:<nouvelle version>`
138
139
140 20 mathias.bert-barbedienne
Restart (avec docker):
141 6 johan.le.baut
```
142
cd /var/www/bitwarden/
143
docker compose down # Service sera étteint
144 10 johan.le.baut
docker compose up -d --force-recreate
145 6 johan.le.baut
```
146
147
#### Sans docker (actuel):
148
149 2 johan.le.baut
Il faut compiler le service et le lancer dans un systemd:
150 13 johan.le.baut
151
Suivre: https://gist.github.com/heinoldenhuis/f8164f73e5bff048e76fb4fff2e824e1
152 7 johan.le.baut
153
Pour le build du 'web-vault', on peut utiliser dans bw_web_builds la cmd `make docker-extract`, il créera le dossier `docker_builds/web-vault` (pas besoin d'installer NodeJs de cette manière).
154
155
Install actuelle:
156
- systemd file: `/etc/systemd/system/vaultwarden.service`
157
- vaultwarden:
158
  - sources dir: /var/www/bitwarden/vaultwarden
159 8 johan.le.baut
  - binaire: /var/www/bitwarden/vaultwarden/target/release/vaultwarden
160 9 johan.le.baut
  - data dir: /var/www/bitwarden/vaultwarden/target/release/data
161 8 johan.le.baut
  - env file (config): /var/www/bitwarden/vaultwarden/target/release/.env
162 7 johan.le.baut
    - config: 
163
164
```
165
WEB_VAULT_FOLDER=/var/www/bitwarden/bw_web_builds/docker_builds/web-vault
166
WEBSOCKET_ENABLED=true
167
SIGNUPS_VERIFY=true
168 1 johan.le.baut
SIGNUPS_DOMAINS_WHITELIST=aquilenet.fr
169
ADMIN_TOKEN=<admin token>
170 7 johan.le.baut
INVITATIONS_ALLOWED=false
171
ROCKET_ADDRESS=127.0.0.1
172
```
173
- web-vault
174
  - sources dir: /var/www/bitwarden/bw_web_builds/
175
  - build dir: /var/www/bitwarden/bw_web_builds/docker_builds/web-vault
176 2 johan.le.baut
177
### Reverse proxy Nginx
178
179 20 mathias.bert-barbedienne
Le site était configuré dans `/etc/nginx/sites-available/coffre.aquilenet.fr.conf`
180 2 johan.le.baut
181 20 mathias.bert-barbedienne
Les certificats étaient gérés par certbot (cf `sudo certbot certificates`)
182 10 johan.le.baut
183
### Config SMTP
184
185
Il faut configurer une connexion SMTP pour que vaultwarden puisse envoyer des mails.
186 16 johan.le.baut
187 17 johan.le.baut
Sur une VM vierge: 
188
- enlever exim4
189
- installer postfix
190
- enlever params d'authent pour envoyer sur localhost:25
191 18 johan.le.baut
192 20 mathias.bert-barbedienne
Conf vaultwarden SMTP (dans l'interface admin de vaultwarden):
193 18 johan.le.baut
```
194
  "smtp_host": "127.0.0.1",
195
  "smtp_security": "off",
196
  "smtp_port": 25,
197
  "smtp_from": "vaultwarden@aquilenet.fr",
198
  "smtp_from_name": "Vaultwarden (Ne pas répondre)",
199
  "smtp_timeout": 15,
200
  "helo_name": "coffre.aquilenet.fr",
201
  "smtp_accept_invalid_certs": false,
202
  "smtp_accept_invalid_hostnames": false,
203
```