Projet

Général

Profil

Vaultwarden(bitwarden) » Historique » Version 31

philippe.swartvagher, 24/11/2024 17:50
use -N in the ssh forwarding

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