bitwarden – coffre fort numérique auto hébergé
Bitwarden est un gestionnaire de mots de passe freemium et open source sous licence AGPL. Il permet de générer et de conserver des mots de passe de manière sécurisée. Ces éléments sont protégés par un seul et unique mot de passe appelé « mot de passe maître ». Il existe une alternative auto hébergeable c’est vaultwarden, une instance non officielle de Bitwarden. Ce tutoriel vous présente l’installation complète sur Debian 10.
Pré-requis
apt update
apt upgrade
apt install git nano curl wget htop pkg-config openssl libssl1.1 libssl-dev
apt install build-essential
Installer Rust
Executer
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Choisir
1) Proceed with installation (default)
Activer l’environnement cargo sur votre compte utilisateur
source $HOME/.cargo/env
Installer Node
Choisir votre méthode d’installation
Manuelle :
# mkdir /opt/node
# cd /opt/node
# wget https://nodejs.org/dist/latest-v11.x/node-v11.15.0-linux-x64.tar.xz
# tar xJvf node-v11.15.0-linux-x64.tar.xz
# ln -s /opt/node/node-v11.15.0-linux-x64 /opt/node/current
# echo 'export PATH=/opt/node/bin:$PATH' >> ~/.bashrc
# export PATH=/opt/node/bin:$PATH
# which npm
/opt/node/current/bin/npm
# npm i npm@latest -g
Automatique via package debian (https://github.com/nodesource/distributions#debinstall)
curl -fsSL https://deb.nodesource.com/setup_12.x | bash -
apt-get install -y nodejs
Compiler bitwarden
Pré-requis si vous voulez utiliser un serveur mysql à la place du fichier nosql
# apt install mariadb-server mariadb-client default-libmysqlclient-dev
# systemctl start mariadb
# mysql_secure_installation
# mysql -u root -p
use mysql;
update user set plugin='' where User='root';
flush privileges;
quit
# mariadb -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
Depuis le passage en Debian 10, le fichier /etc/mysql/debian.cnf a basculé sur le compte root sans MDP. Des erreurs vont apparaitront durant les scripts de maintenance de MariaDB (/var/log/syslog)
# more /etc/mysql/debian.cnf
...
user = root
password =
...
[mysql_upgrade]
...
user = root
password =
...
Remplacement du compte root par debian-sys-maint et ajout d’un mot de passe dans le fichier /etc/mysql/debian.cnf
sed -i 's/root/debian-sys-maint/g' /etc/mysql/debian.cnf
sed -i 's/password =/password = cBHWZQ8D9twjFwkHjcoVFC9cG/g' /etc/mysql/debian.cnf
Le compte et le mdp précédemment renseigné dans le fichier /etc/mysql/debian.cnf vont vous permettre de créer le compte dans MariaDB.
# mariadb -u root -p
CREATE USER 'debian-sys-maint'@'localhost' IDENTIFIED BY 'cBHWZQ8D9twjFwkHjcoVFC9cG';
GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' WITH GRANT OPTION;
flush privileges;
quit
Vous pouvez profiter du paramétrage de mysql pour créer la base et les identifiants nécessaire à Bitwarden
mariadb -u root -p
CREATE DATABASE vaultwarden CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'vaultwarden'@'localhost' IDENTIFIED BY 'Bb8yDAvyKSCJ3CvdZAYAp9ZKp';
GRANT ALL ON `vaultwarden`.* TO 'vaultwarden'@'localhost';
FLUSH PRIVILEGES;
Afin de procéder à l’installation, il est judicieux de vérifier les dernières versions disponible à cette adresse : https://github.com/dani-garcia/vaultwarden/releases
Débuter l’installation de Bitwarden
# mkdir /opt/bitwarden
# cd /opt/bitwarden
# wget https://github.com/dani-garcia/vaultwarden/archive/refs/tags/1.22.2.tar.gz
# tar xvf 1.22.2.tar.gz
# cd vaultwarden-1.22.2
# echo "Si vous souhaitez compiler pour SQLITE, MYSQL, POSTGRESQL
# cargo build --features sqlite,mysql,postgresql --release
# echo "Si vous souhaitez compiler pour SQLITE et MYSQL
# cargo build --features sqlite,mysql --release
# file target/release/vaultwarden
target/release/vaultwarden: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=ef7d7d94c7f0d950e8da317bf4f0c81762f7aaaa, with debug_info, not stripped
# echo "Le binaire est stocké dans le dossier target/release/vaultwarden"
# cp target/release/vaultwarden /usr/local/bin/bitwarden
# useradd -m -d /var/lib/bitwarden bitwarden
# chmod 750 /usr/local/bin/bitwarden
# chown root:bitwarden /usr/local/bin/bitwarden
# mkdir -p /var/lib/bitwarden/{data,log}
# chown -R bitwarden:bitwarden /var/lib/bitwarden/
# chmod -R 750 /var/lib/bitwarden/
# chown -R root:bitwarden /etc/bitwarden/
# chmod 770 /etc/bitwarden/
Interface web vault
Afin de procéder à l’installation, il est judicieux de vérifier les dernières versions disponible à cette adresse : https://github.com/dani-garcia/bw_web_builds/releases
apt install apache2 apache2-bin
a2enmod ssl http2 proxy proxy_http2 proxy_http rewrite headers
Exemple de virtualhost
<VirtualHost *:443>
DocumentRoot /var/www/vault
ServerAdmin postmaster@mondomaine.fr
ServerName vault.mondomaine.fr
Protocols h2 h2c http/1.1
<If "%{HTTP_HOST} != 'vault.mondomaine.fr'">
Redirect "/" "https://vault.mondomaine.fr"
</If>
SSLEngine on
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
ProxyRequests Off
ProxyPreserveHost On
RequestHeader set X-Real-IP %{REMOTE_ADDR}s
RewriteEngine On
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /notifications/hub(.*) ws://127.0.0.1:3012/ [P,L]
ProxyPass / http://127.0.0.1:8000/
LogLevel warn
ErrorLog ${APACHE_LOG_DIR}/error-vault.mondomaine.fr.log
CustomLog ${APACHE_LOG_DIR}/access-vault.mondomaine.fr.log combined
</VirtualHost>
cd /var/www/
mv vault vault.old
wget https://github.com/dani-garcia/bw_web_builds/releases/download/v2.21.1/bw_web_v2.21.1.tar.gz
tar xvfz bw_web_v2.21.1.tar.gz
mv web-vault vault
rm bw_web_v2.21.1.tar.gz
chown -R www-data:www-data /var/www/vault/
Configuration
La compilation maintenant terminé, il faut passer à la configuration :
mkdir /etc/bitwarden/
cp /opt/bitwarden/vaultwarden-1.22.2/.env.template /etc/bitwarden/bitwarden.conf
sed -i 's/'"# ADMIN_TOKEN=.*"'/'"ADMIN_TOKEN=$(tr -cd '[:alnum:]' < /dev/urandom | fold -w 49 | head -n 1)"'/' /etc/bitwarden/bitwarden.conf
grep ^ADMIN_TOKEN /etc/bitwarden/bitwarden.conf
ADMIN_TOKEN=X3yWhAMJhPJu5ISijayKUNBHyNoWW7ZjISXTILtwjdIsVrXmI
sed -i "s/# WEB_VAULT_FOLDER=web-vault/WEB_VAULT_FOLDER=\/var\/www\/vault/" /etc/bitwarden/bitwarden.conf
sed -i "s/# ROCKET_ADDRESS=0\.0\.0\.0.*/ROCKET_ADDRESS=127.0.0.1/" /etc/bitwarden/bitwarden.conf
sed -i "s/# WEBSOCKET_ENABLED=false/WEBSOCKET_ENABLED=true/" /etc/bitwarden/bitwarden.conf
sed -i "s/# WEBSOCKET_ADDRESS=0.0.0.0/WEBSOCKET_ADDRESS=127.0.0.1/" /etc/bitwarden/bitwarden.conf
sed -i "s/# DOMAIN=.*/DOMAIN=https:\/\/vault.mondomain.fr/" /etc/bitwarden/bitwarden.conf
sed -i "s/# LOG_FILE=.*/LOG_FILE=\/var\/lib\/bitwarden\/log\/bitwarden.log/" /etc/bitwarden/bitwarden.conf
sed -i "s/# LOG_LEVEL=.*/LOG_LEVEL=warn/" /etc/bitwarden/bitwarden.conf
sed -i "s/# DATA_FOLDER=data/DATA_FOLDER=\/var\/lib\/bitwarden\/data/" /etc/bitwarden/bitwarden.conf
Pour SQLITE
sed -i "s/# DATABASE_URL=data\/db.sqlite3/DATABASE_URL=\/var\/lib\/bitwarden\/data\/db.sqlite3/" /etc/bitwarden/bitwarden.conf
POUR MYSQL
sed -i "s/# DATABASE_URL=mysql:\/\/user:password@host[:port]\/database_name\/DATABASE_URL=mysql:\/\/vaultwarden:Bb8yDAvyKSCJ3CvdZAYAp9ZKp@localhost\/vaultwarden" /etc/bitwarden/bitwarden.conf
Créer le service bitwarden via systemd
vi /etc/systemd/system/bitwarden.service
[Unit]
Description=Bitwarden RS server (Rust Edition)
Documentation=https://github.com/dani-garcia/vaultwarden
# Only sqlite
After=network.target
# MariaDB
# After=network.target mariadb.service
# Requires=mariadb.service
# Mysql
# After=network.target mysqld.service
# Requires=mysqld.service
# PostgreSQL
# After=network.target postgresql.service
# Requires=postgresql.service
[Service]
# The user/group bitwarden_rs is run under.
User=bitwarden
Group=bitwarden
# The location of the .env file for configuration
EnvironmentFile=/etc/bitwarden/bitwarden.conf
# The location of the compiled binary
ExecStart=/usr/local/bin/bitwarden
# Set reasonable connection and process limits
LimitNOFILE=65535
LimitNPROC=64
# Isolate bitwarden from the rest of the system
PrivateTmp=true
PrivateDevices=true
ProtectHome=true
ProtectSystem=strict
# Only allow writes to the following directory and set it to the working directory (user and password data are stored here)
WorkingDirectory=/var/lib/bitwarden
ReadWriteDirectories=/var/lib/bitwarden
# Allow bitwarden to bind ports in the range of 0-1024
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
[Install]
WantedBy=multi-user.target
Valider, vérifier et lancer le daemon
systemctl daemon-reload
systemctl start bitwarden.service
systemctl enable bitwarden.service
systemctl status bitwarden.service
Exemple pour connecter votre bitwarden en cli
Sur macOC installer le client bitwarden cli
brew install bitwarden-cli
Configurer votre site perso
$ bw config server https://vault.mondomaine.fr
Saved setting `config`.
Il ne vous reste qu’a vous logger
$ bw login
? Email address: moi@mondomaine.fr
? Master password: [hidden]
You are logged in!
To unlock your vault, set your session key to the `BW_SESSION` environment variable. ex:
$ export BW_SESSION="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
> $env:BW_SESSION="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
You can also pass the session key to any command with the `--session` option. ex:
$ bw list items --session xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Peupler la base utilisateur Bitwarden via un Active Directory
J’ai privilégié de bloquer le domaine pour mon instance de Bitwarden, ainsi les utilisateurs créent leur compte avec leur passphrase. Je n’utilise donc pas cet exécutable mais j’ai validé son fonctionnement.
# cd /opt/bitwarden
# git clone https://github.com/ViViDboarder/vaultwarden_ldap.git
# cd vaultwarden_ldap
# cp example.config.toml config.toml
# cargo clean && cargo build --release
Références
-
https://illuad.fr/2020/06/11/install-a-bitwarden-rs-server.html
-
https://leffler.tech/2021/02/16/bitwarden_rs-without-docker/
-
https://gist.github.com/tavinus/59c314f4ccd70879db7f11074eacb6cc
-
https://hub.docker.com/r/vividboarder/bitwarden_rs_ldap/dockerfile
-
https://leffler.tech/2021/02/16/bitwarden_rs-without-docker/
-
https://fiat-tux.fr/2019/01/14/installer-un-serveur-bitwarden_rs/