Bitwarden Passwortmanager auf dem Raspberry Pi (Teil 3)

  Norbert Rüthers   Lesezeit: 14 Minuten  🗪 9 Kommentare

Einrichtung von Bitwarden auf dem Raspberry Teil 3 von 3

bitwarden passwortmanager auf dem raspberry pi (teil 3)

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.

                                                                                                                                                                     

Tags

NGINX, Bitwarden, Raspberry, Admin-Token, STRG, E-Mail, PHP

chrisi
Geschrieben von chrisi am 9. Oktober 2021 um 20:02

Hallo!

Vielleicht können Sie mir helfen wäre Ihnen sehr dankbar.

Finde diesen Code nicht um ihn zu ersetzen:

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;
    #}

1 Frage: Es gibt schon einen Code nur der sieht nicht genau so aus wie oben eingefügt. Könnten Sie mir den ganzen Quellcode senden um ihn zu ersetzen ?

2 Frage, habe ich auch noch kann ich bei der Domain auch eins DDNS Adresse verwenden oder geht nur eine Domain bzw Subdomain?

3 Frage, wo muss ich das ändern ?

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

server { listen 443 ssl http2; servername ; #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; } Danke für Ihre Hilfe.

Mit freundlichen Grüßen Chrisi

chrisi
Geschrieben von chrisi am 10. Oktober 2021 um 09:57

Bekomme immer an Schluss einen Lets Encrypt fehler leider, ich hoffe es kann mir wer helfen.

lg

Mke
Geschrieben von Mke am 31. Oktober 2021 um 11:23

bei mir kann ich leider trotz aller Schritte Bitwarden nicht aufrufen

Eduard
Geschrieben von Eduard am 5. Dezember 2021 um 20:24

Teil 1 & 2 fand ich super und nachvollziehbar. Teil 3 ist aber alles andere als nachvollziehbar.

  1. Hier wird davon ausgegangen, dass man eine default config file von nginx hat, was nicht der Fall ist. Entweder muss man diese erzeugen oder sie leer! Bei einer leeren Datei, sollte man im Netz den Inhalt suchen und reinpasten.
  2. Bei Certbot bin ich als Anfänger ausgestiegen, denn es heißt, dass man einfach den Anweisungen bei der Installation folgen soll. Anscheinend wird dafür eine Domain benötigt. Soetwas habe ich nicht.
  3. Bei Installation der PHP-Module bekomme ich viele Meldungen, dass diese nicht installiert werden konnten.
  4. Wozu wird zuerst die Default-Config-Datei von Nginx editiert, wenn sie im anschluss gelöscht wird?

Ich bin Anfänger und verstehe hier nicht alles, jedoch fand ich Teil 1 und 2 gut. In Teil 3 versteh ich aber kaum etwas, vllt gehts nur mir so.

Norbert
Geschrieben von Norbert am 7. Dezember 2021 um 11:56

Hallo Eduard Die Installation von Bitwarden ist leider nicht trivial....ich weiss. Da ich hier nicht für jeden Artikel Support leisten kann verweise ich auf die zahlreichen Quellen im Netz. Wenn Du Bitwarden "einfach" installieren willst empfehle ich Yunohost

Dort gibt es eine App die Vaultwarden heisst und ein Fork von Bitwarden ist. Auch ich nutze das. Meinen Artikel über Yunohost findest Du hier auf GnuLinux

Erich
Geschrieben von Erich am 22. Februar 2022 um 09:57

Hallo Installation läuft. Alles bestens. Vielen Dank für diese tolle Anleitung. Bin schon ein älters Semenster und neige dazu, ab und zu eine geistige Herausforderung anzunehmen. Noch eine Frage: kann basierend auf dieser Installation auch fail2ban installiert werden? Falls ja, kannst Du allenfalls eine diesbezügliche Ergänzung (Teil 4) machen, und damit der Sicherheit noch eine zusätzliche Stufe hinzuzufügen. Beste Grüsse - Erich

Carsten
Geschrieben von Carsten am 4. Dezember 2022 um 08:48

Hallo,

vielen Dank für die gelungene Anleitung.

Ich möchte an dieser Stelle noch eine, aus meiner Sicht geeignetere, Konfiguration für den NGINX anbieten. Habe sie hier gepostet:

https://github.com/nephilim75/nginx_bitwarden_config/blob/main/bitwarden.conf

Vielleicht findet sie jemand hilfreich.

Liebe Grüße

Arno
Geschrieben von Arno am 30. Januar 2023 um 13:22

Hallo, bei dem Punkt Zwischenschritt......Letsencrypt installieren erhalte ich die folgende Fehlermeldung :

E: Paket python-certbot-nginx kann nicht gefunden werden.

@raspberrypi:~ $ sudo apt install python-certbot-nginx Paketlisten werden gelesen… Fertig Abhängigkeitsbaum wird aufgebaut… Fertig Statusinformationen werden eingelesen… Fertig E: Paket python-certbot-nginx kann nicht gefunden werden.

Wie komme ich nun weiter.

Gruß Arno

👓
Geschrieben von 👓 am 4. März 2024 um 19:10

Gibt es auch einen weg ohne internet Zugriff? Im aktuellen Artikel muss man mit Letencrypt zertifikate erstellen. Mein NAS hat aber kein Internet und ich greiffe via VPN drauf zu.