Bitwarden Passwortmanager auf dem Raspberry Pi (Teil 3)

Fr, 24. September 2021, Norbert Rüthers

Nachdem die grundlegenden Dinge in Teil 1 und 2 erledigt wurden, geht es daran Bitwarden erreichbar zu machen.

NGINX ist eine bessere Alternative zu Apache für den Raspberry Pi, und zwar aus verschiedenen Gründen.
Einige Gründe, warum NGINX auf dem Raspberry Pi besser ist, sind der geringere Speicherverbrauch und die allgemein geringere CPU-Auslastung, was bedeutet, dass Sie mehr aus den begrenzten Ressourcen Ihres Raspberry Pi herausholen können. Man könnte NGINX natürlich auch wie Bitwarden als Docker Container unter Portainer installieren, aber da NGINX nach der Konfiguration nicht mehr angefasst werden muss, habe ich mich für die konventionelle Methode entschieden. 

Dafür starten wir eine SSH Verbindung zum Raspberry und geben am Terminal folgende Befehle ein.

Zuerst wie immer ein Update des Systems

sudo apt update && sudo apt upgrade -y

Danach installieren wir NGINX

sudo apt install nginx

Nach der Installation starten wir NGINX

sudo systemctl start nginx

Danach können wir testen ob NGINX läuft

In einen Browser geben wir die IP-Adresse des Raspberry ein, die wir vorher mit

hostname -I

herausgefunden haben

Wie man sieht läuft NGINX nun

Im Gegensatz zu Apache wird NGINX nicht automatisch für die Verwendung mit PHP eingerichtet. Wir müssen stattdessen Änderungen an den Konfigurationsdateien vornehmen, damit es geladen werden kann.
Außerdem müssen wir aufgrund der Funktionsweise von NGINX PHP-FPM und nicht Standard-PHP verwenden.
Bevor wir mit der Konfiguration von PHP für NGINX beginnen, müssen wir zunächst PHP 7.3 und einige empfohlene PHP-Module installieren, die den Umgang mit umfangreicheren PHP-Skripten erleichtern.

sudo apt install php7.3-fpm php7.3-mbstring php7.3-mysql php7.3-curl php7.3-gd php7.3-curl php7.3-zip php7.3-xml -y

Wenn das erledigt ist müssen wir noch Änderungen an der Standard NGINX Konfigurationsdatei vornehmen

sudo nano /etc/nginx/sites-enabled/default

In dieser Datei suchen wir folgende Zeile:

index index.html index.htm;

Und ersetzen sie mit:

index index.php index.html index.htm;

Wir haben index.php zur Index-Zeile hinzufügen, was NGINX anweist, die Datei index.php als möglichen Index zu erkennen, und das Hinzufügen dieser Datei als erste in der Liste bedeutet, dass sie gegenüber einer index.html-Datei ausgewählt wird

Dann suchen wir folgendes:

#location ~ \.php$ {
        #       include snippets/fastcgi-php.conf;
        #
        #       # With php5-cgi alone:
        #       fastcgi_pass 127.0.0.1:9000;
        #       # With php5-fpm:
        #       fastcgi_pass unix:/var/run/php5-fpm.sock;
        #}

Und ersetzen es mit:

location ~ \.php$ {
               include snippets/fastcgi-php.conf;
               fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
        }

Dieser Code richtet NGINX für die Verarbeitung von .php-Dateien ein, indem er sie an PHP-FPM weiterleitet.

Damit sind wir fertig und drücken STRG + O und STRG + X um zu speichern und zu beenden.

Um die Änderungen zu aktivieren, starten wir NGINX neu

sudo systemctl reload nginx

Wir können nun einen virtuellen Host für NGINX erstellen, der es ihm ermöglicht, Verbindungen zu Bitwarden zu vermitteln. Zunächst entfernen wir die Standardkonfigurationsdatei für NGINX.
Das muss nicht gemacht werden, wenn Du Bitwarden zusammen mit einem Domainnamen verwenden möchtest.

