Padloc Password Manager te installeren op Rocky Linux 8

Padloc is een cloud-gebaseerde oplossing voor wachtwoordbeheer waarmee je je opgeslagen wachtwoorden op meerdere platforms kunt inzien en gebruiken. Het biedt een eenvoudige interface en kan gebruikt worden om je wachtwoorden op te slaan en kan gevoelige documenten versleutelen en opslaan. Het ondersteunt ook het opslaan van twee-factor authenticatie tokens en kan deze direct vanaf de webpagina toevoegen.

Padloc biedt ook een open-source self-hosted oplossing die je op elke server kunt installeren om volledige controle over je gegevens te houden. Hier zit echter een voorbehoud aan vast. Je kunt de zelf gehoste toepassing niet gebruiken met zijn desktop en mobiele apps. Aan de positieve kant wordt Padloc geserveerd als een PWA (Progressive web app), wat betekent dat je het als een native applicatie op mobiel kunt installeren en gebruik kunt maken van verschillende van zijn functies.

In deze tutorial leer je hoe je Padloc Password Manager installeert op een Rocky Linux 8 gebaseerde server.

Voorwaarden

  • Een server met Rocky Linux 8 met minimaal 1 GB RAM.
  • Een niet-root gebruiker met sudo rechten.
  • Een Fully Qualified Domain Name (FQDN) die naar de server wijst zoals example.com. We nemen aan dat je voor deze tutorial slechts één domeinnaam gebruikt voor deze server.

Stap 1 – Firewall

De eerste stap is het configureren van de firewall. Rocky Linux gebruikt Firewalld Firewall. Controleer de status van de firewall.

$ sudo firewall-cmd --state
running

De firewall werkt met verschillende zones, en de publieke zone is de standaardzone die we zullen gebruiken. Maak een lijst van alle diensten en poorten die actief zijn op de firewall.

$ sudo firewall-cmd --permanent --list-services

Het zou de volgende uitvoer moeten tonen.

cockpit dhcpv6-client ssh

Sta HTTP en HTTPS poorten toe.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

Controleer opnieuw de status van de firewall.

$ sudo firewall-cmd --permanent --list-services

Je zou een soortgelijke uitvoer moeten zien.

cockpit dhcpv6-client http https ssh

Herlaad de firewall om de wijzigingen in te schakelen.

$ sudo firewall-cmd --reload

Stap 2 – Docker installeren

Rocky Linux wordt geleverd met een oudere versie van Docker. Om de nieuwste versie te installeren, installeer je eerst de officiële Docker repository.

$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

Installeer de nieuwste versie van Docker.

$ sudo dnf install docker-ce docker-ce-cli containerd.io

Activeer en draai de Docker daemon.

$ sudo systemctl enable docker --now

Controleer of hij draait.

$ sudo systemctl status docker
? docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2022-04-09 22:43:21 UTC; 30s ago
     Docs: https://docs.docker.com
 Main PID: 43005 (dockerd)
    Tasks: 7
   Memory: 90.5M
   CGroup: /system.slice/docker.service
           ??43005 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
 ....

Standaard heeft Docker rootrechten nodig. Als je wilt voorkomen dat je telkens sudo gebruikt als je het commando docker uitvoert, voeg dan je gebruikersnaam toe aan de groep docker.

$ sudo usermod -aG docker $(whoami)

Je moet uitloggen van de server en weer inloggen als dezelfde gebruiker om deze wijziging mogelijk te maken.

Stap 3 – Installeer Docker-Compose

Download de laatste stabiele versie van Docker Compose.

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Pas uitvoerbare rechten toe op het Docker Compose binaire bestand.

$ sudo chmod +x /usr/local/bin/docker-compose

Test de installatie.

$ docker-compose --version
docker-compose version 1.29.2, build 5becea4c

Installeer het Docker-compose Bash Completion script.

$ sudo curl \
    -L https://raw.githubusercontent.com/docker/compose/1.29.2/contrib/completion/bash/docker-compose \
    -o /etc/bash_completion.d/docker-compose

Herlaad je profielinstellingen om de bash-completion te laten werken.

$ source ~/.bashrc

Stap 4 – Maak gegevensdirectories aan

Maak een directory aan voor padloc.

$ mkdir ~/padloc

