Projet

Général

Profil

Vaultwarden(bitwarden) » Historique » Version 25

mathias.bert-barbedienne, 01/02/2023 13:58

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