sudo rm /etc/nginx/sites-enabled/default

Wir müssen eine neue Konfigurationsdatei für NGINX erstellen.
Dazu beginnen wir mit dem Schreiben dieser neuen Konfigurationsdatei mit dem Texteditor nano, indem der folgendee Befehl ausführt wird.

sudo nano /etc/nginx/sites-enabled/bitwarden.conf

Dieser erste Block, den wir hinzufügen, leitet jeglichen Verkehr von http (Port 80) auf https (Port 443) um.

server {
    listen 80;
    listen [::]:80;
    server_name _; #Change this to your domain name
    return 301 https://$host$request_uri;
}

Als Nächstes müssen wir unseren Serverblock hinzufügen, der das Proxying und die HTTPS-Verbindung übernimmt. Wenn Letsencrypt zur Erzeugung des Zertifikats verwendet wird, müssen die Pfade für "ssl_certifcate" und "ssl_certificate_key" austauscht werden.

Zwischenschritt......Letsencrypt installieren:

Es muss sichergestellt werden das auf Deinem Router die Ports 80 und 443 zu deinem Raspberry freigeschaltet sind. Das erfordert bei jedem Router eine andere Vorgehensweise und würde den Rahmen des Artikels sprengen

sudo apt install certbot
sudo apt install python-certbot-nginx

Danach certbot mit

sudo certbot

starten und den Anweisungen folgen

Zwischenschritt Ende

Je nachdem, wie Du den Raspberry Pi Bitwarden-Server verwenden möchtest, müssen ein paar Dinge geändert werden. Wenn Du einen Domänennamen verwenden möchtest, muss servername _; ersetzt werden, um ihn einzuschließen.
Unser Servername würde zum Beispiel folgendermaßen lauten: "server_name bitwarednserver.test.com".
Danach sollte Deine Datei so aussehen, wie unten dargestellt.

server {
    listen 80;
    listen [::]:80;
    server_name _; #Bitte auf deinen Domänennamen abändern
    return 301 https://$host$request_uri;
}