Ga naar de padloc-map.

$ cd ~/padloc

Maak mappen voor de gebruikersdatabase, toepassingslogs, bijlagen, de PWA app en SSL-configuratie.

$ mkdir {attachments,db,logs,pwa,ssl}

Maak een directory voor Nginx logs.

$ mkdir logs/nginx

Stap 5 – Maak Docker Compose bestand aan

Maak en open het ~/padloc/docker-compose.yml bestand om te bewerken.

$ nano docker-compose.yml

Plak er de volgende code in.

version: "3"
services:
    server:
        image: padloc/server
        container_name: padloc_server
        restart: unless-stopped
        #ports:
        #    - ${PL_SERVER_PORT:-3000}:3000
        expose:
            - 3000
        volumes:
            - ${PL_DB_DIR:-./db}:/data:Z
            - ${PL_ATTACHMENTS_DIR:-./attachments}:/docs:Z
            - ./logs:/logs:Z
        environment:
            - PL_PWA_URL
            - PL_EMAIL_SERVER
            - PL_EMAIL_PORT
            - PL_EMAIL_USER
            - PL_EMAIL_PASSWORD
            - PL_EMAIL_FROM
    pwa:
        image: padloc/pwa
        container_name: padloc_pwa
        restart: unless-stopped
        #ports:
        #    - ${PL_PWA_PORT:-8080}:8080
        expose:
            - 8080
        volumes:
            - ${PL_PWA_DIR:-./pwa}:/pwa:Z
        environment:
            - PL_SERVER_URL
    nginx:
        image: nginx
        container_name: nginx
        restart: unless-stopped
        volumes: 
            - ./nginx.conf:/etc/nginx/nginx.conf
            - ${PL_SSL_CERT:-./ssl/cert.pem}:/ssl/cert
            - ${PL_SSL_KEY:-./ssl/key.pem}:/ssl/key
            - ${PL_SSL_CONF:-./ssl/ssl.conf}:/ssl/ssl.conf
            - /etc/ssl/certs/dhparam.pem:/ssl/dhparam.pem
            - ./logs/nginx:/var/log/nginx:Z
        ports:
            - 80:80
            - 443:443

Sla het bestand op door op Ctrl + X te drukken en Y in te voeren als daarom wordt gevraagd.

We gebruiken drie Docker images voor Padloc.

  1. Het Server image – bevat alle backend logica voor de applicatie. Het draait standaard op poort 3000. We hebben de ports variabele in ons compose bestand uitgecommentarieerd om de poort onzichtbaar te maken voor de server. In plaats daarvan gebruiken we de expose variabele om de poort in de Docker engine bloot te stellen aan de Nginx container. De omgevingsvariabelen voor de image worden later geconfigureerd. We hebben ook mappen in kaart gebracht voor een gebruikersdatabase, bijlage en toepassingslogs.
  2. Het PWA image – bevat de voorkant van de applicatie. Het draait standaard op poort 8080. Voor het server image hebben we de poorten sectie voor dit image verborgen en de poort in de Docker engine blootgesteld. We hebben de directory voor de web-app in kaart gebracht.
  3. Het Nginx image – bevat de Nginx server applicatie. We hebben de poorten voor HTTP(80) en HTTPS(443) aan de server gekoppeld om hem van buitenaf toegankelijk te maken. We hebben verschillende mappen en bestanden in kaart gebracht om het te laten werken.
    • Het eerste bestand is nginx.conf dat alle hoofdconfiguraties voor Nginx bevat om de padloc applicatie te dienen.
    • De volgende twee bestanden, cert.pem en key.pem zijn het SSL-certificaat en de sleutels die we zullen genereren met Let’s encrypt.
    • Het bestand ssl.conf bevat aanvullende informatie over het serveren van SSL via Nginx.
    • Het bestand dhparam.pem is om het Diffie-Hellman groepscertificaat te serveren.
    • De laatste vermelding is om de Nginx logs terug te mappen naar de server, zodat je er buiten Docker bij kunt.
  4. De :Z vlag aan het eind van de map mappings geeft aan dat die mappen alleen toegankelijk zullen zijn vanuit de respectievelijke containers. Dit wordt gedaan omdat SELINUX is ingeschakeld op onze server. Als je SELinux niet gebruikt, dan kun je de vlag verwijderen.

