Projet

Général

Profil

Vaultwarden(bitwarden) » Historique » Version 29

philippe.swartvagher, 24/11/2024 16:38
precise how to add user

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 27 sacha
Bitwarden est un gestionnaire de mot de passes réservé aux Jedi (les Padawan n'y ont pas accès)
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 22 johan.le.baut
Donc forcément il vous faut un accès ssh sur la machine harpocrates pour utiliser l'outil.
13
14 20 mathias.bert-barbedienne
Pour l'admin: http://localhost:8080/admin
15 2 johan.le.baut
16 1 johan.le.baut
Server: harpocrates
17 2 johan.le.baut
18 20 mathias.bert-barbedienne
## Configuration
19 2 johan.le.baut
20
### Accès utilisateurs
21 1 johan.le.baut
22 24 johan.le.baut
On autorise l'inscription à tous les utilisateurs ayant un mail en **@aquilenet.fr** (et qui ont l'accès ssh à la machine harpocrates)
23 1 johan.le.baut
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 29 philippe.swartvagher
Une fois inscrit faire la demande à admin@aquilenet.fr pour se faire inviter dans l'organisation *Admin* de l'outil :
28
1. ajouter l'utilisateur à l'organisation *Admin* en tant que *Propriétaire* (saisir l'adresse mail que l'utilisateur a utilisée pour se créer son compte)
29
2. ajouter l'utilisateur à toutes les collections de l'organisation
30
3. lorsque la personne à ajouter a confirmé son ajout à l'organisation avec le mail qu'elle a reçu, il faut encore confirmer l'adhésion à l'organisation.
31 1 johan.le.baut
32 25 mathias.bert-barbedienne
#### Accès via pc et navigateur
33 28 openbeelab
_Sur sa machine_
34 20 mathias.bert-barbedienne
Créer une config ssh dédiée pour l'accès à vaultwarden via tunnel :
35
`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`
36
37 28 openbeelab
_Sur Harpocrates:_
38 20 mathias.bert-barbedienne
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}`).
39
Les copier dans le vôtre (ou modifier `~/.ssh/coffre.conf` avec vos login et clefs).
40
41
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).
42
43 1 johan.le.baut
lancer la connexion ssh (`ssh coffre`), puis pointer le navigateur sur `http://localhost:8080`.
44 25 mathias.bert-barbedienne
45
#### Accès via pc en cli
46
Récupérer le binaire du client cli sur https://vault.bitwarden.com/download/?app=cli&platform=linux
47
(Ou installer via `npm` avec `npm install -g @bitwarden/cli`)
48
Décompresser l'archive par exemple dans ~/.Bitwarden_cli
49
Rendre exécutable le binaire : `chmod +x ~/.Bitwarden_cli/bw`
50
Modifier le PATH dans ~/.bashrc
51
`PATH=$PATH:~/.Bitwarden_cli`
52
Ajouter éventuellement un alias dans ~/.bashrc
53
`alias bw='bw --pretty'`
54
55
Lancer la connexion ssh sur coffre puis configurer le serveur Waultwarden avec :
56
`bw config server http://localhost:8080`
57
58
Connecter le client cli avec :
59
`bw login`
60
61
Rentrer login et password.
62
Comme proposé renseigner la variable d'environnement `BW_SESSION` avec `export BW_SESSION=....`
63
64
Synchroniser les données avec :
65
`bw sync`
66
67
La récupération d'un mot de passe root se fait par exemple avec :
68
`bw get password iris`
69
70
Dans certains cas il y a plusieurs réponses possible (cas pour harpocrates par exemple) et la liste des id est donnée.
71
On peut alors avoir le détail via :
72
`bw get item <id>`
73
`bw get uri <id>`
74
`bw get username <id>`
75
`bw get password <id>`
76
77
La vérification de la connexion se fait via :
78
`bw status`
79
80
La mise à jour du binaire se fait via :
81
`bw update`
82
83
La déconnexion se fait avec :
84
`bw logout`
85 20 mathias.bert-barbedienne
86
#### Accès éventuel via ordiphone
87
Si on veux vraiment et si on en a le besoin réel et explicite, techniquement on peut.
88
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.
89
90
Interdiction **_FORMELLE_**  d'utiliser son compte ssh habituel d'admin de l'infra pour cet usage !
91
**_OBLIGATION_** d'utiliser un compte dédié, non privilégié avec accès restreint.
92
93
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`
94
95
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.
96
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.
97
Si pas fait avant, appuis long sur la clef et "Changer le mot de passe" (choisissez en une simple à taper sur ordiphone).
98
99
De retour sur le menu général, créer un nouveau serveur en cliquant sur le "+" en bas à droite
100
renseigner `bitwarden@coffre.aquilenet.fr:55555`
101
donner un nom à ce nouvel objet
102
sélectionner la clef dans "Utiliser une clef pour l'authentification"
103
décocher "Démarrer une session en ligne de commande" (seul le tunnel nous intéresse ici).
104
cocher éventuellement "Rester connecter"
105
Enregistrer en haut à droite (icône disquette).
106
107
Appuis long sur le serveur nouvellement créé, puis "éditer les redirections de port"
108
Ajout par "+"
109
Nom:vaultwarden
110
type local,
111
Port source : 8080
112
Destionation: localhost:8080
113
Enregistrer (Créer la redirection de port).
114
115
Lancer la connexion dans ConnectBot
116
taper la passphrasse
117
réduire l'appli
118
lancer l'appli bitwarden
119
la faire pointer sur http://localhost:8080 dans le menu de configuration en haut à droite
120
et enfin s'identifier sur le service.
121
122 2 johan.le.baut
### Accès admin
123
124 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
125 2 johan.le.baut
126 1 johan.le.baut
Un token est demandé, il est visible sur Harpocrates dans /var/www/bitwarden/docker-compose.yaml
127 2 johan.le.baut
128
On ajoute en sécurité supplémentaire une Basic Auth dans Nginx, le fichier de conf est: `/var/www/bitwarden/.htpasswd`
129
Il contient les admins de Harpocrates avec le même hash password du /etc/shadow
130
131
## Installation
132 1 johan.le.baut
133 6 johan.le.baut
134 20 mathias.bert-barbedienne
Sur le serveur Harpocrates, on installe le service vaultwarden (initialement avec un reverse proxy nginx, désactivé depuis).
135 2 johan.le.baut
136 6 johan.le.baut
### installation du service
137 1 johan.le.baut
138 26 johan.le.baut
On peut le lancer via docker, builder manuellement le service ou utiliser un package .deb non officiel.
139 1 johan.le.baut
140 26 johan.le.baut
En ce moment la méthode .deb est utilisée.
141 1 johan.le.baut
142 26 johan.le.baut
#### Package .deb non officiel.
143
144
On peut trouver les packages:
145
- server: https://github.com/dionysius/vaultwarden-deb
146
- front web: https://github.com/dionysius/vaultwarden-web-vault-deb
147
148
il faut télécharger et installer les deux .deb via les releases.
149
```bash
150
VERSION=1.30.5
151
WEB_VERSION=2024.3.0
152
wget "https://github.com/dionysius/vaultwarden-deb/releases/download/debian%2F${VERSION}-0/vaultwarden_${VERSION}-0.bookworm_amd64.deb"
153
wget "https://github.com/dionysius/vaultwarden-web-vault-deb/releases/download/debian%2F${WEB_VERSION}-0/vaultwarden-web-vault_${WEB_VERSION}-0.bookworm_all.deb"
154
155
dpkg -i vaultwarden_${VERSION}-0.bookworm_amd64.deb vaultwarden-web-vault_${WEB_VERSION}-0.bookworm_all.deb
156
```
157
158
**Première installation**
159
160
1. Modifier le fichier `/etc/default/vaultwarden` pour y ajouter la config, par exemple on décommente:
161
162
```
163
WEB_VAULT_FOLDER=/usr/share/vaultwarden-web-vault/
164
WEBSOCKET_ENABLED=true
165
DOMAIN=http://localhost:8080
166
SENDS_ALLOWED=true
167
SIGNUPS_ALLOWED=true
168
SIGNUPS_VERIFY=true
169
SIGNUPS_DOMAINS_WHITELIST=aquilenet.fr
170
INVITATIONS_ALLOWED=true
171
INVITATION_ORG_NAME=Aquilenet
172
ADMIN_TOKEN=<THE ADMIN KEY>
173
DISABLE_ADMIN_TOKEN=false
174
SMTP_HOST=127.0.0.1
175
SMTP_FROM=vaultwarden@coffre.aquilenet.fr
176
SMTP_FROM_NAME="Vaultwarden (Ne pas répondre)"
177
SMTP_SECURITY=off
178
SMTP_PORT=25
179
HELO_NAME=coffre.aquilenet.fr
180
ROCKET_ADDRESS=127.0.0.1
181
ROCKET_PORT=8080
182
```
183
2. `systemctl enable vaultwarden && systemctl start vaultwarden`
184
185
**Mise à jour** (pas encore testé au 06/05/2024)
186
187
Télécharger les .deb et les installer, puis redémarrer le service vaultwarden `systemctl restrart vaultwarden`
188
189
190 21 mathias.bert-barbedienne
#### via docker et docker compose (ancienne méthode).
191 6 johan.le.baut
192
1. Créer le dossier pour la data du service:
193
```
194
mkdir -p /srv/vw-data
195
chown -R bitwarden:bitwarden /srv/vw-data
196
```
197
198 2 johan.le.baut
2. On décrit le container docker à lancer via docker compose
199 1 johan.le.baut
200 2 johan.le.baut
201
`cat /var/www/bitwarden/docker-compose.yaml`
202
```yaml
203
version: '3'
204 6 johan.le.baut
205 2 johan.le.baut
services:
206
  vaultwarden:
