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 | ``` |