Stap 6 – NGinx configureren

Maak het bestand ~/padloc/nginx.conf aan en open het om te bewerken.

$ nano nginx.conf

Plak er de volgende code in.

http {
    # This is required if you want to upload attachments
    client_max_body_size 10m;

    # Redirect all http traffic to https
    server {
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name _;
        return 301 https://$host$request_uri;
    }

    server {
        # We don't need a host name here since we're only
        # dealing with one domain, but you may insert your domain here.
        server_name _;

        # Both server and pwa are served over https
        listen 443 ssl http2;
        listen [::]:443 ssl http2;

        # This will resolve to the server instance
        location /server/ {
            proxy_pass http://padloc_server:3000;
            rewrite ^/padloc_server(.*)$ $1 break;
        }

        # This will resolve to the web app
        location / {
            proxy_pass http://padloc_pwa:8080;
            rewrite ^/padloc_pwa(.*)$ $1 break;
        }

        # SSL certificate
        ssl_certificate /ssl/cert;
        # SSL private key
        ssl_certificate_key /ssl/key;

        # Add this file to add advanced ssl configuration
        include /ssl/ssl.conf;
    }
}

# This section is required by nginx
events {}

Sla het bestand op door op Ctrl + X te drukken en Y in te voeren als daarom wordt gevraagd.

De bovenstaande configuratie stuurt alle verzoeken van de padloc_server container door naar de /server locatie van de domeinnaam en alle verzoeken van de padlock_pwa container naar de root. Ook wordt al het HTTP verkeer omgeleid naar HTTPS. We hebben ook de uploadgrootte van bestanden ingesteld op 10 MB voor bijlagen. Je kunt de grootte naar wens aanpassen. De SSL instellingen zijn opgenomen via een extern bestand dat we later zullen configureren.

Stap 7 – Omgevingsbestand maken

Maak het bestand ~/padloc/.env aan en open het om te bewerken.

$ nano .env

Plak er de volgende code in.

# GENERAL SETTINGS
# ================
# URL that will resolve to the server instance
PL_PWA_URL=https://example.com/
# URL that will resolve to the web app
PL_SERVER_URL=https://example.com/server/

# SERVER SETTINGS
# ===============
# Port the server instance will listen on
PL_SERVER_PORT=3000
# Directory where database files will be stored
PL_DB_DIR=./db
# Directory where attachment files will be stored
PL_ATTACHMENTS_DIR=./attachments

# PWA SETTINGS
# ============
# Port the web app will be served from
PL_PWA_PORT=8080
# Directory where the static code for the web app will be stored
PL_PWA_DIR=./pwa

# EMAIL SETTINGS
# =============
# SMTP host
PL_EMAIL_SERVER=smtp.example.com
# SMTP username
[email protected]
# SMTP port
PL_EMAIL_PORT=443
# SMTP password
PL_EMAIL_PASSWORD=your_smtp_password
# Always use TLS when sending emails
# PL_EMAIL_SECURE=false
# Email ID to send mails from
[email protected]

# SSL SETTINGS
# ============
# The path to your ssl certificate
PL_SSL_CERT=/etc/letsencrypt/live/example.com/fullchain.pem
# The path to your ssl private key
PL_SSL_KEY=/etc/letsencrypt/live/example.com/privkey.pem
# Advanced configuration file
PL_SSL_CONF=./ssl/ssl.conf

Sla het bestand op door op Ctrl + X te drukken en Y in te voeren als daarom wordt gevraagd. De meeste instellingen spreken voor zich. De bestaande Nginx configuratie verwacht dat de app geserveerd wordt via het hoofddomein en de server via /server directory. De PL_PWA_DIR is niet verplicht om hier en in het Docker-compose bestand in te stellen, maar het hebben ervan versnelt het opstarten van de container, en daarom zou je het altijd moeten instellen.

Padloc heeft de mogelijkheid nodig om e-mails te versturen voor functies als het verifiëren van nieuwe gebruikers, twee-factor authenticatie en het resetten van wachtwoorden. Daarom zijn SMTP-gegevens verplicht.

Voor de SSL-functie gebruiken we standaardmappen van Let’s Encrypt waar de certificaten zich bevinden. De aanvullende SSL configuratie wordt verstrekt via het bestand /ssl/ssl.conf.