207
    image: vaultwarden/server:1.25.2
208 4 johan.le.baut
    container_name: vaultwarden
209
    restart: always
210 2 johan.le.baut
    user: 1000:1000 # bitwarden user
211 4 johan.le.baut
    ports:
212 2 johan.le.baut
      - "127.0.0.1:8080:80"   # port app
213
      - "127.0.0.1:3012:3012" # port web socket
214
    environment:
215 4 johan.le.baut
      ADMIN_TOKEN: <Admin token> # token to connect to admin
216 2 johan.le.baut
      WEBSOCKET_ENABLED: "true"  # Enable WebSocket notifications.
217 1 johan.le.baut
      SIGNUPS_DOMAINS_WHITELIST: aquilenet.fr # on autorise seulement le @aquilenet.fr
218 2 johan.le.baut
      SIGNUPS_VERIFY: true
219 1 johan.le.baut
      INVITATIONS_ALLOWED: false  # Les utilisateurs ne peuvent pas inviter des non inscrits (seulement admin)
220
    volumes:
221
      - /srv/vw-data:/data
222 6 johan.le.baut
223 1 johan.le.baut
```
224 6 johan.le.baut
Il est possible de configurer d'autre choses via la page admin
225 1 johan.le.baut
226 6 johan.le.baut
3. Une fois docker installé, pour démarrer en background:
227
`cd /var/www/bitwarden/ && docker compose up -d`
228 20 mathias.bert-barbedienne
229 6 johan.le.baut
(4. Mise à jour avec docker)
230
231
Ouvrir `/var/www/bitwarden/docker-compose.yaml`
232
233
changer `image: vaultwarden/server:<nouvelle version>`
234
235 20 mathias.bert-barbedienne
236 6 johan.le.baut
Restart (avec docker):
237
```
238
cd /var/www/bitwarden/
239 10 johan.le.baut
docker compose down # Service sera étteint
240 1 johan.le.baut
docker compose up -d --force-recreate
241 6 johan.le.baut
```
242
243 26 johan.le.baut
#### Build et install (ancienne méthode).
244 6 johan.le.baut
245 2 johan.le.baut
Il faut compiler le service et le lancer dans un systemd:
246 13 johan.le.baut
247
Suivre: https://gist.github.com/heinoldenhuis/f8164f73e5bff048e76fb4fff2e824e1
248 7 johan.le.baut
249
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).
250
251
Install actuelle:
252
- systemd file: `/etc/systemd/system/vaultwarden.service`
253
- vaultwarden:
254
  - sources dir: /var/www/bitwarden/vaultwarden
255 8 johan.le.baut
  - binaire: /var/www/bitwarden/vaultwarden/target/release/vaultwarden
256 9 johan.le.baut
  - data dir: /var/www/bitwarden/vaultwarden/target/release/data
257 8 johan.le.baut
  - env file (config): /var/www/bitwarden/vaultwarden/target/release/.env
258 7 johan.le.baut
    - config: 
259
260
```
261
WEB_VAULT_FOLDER=/var/www/bitwarden/bw_web_builds/docker_builds/web-vault
262
WEBSOCKET_ENABLED=true
263
SIGNUPS_VERIFY=true
264 1 johan.le.baut
SIGNUPS_DOMAINS_WHITELIST=aquilenet.fr
265
ADMIN_TOKEN=<admin token>
266 7 johan.le.baut
INVITATIONS_ALLOWED=false
267
ROCKET_ADDRESS=127.0.0.1
268
```
269
- web-vault
270
  - sources dir: /var/www/bitwarden/bw_web_builds/
271
  - build dir: /var/www/bitwarden/bw_web_builds/docker_builds/web-vault
272 2 johan.le.baut
273
### Reverse proxy Nginx
274
275 20 mathias.bert-barbedienne
Le site était configuré dans `/etc/nginx/sites-available/coffre.aquilenet.fr.conf`
276 2 johan.le.baut
277 20 mathias.bert-barbedienne
Les certificats étaient gérés par certbot (cf `sudo certbot certificates`)
278 10 johan.le.baut
279
### Config SMTP
280
281
Il faut configurer une connexion SMTP pour que vaultwarden puisse envoyer des mails.
282 16 johan.le.baut
283 17 johan.le.baut
Sur une VM vierge: 
284
- enlever exim4
285
- installer postfix
286
- enlever params d'authent pour envoyer sur localhost:25
287 18 johan.le.baut
288 20 mathias.bert-barbedienne
Conf vaultwarden SMTP (dans l'interface admin de vaultwarden):
289 18 johan.le.baut
```
290
  "smtp_host": "127.0.0.1",
291
  "smtp_security": "off",
292
  "smtp_port": 25,
293
  "smtp_from": "vaultwarden@aquilenet.fr",
294
  "smtp_from_name": "Vaultwarden (Ne pas répondre)",
295
  "smtp_timeout": 15,
296
  "helo_name": "coffre.aquilenet.fr",
297
  "smtp_accept_invalid_certs": false,
298
  "smtp_accept_invalid_hostnames": false,
299
```