server {
  listen 443 ssl http2;
  server_name _; #Bitte auf deinen Domänennamen abändern

  ssl_certificate      /etc/ssl/certs/nginx-bitwarden.crt;   #Swap these out with Lets Encrypt Path if using signed cert
  ssl_certificate_key  /etc/ssl/private/nginx-bitwarden.key; #Swap these out with Lets Encrypt Path if using signed cert

  ssl_dhparam /etc/ssl/certs/dhparam.pem;

  # Allow large attachments
  client_max_body_size 128M;

  location / {
    proxy_pass http://0.0.0.0:8080;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
  }

  location /notifications/hub {
    proxy_pass http://0.0.0.0:3012;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
  }

  location /notifications/hub/negotiate {
    proxy_pass http://0.0.0.0:8080;
  }

Danach kann die Datei gespeichert (STRG + o) und nano beendet werden (STRG + X)

Dann kannst Du dich auf der Web-Oberfläche von Bitwarden anmelden:

https://IP-Adresse-des-Raspberry

Wenn Du einen Domänennamen verwendet hast, musst Du natürlich den eingeben

Danach erscheint die Web-Oberfläche von Bitwarden

Du kannst nun damit beginnen, die Informationen für dein neues Konto auszufüllen.
Als erstes musst Du die E-Mail-Adresse für dieses Bitwarden-Konto eingeben
Mit dieser E-Mail Adresse wirst Du dich in Zukunft anmelden.
Als nächstes musst Du einen Namen angeben, den Bitwarden verwenden soll.
Dann muss ein Passwort für dieses Konto festlegt werden.
Darauf achten, dass Du ein sicheres und nicht leicht zu erratendes Passwort wählst.
Bevor die Erstellung des Kontos abschlossen werden kann, musst Du noch den Nutzungsbedingungen und der Datenschutzerklärung von Bitwarden zustimmen.

Nach der Anmeldung mit Deinen neuen account Daten siehst du den Inhalt deines Tresors

Der ist in Deinem Fall natürlich noch leer

Quelle: https://en.wikipedia.org/wiki/File:Bitwarden_Desktop_MacOS.png

Das Bitwarden admin Panel aktivieren

Nachdem nun ein Konto erstellt ist, kannst Du nun das Admin-Token generieren.
Das Admin-Token ist das, was Du für den Zugriff auf das Bitwarden-Administrationspanel verwenden wirst. Dazu müssen Änderungen an unserer Docker-Container-Konfiguration vorgenommen werden.
In der Verwaltungskonsole kann man alle registrierten Benutzer anzeigen lassen und sie auch löschen. Man kann auch Einladungen für neue Benutzer generieren.
Über diese Schnittstelle lassen sich auch die zahlreichen Bitwarden-Optionen konfigurieren. Zum Beispiel, ob Du möchtest, dass sich andere Personen anmelden können.

Der erste Schritt besteht darin, ein neues Admin-Token für Bitwarden zu generieren.
Da dieses Token eine relativ lange Zeichenkette aus starken, zufällig generierten Zeichen sein muss, werden wir openssl verwenden. Um diese sichere Zeichenfolge zu erzeugen, kannst Du den folgenden Befehl auf Ihrem Raspberry Pi ausführen.

openssl rand -base64 48

Achte darauf, dass dieser Token geheim bleibt, da sonst jeder vollen Zugriff auf den Bitwarden RS-Server hat.
Wir müssen nun dieses neue Admin-Token in den Bitwarden-Docker-Container unseres Raspberry Pi einfügen.
Es ist möglich, dies über das Portainer-Webinterface zu tun.

Einstellen des Admin-Tokens mit Portainer
Um das Admin-Token zu setzen, musst Du die Portainer-Schnittstelle starten und zur Containerliste zurückkehren.
In der Containerliste musst Du den Bitwarden Container identifizieren.
Wenn Du ihn gefunden hast, kicke ihn an, um seine Informationsseite aufzurufen

1

Oben auf der nächsten Seite sollte sich eine Schaltfläche "Duplizieren/Bearbeiten" befinden.

Auf diese Schaltfläche klicken, um mit der Bearbeitung der Einstellungen des Containers zu beginnen

Blättere auf dieser Seite nach unten, bis Du die Überschrift "ENV" findest.

Klicke auf die Schaltfläche "Add an environmental variable", damit Du das Admin-Token hinzufügen kannst
Wenn Du auf diese Schaltfläche klickst, werden unten auf der Seite zwei neue Textfelder eingeblendet.
In das Textfeld "Name" musst Du "ADMIN_TOKEN" eingeben.
In das Feld "Wert" musst Du das zu verwendende Admin-Token eingeben.
Wenn das erfolgt ist, kannst Du auf die Schaltfläche "Deploy the Container" klicken

Auf die Abfrage das ein Container mit gleichem Namen schon existiert bitte mit "Replace" antworten.

Das Bitwarden Admin-Panel aufrufen

Im Browser folgendes eingeben

https://<IP-Adresse des Raspbery>/admin

Im nun folgenden Eingabefenster bitte das Admin-Token mit copy & paste einfügen

Danach erscheint die Admin-Seite auf der User angelegt und gelöscht werden, sowie alle generellen Einstellungen von Bitwarden erfolgen können.

Damit sind wir am Ende angelangt.

Ich persönlich verwende die Browser Add-ons von Bitwarden, um an meinen Tresor zu gelangen.

Es schadet auch nicht ab und zu den Tresor zu exportieren und ihn an einer sicheren Stelle zu speichern.

Weitere Infos zur Verwendung finden sich zuhauf, wenn man die Suchmaschine seiner Wahl bemüht.