Stap 8 – SSL installeren

Om een SSL-certificaat te installeren met Let’s Encrypt, moeten we het hulpprogramma Certbot installeren.

Eerst moet je de EPEL repository downloaden en installeren.

$ sudo dnf install epel-release

Voer de volgende commando’s uit om Certbot te installeren.

$ sudo dnf install certbot

Genereer het SSL-certificaat.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d example.com

Het bovenstaande commando zal een certificaat downloaden naar de /etc/letsencrypt/live/example.com directory op je server.

Genereer een Diffie-Hellman groepscertificaat.

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Maak een Cron Job aan om de SSL te vernieuwen. Deze zal elke week worden uitgevoerd om het certificaat te controleren en zo nodig te vernieuwen. Maak daarvoor eerst het bestand /etc/cron.weekly/certbot-renew aan en open het voor bewerking.

$ sudo nano /etc/cron.weekly/certbot-renew

Plak er de volgende code in. We gebruiken de Docker commando’s om de Nginx container te starten, stoppen en herstarten, afhankelijk van de vernieuwingsstatus.

#!/bin/sh
certbot renew --cert-name example.com --pre-hook "docker stop nginx" --post-hook "docker start nginx" --renew-hook "docker restart nginx"

Sla het bestand op door op Ctrl + X te drukken en Y in te voeren als daarom wordt gevraagd.

Wijzig de rechten op het taakbestand om het uitvoerbaar te maken.

$ sudo chmod +x /etc/cron.weekly/certbot-renew

Stap 9 – SSL configureren

Maak en open het bestand ~/padloc/ssl/ssl.conf om te bewerken.

$ nano ssl/ssl.conf

Plak er de volgende code in.

ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_prefer_server_ciphers off;

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;

ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /ssl/dhparam.pem;
resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001] 8.8.8.8 8.8.4.4 [2001:4860:4860::8888] [2001:4860:4860::8844] valid=60s;
resolver_timeout 2s;

Sla het bestand op door op Ctrl + X te drukken en Y in te voeren als daarom wordt gevraagd.

Het bovenstaande bestand introduceert enkele aanbevolen SSL-instellingen om je site veiliger te maken. Het beperkt TLS protocollen tot v1.2 en v1.3 en schakelt Online Certificate Status Protocol (OCSP) nieten en verificatie in.

Stap 10 – Voer Padloc uit

Nu je alles hebt geconfigureerd voer je Padloc uit met het volgende commando.

$ docker-compose up -d

Controleer de status van de containers.

$ docker ps

U zou een soortgelijke uitvoer moeten krijgen.

Docker PS uitvoer voor Padloc

Stap 11 – Open en configureer Padloc

Open de URL https://example.com in je browser, en je komt op de aanmeldingspagina.

Padloc inlogpagina

Klik op de Sign up Now link om de registratie te starten.

Padloc inschrijfpagina

Voer je naam en e-mailadres in, en druk op de knop Doorgaan om verder te gaan.

Padloc e-mailbevestigingspagina

Padloc verificatie e-mail

Padloc stuurt je een e-mail met een bevestigingscode. Voer de bevestigingscode in het vak hierboven in, en druk op Doorgaan om verder te gaan.

Padloc Hoofdwachtwoord Pagina instellen

Padloc genereert automatisch een hoofdwachtwoord voor je. Beweeg over het vakje en kopieer het. Plak het weer in het vakje eronder. Je kunt er ook voor kiezen om je wachtwoord te gebruiken. Druk op Doorgaan als je klaar bent.

Padloc App Home

Je komt nu op de Padloc Homepage. Je kunt beginnen met het opslaan van je inloggegevens en gevoelige documenten.

Stap 12 – Padloc bijwerken

Het bijwerken van Padloc gaat in twee stappen. Ga eerst naar de Padloc-map.

$ cd ~/padloc

Sluit de bestaande Padloc containers af en verwijder ze.

$ docker-compose down --remove-orphans

Haal de nieuwste images op.

$ docker-compose pull

Start de containers weer op.

$ docker-compose up -d

Conclusie

Dit besluit onze tutorial over het installeren van Padloc Self-hosted password manager op een Rocky Linux 8 server. Als je vragen hebt, post ze dan in de opmerkingen hieronder.