En password manager er det enkelt vigtigste værktøj, du kan tage i brug for at sikre dine konti. Men hvor ender dine krypterede hvælvinger egentlig? Hos en kommerciel udbyder ligger de på en sky, du ikke kontrollerer. Med en selvhostet løsning ligger de på din egen server, bag din egen kryptering og dine egne regler. Denne guide viser dig, hvordan du opsætter Vaultwarden, den lette Rust-baserede server, der taler Bitwardens API, i 12 konkrete trin på cirka 45 minutter.
Du får en komplet, kørende stak: Docker-container, HTTPS via reverse proxy, Argon2id-nøgleudledning, to-faktor, automatiske krypterede backups og hærdning med fail2ban. Alt sammen kompatibelt med de officielle Bitwarden-klienter til browser, mobil, desktop og kommandolinje. Hver kode-blok kan kopieres direkte. Til sidst finder du faldgruber, fejlfinding og avancerede tips, så din password manager kører stabilt i drift.
Hvorfor self-hoste din password manager i 2026?
Selvhosting handler om kontrol. Når du driver din egen Vaultwarden-instans, forlader dine krypterede data aldrig infrastruktur, du selv ejer. Du bestemmer, hvem der kan oprette konti, hvor backups lander, og hvornår du opdaterer. For privatpersoner, små teams og virksomheder med GDPR-krav er den datasuverænitet et reelt argument, ikke bare en teknisk detalje.
Det andet argument er ressourceforbrug. Den officielle Bitwarden-server er bygget til skala og trækker tilsvarende på CPU og hukommelse. Vaultwarden er skrevet i Rust og implementerer den samme API langt lettere. Docker Hub-beskrivelsen anbefaler netop Vaultwarden til situationer, hvor den officielle servers tunge fodaftryk ikke passer. I praksis kører Vaultwarden fint på en virtuel maskine med 1 vCPU og 512 MB RAM, og en Raspberry Pi er rigeligt til en husstand.
Sikkerhedsmæssigt arver du Bitwardens zero-knowledge-model. Serveren ser kun krypterede blobs. Dit hovedkodeord udleder via Argon2id den nøgle, der låser hvælvingen op, og den nøgle forlader aldrig din enhed. Selv hvis nogen stjæler hele din database, står de tilbage med ubrugelig ciffertekst, så længe dit hovedkodeord er stærkt. Det er forskellen mellem en kompromitteret server og en kompromitteret konto. Læs mere om princippet bag i vores gennemgang af kodeordssikkerhed.
Ansvaret følger dog med. Du står selv for opdateringer, backups og hærdning. En forsømt server er en farligere server. Et konkret eksempel: CVE-2026-26012 lod et almindeligt organisationsmedlem hente alle organisationens ciphers uanset rettigheder på samlinger. Fejlen blev rettet i Vaultwarden 1.35.3. Pointen er, at selvhosting kræver disciplin med patching, og denne guide bygger den disciplin ind fra start.
Vaultwarden vs. Bitwarden: forskelle og kompatibilitet
Vaultwarden beskriver sig selv som en uofficiel, Bitwarden-kompatibel server skrevet i Rust. Det betyder, at du bruger de samme officielle klienter, men kører din egen backend. Mange funktioner, der koster penge i Bitwardens cloud, er gratis i Vaultwarden, fordi der ikke er nogen abonnementsmodel at beskytte. Til gengæld er Vaultwarden et fællesskabsprojekt uden kommerciel support og uden formel sikkerhedscertificering.
| Funktion | Vaultwarden (selvhostet) | Bitwarden cloud |
|---|---|---|
| Pris | Gratis (kun hosting) | Gratis basis, betalt premium |
| Sprog/runtime | Rust, ét binært image | .NET, flere tjenester |
| RAM-behov | Fra ~256-512 MB | Flere GB anbefalet |
| TOTP og 2FA | Inkluderet | Premium for TOTP |
| Vedhæftede filer | Inkluderet | Premium |
| Organisationer/deling | Inkluderet | Betalt over fri grænse |
| Passkeys/FIDO2 | Understøttet via klient | Understøttet |
| Officiel support | Nej, fællesskab | Ja |
| Ansvar for drift | Dig selv | Bitwarden |
Kompatibiliteten er den store gevinst. Du installerer Bitwardens browserudvidelse, mobilapp, desktopprogram eller CLI og peger den blot mod din egen server-URL. Vaultwarden bundter selv en kopi af Web Vault, så du også har en webgrænseflade. Nyere funktioner følger med, efterhånden som de modnes: SSH-nøgleopbevaring blev for eksempel tilføjet, men kræver Bitwarden Desktop 2024.12.0 eller nyere og er gated bag eksperimentelle feature-flag.
Hvis du i forvejen overvejer hostede alternativer til andre tjenester, har vi sammenlignet to populære krypterede mailudbydere i Proton Mail vs Tutanota. Logikken er den samme: vej kontrol op mod bekvemmelighed.
Forudsætninger: hardware, software og versioner
Inden du går i gang, skal nogle få ting være på plads. Du har brug for en Linux-server med rod-adgang, et domænenavn, der peger på serverens IP, og åbne porte 80 og 443. Et domæne er ikke teknisk påkrævet, men det er forudsætningen for gyldigt HTTPS, og uden HTTPS nægter de fleste Bitwarden-klienter at forbinde. Tabellen herunder samler de versioner, denne guide er skrevet og testet mod.
| Komponent | Anbefalet version | Note |
|---|---|---|
| Operativsystem | Ubuntu 24.04 LTS eller Debian 12 | 22.04 LTS fungerer også |
| Docker Engine | 24.0 eller nyere | Testet med 27.x-serien |
| Docker Compose | v2 (plugin) | Brug docker compose, ikke docker-compose |
| Vaultwarden image | vaultwarden/server:1.36 eller :latest | Web Vault 2025.7.0 bundtet |
| Reverse proxy | Caddy 2 | Automatisk Let’s Encrypt |
| RAM | Min. 512 MB, 1 GB anbefalet | 1 vCPU er nok |
| Diskplads | 2 GB + plads til vedhæftninger | SSD anbefales |
| Bitwarden-klienter | Nyeste version | SSH-nøgler kræver Desktop 2024.12.0+ |
Du bør også have grundlæggende kendskab til terminalen, til at redigere tekstfiler med nano eller vim og til DNS. Hvis HTTPS-delen virker ny, så læs vores trinvise guide til et gratis SSL/TLS-certifikat med Certbot først. I denne guide lader vi dog Caddy håndtere certifikatet automatisk, så du slipper for manuelt arbejde.
Trin 1: Opdater serveren og installer Docker
Start med en ren, opdateret server. Log ind via SSH som en bruger med sudo-rettigheder, og kør systemopdateringer. Installer derefter Docker Engine fra det officielle repository. Brug ikke distributionens forældede docker.io-pakke, da den ofte halter bagefter.
# Opdater systemet
sudo apt update && sudo apt upgrade -y
# Installer Dockers officielle repository og engine
curl -fsSL https://get.docker.com | sudo sh
# Tilfoej din bruger til docker-gruppen (log ud og ind igen bagefter)
sudo usermod -aG docker $USER
# Bekraeft versioner
docker --version
docker compose version
Forventet output ligner dette og bekræfter, at både engine og Compose-plugin er på plads:
Docker version 27.5.1, build 9f9e405
Docker Compose version v2.32.4
Log ud og ind igen, så gruppemedlemskabet træder i kraft. Derefter kan du køre docker-kommandoer uden sudo. Test med docker run hello-world, der henter et lille testimage og bekræfter, at daemonen kører korrekt.
Trin 2: Opret projektmappe og docker-compose.yml
Saml hele stakken ét sted, så backup og vedligehold bliver enkelt. Opret en mappe og en docker-compose.yml, der definerer Vaultwarden-tjenesten. Vi binder en persistent /data-volume, så hvælvingerne overlever genstarter og opdateringer.
mkdir -p ~/vaultwarden && cd ~/vaultwarden
nano docker-compose.yml
Indsæt følgende. Udskift vault.ditdomaene.dk med dit eget domæne. Vi deaktiverer offentlig registrering med det samme og slår den kun midlertidigt til i Trin 6.
services:
vaultwarden:
image: vaultwarden/server:1.36
container_name: vaultwarden
restart: unless-stopped
environment:
DOMAIN: "https://vault.ditdomaene.dk"
SIGNUPS_ALLOWED: "false"
INVITATIONS_ALLOWED: "true"
WEBSOCKET_ENABLED: "true"
ADMIN_TOKEN: "${ADMIN_TOKEN}"
volumes:
- ./vw-data:/data
ports:
- "127.0.0.1:8080:80"
Bemærk, at vi binder porten til 127.0.0.1, ikke 0.0.0.0. Det betyder, at Vaultwarden kun er tilgængelig fra serveren selv, og at al udefrakommende trafik tvinges gennem reverse proxyen med HTTPS. Det er en lille detalje med stor sikkerhedsmæssig effekt.
Trin 3: Generer admin-token med Argon2
Vaultwarden har et admin-panel, hvor du styrer brugere, organisationer og indstillinger. Det panel skal beskyttes af et token. Gem aldrig tokenet i klartekst. Vaultwarden kan i stedet gemme en Argon2-hash af tokenet, så selv en lækket Compose-fil ikke afslører adgangskoden. Generer hashen med Vaultwardens indbyggede kommando.
# Generer en staerk, tilfaeldig hemmelighed
openssl rand -base64 48
# Lad Vaultwarden hashe den med Argon2id
docker run --rm -it vaultwarden/server:1.36 /vaultwarden hash
Kommandoen beder dig indtaste hemmeligheden to gange og returnerer en streng, der begynder med $argon2id$. Output ser sådan ud:
Generating an Argon2id PHC hash string...
ADMIN_TOKEN=$argon2id$v=19$m=65540,t=3,p=4$bXBhc3N3b3Jkc2FsdA$Tr3k...redacted...9Qm
Læg hele $argon2id$...-strengen i en .env-fil ved siden af din Compose-fil. Husk de enkelte apostroffer, så shellen ikke fortolker dollartegnene. Hold denne fil hemmelig og uden for backups, der deles bredt.
# ~/vaultwarden/.env
ADMIN_TOKEN='$argon2id$v=19$m=65540,t=3,p=4$bXBhc3N3b3Jkc2FsdA$Tr3k...redacted...9Qm'
Trin 4: Start Vaultwarden-containeren
Nu kan du starte tjenesten. Compose læser automatisk .env og indsætter dit admin-token. Kør stakken i baggrunden og følg loggen for at bekræfte en ren opstart.
docker compose up -d
docker compose logs -f vaultwarden
En sund opstart skriver versionsnummer og lytteadresse til loggen:
[INFO] Starting Vaultwarden 1.36.0
[INFO] Web Vault version: 2025.7.0
[INFO] Rocket has launched from http://0.0.0.0:80
Tryk Ctrl+C for at forlade logvisningen uden at stoppe containeren. Du kan teste lokalt med curl http://127.0.0.1:8080/alive, der skal svare med et tidsstempel. Endnu er tjenesten kun tilgængelig på serveren. Det laver vi om på i næste trin.
Trin 5: Opsæt reverse proxy med Caddy og HTTPS
Bitwarden-klienter kræver HTTPS. Caddy er den enkleste vej dertil, fordi den henter og fornyer Let’s Encrypt-certifikater helt automatisk. Tilføj Caddy til din Compose-stak, så proxy og server kører side om side i samme netværk.
# Tilfoej til docker-compose.yml under services:
caddy:
image: caddy:2
container_name: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- ./caddy-data:/data
- ./caddy-config:/config
Opret derefter en Caddyfile i samme mappe. Den fortæller Caddy at terminere TLS og sende trafikken videre til Vaultwarden-containeren. WebSocket-stien sikrer, at klienter får realtidsopdateringer.
vault.ditdomaene.dk {
encode gzip
reverse_proxy vaultwarden:80 {
header_up X-Real-IP {remote_host}
}
}
Fordi Caddy nu håndterer porten, kan du fjerne den offentlige portbinding fra Vaultwarden og lade tjenesterne tale sammen internt. Genstart stakken med docker compose up -d. Caddy henter et certifikat inden for få sekunder, og du kan åbne https://vault.ditdomaene.dk i browseren og se Web Vault med en gyldig hængelås. Hvis hængelåsen mangler, så tjek vores forklaring af HTTPS og TLS.
Trin 6: Opret din konto og lås registrering
Du satte SIGNUPS_ALLOWED til false i Trin 2. For at oprette din egen konto har du to muligheder. Den sikreste er at logge ind på admin-panelet på /admin med dit token og invitere dig selv via e-mail. Alternativt kan du midlertidigt tillade registrering, oprette din konto og slå den fra igen med det samme.
Vælg et stærkt, unikt hovedkodeord. Det er den eneste hemmelighed, der beskytter hele hvælvingen, og det kan ikke nulstilles uden datatab i en zero-knowledge-model. En passphrase på fire til fem tilfældige ord plus tal og tegn rammer en god balance mellem styrke og hukommelse. Skriv det ned på papir og opbevar det fysisk sikkert, indtil det sidder fast.
Når din konto er oprettet, så bekræft i admin-panelet, at SIGNUPS_ALLOWED står til false. Hvis du vil tilføje familie eller kolleger senere, så brug invitationer i stedet for åben registrering. Det forhindrer fremmede i at oprette konti på din server, hvis URL’en skulle blive kendt.
Trin 7: Konfigurer Argon2id som KDF
Nøgleudledningsfunktionen, KDF, omdanner dit hovedkodeord til den krypteringsnøgle, der låser hvælvingen op. Bitwardens nuværende standard er Argon2id, der vinder over den ældre PBKDF2 ved at kræve betydelig hukommelse og dermed gøre brute force på specialhardware dyrt. KDF-indstillingerne ligger i selve hvælvingens metadata, ikke i Vaultwarden, så du sætter dem i klienten under kontoindstillinger.
| Parameter | Bitwardens standard | Hærdet valg |
|---|---|---|
| Algoritme | Argon2id | Argon2id |
| Hukommelse (m) | 64 MiB | 128-256 MiB |
| Iterationer (t) | 3 | 4-5 |
| Parallelisme (p) | 4 | 4 |
Højere hukommelse og flere iterationer gør hvælvingen mere modstandsdygtig, men også langsommere at låse op på svage enheder. Test gerne en hærdet indstilling på din ældste telefon, før du fastlåser den. De officielle standardværdier er fornuftige for de fleste, og du kan altid hæve dem senere. Detaljerne er dokumenteret i Bitwardens KDF-dokumentation, og selve algoritmen er beskrevet på Argon2-siden på Wikipedia. Hvis du vil dykke ned i, hvorfor hashing er fundamentet under det hele, har vi en grundig artikel om onlinesikkerhed.
Trin 8: Installer Bitwarden-klienterne
Nu kobler du dine enheder på. Vaultwarden bruger de officielle Bitwarden-klienter, så du installerer dem fra de normale kilder og peger dem mod din egen server. Det gør du via det lille tandhjul på loginskærmen, hvor du angiver din server-URL inden indtastning af e-mail og hovedkodeord.
- Browserudvidelse: Hentes til Chrome, Firefox, Edge og Safari fra de officielle webshops.
- Mobilapp: Findes til iOS og Android. Sæt server-URL under indstillinger, før du logger ind.
- Desktop: Til Windows, macOS og Linux. Kræves til SSH-nøgleopbevaring i version 2024.12.0 eller nyere.
- CLI: Til scripting og automatisering. Konfigureres via miljøvariabler.
For kommandolinjen sætter du serveren og logger ind. CLI’en er stærk til eksport, backup og integration i scripts. Her er det grundlæggende flow:
# Peg CLI mod din egen server
bw config server https://vault.ditdomaene.dk
# Log ind og laas hvaelvingen op
bw login [email protected]
export BW_SESSION=$(bw unlock --raw)
# Verificer adgang
bw list items | head
I browserudvidelsen finder du tandhjulet på loginskærmen og indtaster server-URL’en under “Selvhostet”. Derefter logger du ind som normalt. Når den første enhed synkroniserer, ser du Web Vault og klienten vise det samme indhold. Tilføj resten af dine enheder på samme måde.
Trin 9: Aktiver to-faktor og passkeys
Et stærkt hovedkodeord er fundamentet, men to-faktor er sikkerhedsnettet. Vaultwarden understøtter TOTP gratis, hvor de fleste cloud-udbydere tager betaling for det. Aktivér det under sikkerhedsindstillinger i en klient, og scan QR-koden med en autenticator-app. Gem genoprettelseskoden et sikkert sted, adskilt fra din enhed.
Passkeys og FIDO2 er det næste skridt. De erstatter delte hemmeligheder med kryptografiske nøglepar bundet til din enhed eller en hardwarenøgle, og de er stærkt phishingresistente. De officielle Bitwarden-klienter understøtter passkeys både til at logge ind på selve hvælvingen og til at gemme passkeys for andre tjenester. For en bredere forståelse af, hvorfor delte hemmeligheder er på vej ud, så læs vores baggrund om kodeordssikkerhed.
Et praktisk råd: registrer mindst to faktorer, gerne en autenticator-app og en fysisk sikkerhedsnøgle. Mister du den ene, kan du stadig komme ind. En enkelt faktor uden backup er en låst dør uden reservenøgle, og i en zero-knowledge-model findes der ingen support, der kan lukke dig ind igen.
Trin 10: Automatiske krypterede backups
En selvhostet password manager uden backup er en ulykke, der venter på at ske. Hele tilstanden ligger i vw-data-mappen: SQLite-databasen, vedhæftninger, RSA-nøgler og konfiguration. Et simpelt, krypteret natligt øjebliksbillede dækker de fleste behov. Scriptet herunder pakker data og krypterer arkivet med GPG.
#!/bin/bash
# ~/vaultwarden/backup.sh
set -euo pipefail
STAMP=$(date +%Y%m%d-%H%M)
SRC=~/vaultwarden/vw-data
DEST=~/backups
mkdir -p "$DEST"
# Stop kort for konsistent SQLite-snapshot
docker compose -f ~/vaultwarden/docker-compose.yml stop vaultwarden
tar czf - -C "$SRC" . | gpg --symmetric --cipher-algo AES256 \
-o "$DEST/vw-$STAMP.tar.gz.gpg"
docker compose -f ~/vaultwarden/docker-compose.yml start vaultwarden
# Behold kun de seneste 14 backups
ls -1t "$DEST"/vw-*.tar.gz.gpg | tail -n +15 | xargs -r rm
echo "Backup faerdig: vw-$STAMP.tar.gz.gpg"
Gør scriptet eksekverbart og planlæg det med cron. En kørsel klokken 03:30 hver nat rammer typisk uden for brugstiden:
chmod +x ~/vaultwarden/backup.sh
( crontab -l 2>/dev/null; echo "30 3 * * * ~/vaultwarden/backup.sh" ) | crontab -
Test altid en gendannelse, ikke kun en backup. En backup, du aldrig har prøvet at gendanne, er kun et håb. Kopiér en arkivfil til en testserver, dekryptér med gpg -d, pak ud og start stakken. Opbevar desuden mindst én kopi uden for serveren, så et samlet hardwaresvigt ikke tager både drift og backup med sig. Se vores gennemgang af, hvordan datalæk opstår, for hvorfor offsite-kopier betaler sig.
Trin 11: Hærdning med fail2ban og firewall
En server på det åbne internet bliver scannet konstant. To enkle lag reducerer angrebsfladen markant: en firewall, der kun åbner det nødvendige, og fail2ban, der blokerer gentagne loginforsøg. Start med firewallen og luk alt undtagen SSH, HTTP og HTTPS.
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose
Vaultwarden skriver fejlslagne loginforsøg til sin log, og fail2ban kan læse den og banlyse gentagne syndere. Opret et filter og en jail, der ser efter mislykkede forsøg og blokerer IP’en midlertidigt på firewall-niveau.
# /etc/fail2ban/filter.d/vaultwarden.conf
[Definition]
failregex = ^.*Username or password is incorrect\. Try again\. IP: <ADDR>.*$
# /etc/fail2ban/jail.d/vaultwarden.local
[vaultwarden]
enabled = true
port = 80,443
filter = vaultwarden
logpath = /home/USER/vaultwarden/vw-data/vaultwarden.log
maxretry = 5
bantime = 3600
For at fail2ban kan læse forsøgene, skal Vaultwarden logge til fil. Tilføj LOG_FILE: "/data/vaultwarden.log" til miljøet i din Compose-fil og genstart. Genstart derefter fail2ban med sudo systemctl restart fail2ban og bekræft med sudo fail2ban-client status vaultwarden. Husk også at holde din container opdateret, for hærdning erstatter ikke patching. CVE-2026-26012 viste, hvor hurtigt en uopdateret server bliver et problem.
Trin 12: Test, migrering og import af kodeord
Sidste trin er at flytte ind. Hvis du kommer fra en anden password manager, kan du eksportere derfra og importere til din nye hvælving. Bitwarden-klienterne understøtter import fra de fleste store udbydere via CSV eller JSON. Importer i en klient under værktøjer, og vælg det format, der matcher din gamle eksport.
Slet eksportfilen sikkert bagefter. En CSV med alle dine kodeord i klartekst er den farligste fil på din disk. Brug shred -u eksport.csv på Linux eller tøm papirkurven sikkert på andre systemer. Verificer derefter, at alt synkroniserede korrekt på tværs af mindst to enheder.
Kør til sidst en hurtig kontrol af hele opsætningen. Tjeklisten herunder dækker det, der oftest går galt, og er værd at gennemgå, før du stoler fuldt på din nye password manager.
- HTTPS svarer med gyldigt certifikat og ingen advarsler.
- To-faktor er aktiveret, og genoprettelseskoden er gemt sikkert.
- Registrering er låst (
SIGNUPS_ALLOWED=false). - Admin-token er gemt som Argon2-hash, ikke klartekst.
- Backup-cron kører, og en gendannelse er testet.
- Firewall og fail2ban er aktive.
- Containeren er på nyeste patchede version.
Del kodeord sikkert med organisationer
En af de funktioner, der ofte koster penge i kommercielle løsninger, men er gratis i Vaultwarden, er organisationer. En organisation lader dig dele udvalgte logins med familie eller kolleger uden at give dem adgang til hele din hvælving. Du opretter en organisation i en klient, definerer samlinger og inviterer medlemmer via e-mail. Hver person beholder sit eget hovedkodeord, og deling sker via kryptografiske nøgler, så serveren stadig kun ser krypterede data.
Rettighedsstyringen er finmasket. Du kan give et medlem skrivelig adgang til en samling, men kun læseadgang til en anden, og du kan skjule kodeord, så et medlem kan autofylde et login uden at se selve kodeordet. Det passer godt til et team, hvor en praktikant skal bruge en tjeneste, men ikke kende den underliggende adgangskode. Husk dog, at autofyld og skjulte kodeord er bekvemmelighed, ikke en hård sikkerhedsgrænse, for den, der kan bruge et login, kan ofte også udlede det.
Netop her var CVE-2026-26012 relevant. Sårbarheden lod et almindeligt organisationsmedlem hente alle organisationens ciphers uanset rettigheder på samlinger, og den blev rettet i Vaultwarden 1.35.3. Lektien er klar: organisationsfunktioner øger angrebsfladen, og en uopdateret server kan lække data på tværs af det adgangshierarki, du troede var sikkert. Kører du organisationer med flere brugere, er hurtig patching ikke valgfrit. Sæt en fast rytme for opdateringer, og abonner på sikkerhedsmeddelelser fra projektet.
For mindre husstande er et enkelt alternativ til fuld organisationsstyring at oprette en delt samling med få betroede medlemmer og holde antallet lavt. Jo færre personer og samlinger, jo lettere er det at gennemskue, hvem der har adgang til hvad. Gennemgå medlemslisten med jævne mellemrum, og fjern adgang for personer, der ikke længere har brug for den. Adgang, der aldrig bliver trukket tilbage, er en af de mest oversete kilder til datalæk.
Sådan migrerer du fra en cloud-tjeneste uden datatab
Mange kommer til Vaultwarden fra en betalt cloud-tjeneste eller en browsers indbyggede kodeordsfunktion. Migreringen er ligetil, men rækkefølgen betyder noget, hvis du vil undgå at miste data eller efterlade kopier i klartekst. Planlæg et roligt tidspunkt, hvor du ikke skal bruge dine logins under selve flytningen, og hav både den gamle og den nye løsning åben samtidig.
Eksportér fra den gamle løsning
Stort set alle password managers tilbyder eksport til CSV eller JSON. Find funktionen under indstillinger eller værktøjer, og vælg et format, Bitwarden-klienten kan læse. JSON bevarer typisk flere felter end CSV, herunder noter og brugerdefinerede felter. Eksportér til en mappe, du fuldt ud kontrollerer, og aldrig til en delt eller synkroniseret mappe, hvor filen kunne blive kopieret videre.
Importér til Vaultwarden
Åbn en Bitwarden-klient eller Web Vault, gå til import under værktøjer, og vælg den udbyder eller det format, din eksport stammer fra. Importér filen, og gennemgå derefter resultatet manuelt. Tjek især, at TOTP-koder, noter og vedhæftninger fulgte med, da disse felter oftest falder fra ved CSV-import. Ret eventuelle dubletter, så din nye hvælving starter ryddelig.
# Slet eksportfilen sikkert efter vellykket import
shred -u ~/eksport.json # Linux
# macOS: flyt til papirkurv og toem den sikkert
# Windows: brug et vaerktoej som SDelete
Det vigtigste skridt kommer til sidst: slet eksportfilen sikkert. En CSV eller JSON med alle dine logins i klartekst er en gave til enhver, der får adgang til din disk eller en backup af den. Brug shred på Linux, et sikkert sletteværktøj på Windows, eller tøm papirkurven grundigt på macOS. Tøm også eventuelle skybaserede papirkurve, hvis filen lå i en synkroniseret mappe. Først når kopien i klartekst er væk, er migreringen reelt færdig.
Overvej til sidst at skifte de vigtigste kodeord ud, mens du alligevel er i gang. Et kodeord, der har ligget i en cloud-tjeneste eller en browser i årevis, kan have været eksponeret i et databrud, du ikke kender til. Brug Bitwardens indbyggede generator til at oprette lange, unikke kodeord til dine kritiske konti som e-mail, bank og din egen server. Det forvandler migreringen fra en ren flytning til en reel sikkerhedsopgradering.
Komplet projekt: hele stakken samlet
Her er den færdige docker-compose.yml med både Vaultwarden og Caddy, klar til drift. Kombineret med .env, Caddyfile og backup.sh fra de foregående trin har du en komplet, hærdet og sikkerhedskopieret selvhostet password manager.
services:
vaultwarden:
image: vaultwarden/server:1.36
container_name: vaultwarden
restart: unless-stopped
environment:
DOMAIN: "https://vault.ditdomaene.dk"
SIGNUPS_ALLOWED: "false"
INVITATIONS_ALLOWED: "true"
WEBSOCKET_ENABLED: "true"
LOG_FILE: "/data/vaultwarden.log"
ADMIN_TOKEN: "${ADMIN_TOKEN}"
volumes:
- ./vw-data:/data
caddy:
image: caddy:2
container_name: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- ./caddy-data:/data
- ./caddy-config:/config
Start eller opdater hele stakken med to kommandoer. Den første henter den nyeste image-version, den anden genstarter tjenesterne med det nye image. Kør dem som et fast vedligeholdelsesritual, gerne hver måned.
cd ~/vaultwarden
docker compose pull
docker compose up -d
docker image prune -f
Almindelige faldgruber
De fleste problemer med Vaultwarden skyldes en håndfuld gentagne fejl. Kender du dem på forhånd, sparer du timers fejlsøgning. Her er de mest almindelige faldgruber og hvordan du undgår dem.
- Manglende HTTPS: Klienter nægter at forbinde over ren HTTP. Sørg for, at
DOMAINbegynder medhttps://, og at Caddy har hentet et certifikat, før du fejlsøger andet. - Forkert DNS: Caddy kan ikke hente et certifikat, hvis domænet ikke peger på serverens IP. Bekræft med
dig vault.ditdomaene.dk, før du starter. - Glemt at låse registrering: Hvis
SIGNUPS_ALLOWEDbliver stående påtrue, kan fremmede oprette konti. Lås den, så snart din egen konto findes. - Admin-token i klartekst: Et token i klartekst i Compose-filen er en åben dør. Brug altid Argon2-hashen fra Trin 3.
- Ingen backup-test: En backup, du aldrig har gendannet, tæller ikke. Test gendannelse mindst én gang.
- Mistet hovedkodeord: Der findes ingen nulstilling i en zero-knowledge-model. Mister du hovedkodeordet uden backup-faktor, er hvælvingen tabt.
Den dyreste fejl er den sidste. Et hovedkodeord uden en sikker, fysisk backup og uden en ekstra to-faktor er en enkelt fejlpunkt for hele din digitale identitet. Brug to minutter på at sikre det rigtigt, før du flytter alle dine logins ind.
Fejlfinding: de hyppigste problemer
Når noget ikke virker, så start ved loggen. docker compose logs vaultwarden og docker compose logs caddy afslører de fleste fejl. Tabellen samler de symptomer, brugere oftest støder på, og den hurtigste løsning.
| Symptom | Sandsynlig årsag | Løsning |
|---|---|---|
| Klient kan ikke forbinde | Manglende eller ugyldigt HTTPS | Tjek Caddy-log og certifikat, bekræft DOMAIN |
| Certifikat hentes ikke | DNS eller port 80 blokeret | Verificer DNS og firewall-regler |
| Admin-panel afviser token | Forkert citering i .env | Brug enkelte apostroffer om hele hashen |
| WebSocket virker ikke | Proxy videresender ikke korrekt | Sæt WEBSOCKET_ENABLED=true og genstart |
| Login-fejl efter import | Forkert KDF eller hovedkodeord | Bekræft KDF-indstillinger og kodeord |
| Container starter ikke | Optaget port eller defekt volume | Tjek docker compose logs og portbinding |
| fail2ban fanger intet | Vaultwarden logger ikke til fil | Sæt LOG_FILE og ret logpath |
| Langsom oplåsning på mobil | For høje Argon2-parametre | Sænk hukommelse eller iterationer |
| Data væk efter opdatering | Volume ikke persistent | Bekræft ./vw-data:/data-binding |
Hvis intet af dette hjælper, så søg i Vaultwardens wiki og issues på GitHub. Projektet er aktivt vedligeholdt, og de fleste fejl er beskrevet før. Inkluder altid relevante loglinjer, når du beder om hjælp, men fjern domæne, IP og tokens, før du deler dem offentligt.
Avancerede tips til drift i produktion
Når basisopsætningen kører, kan du løfte den til produktionsniveau. Disse tips øger sikkerhed, oppetid og overblik uden at gøre stakken kompleks.
Skift til PostgreSQL ved flere brugere
SQLite er fremragende til en husstand eller et lille team. Vokser du til mange aktive brugere og organisationer, giver PostgreSQL bedre samtidighed og mere robuste backups. Vaultwarden understøtter det via DATABASE_URL. Migrér i en stille periode, og tag en fuld backup først, så du kan rulle tilbage.
Overvågning og notifikationer
En tjeneste, du ikke overvåger, opdager du først er nede, når du selv skal bruge den. Sæt en simpel uptime-check op mod /alive-endepunktet og få besked ved nedetid. Kombineret med fail2ban-statistik og diskpladsalarmer ved du, hvornår noget kræver opmærksomhed, før det bliver kritisk.
Hold dig opdateret på sikkerhed
Abonner på udgivelser i Vaultwardens GitHub-repository, så du ser sikkerhedsrettelser med det samme. Nyere udgivelser bruger uforanderlige releases og release-attestering, hvilket gør det lettere at verificere, at det image, du henter, ikke er manipuleret. Anvend opdateringer hurtigt, især dem mærket som sikkerhedsrettelser, og overvej en separat, isoleret instans, hvis du eksperimenterer med eksperimentelle feature-flag.
Ofte stillede spørgsmål
Er Vaultwarden sikkert nok til at stole på?
Ja, med korrekt drift. Vaultwarden arver Bitwardens zero-knowledge-kryptering, så serveren kun ser krypterede data. Risikoen ligger ikke i selve modellen, men i opsætningen: manglende HTTPS, forsømt patching eller svage hovedkodeord. Følger du denne guide med Argon2id, to-faktor og regelmæssige opdateringer, er din selvhostede password manager robust.
Hvad er forskellen på Vaultwarden og bitwarden_rs?
De er det samme projekt. bitwarden_rs blev omdøbt til Vaultwarden for at undgå forveksling med det officielle Bitwarden og for at signalere, at det er et uafhængigt fællesskabsprojekt. Kører du stadig et gammelt bitwarden_rs-image, bør du migrere til vaultwarden/server for at få sikkerhedsrettelser.
Kan jeg bruge de officielle Bitwarden-apps?
Ja. Vaultwarden implementerer Bitwardens API, så alle officielle klienter til browser, mobil, desktop og CLI fungerer. Du angiver blot din egen server-URL ved login. Det er netop den kompatibilitet, der gør Vaultwarden så attraktivt: du får selvhosting uden at give afkald på de polerede apps.
Hvor mange ressourcer kræver det?
Meget få. Vaultwarden er skrevet i Rust og kører fint på 1 vCPU og 512 MB RAM, og en Raspberry Pi rækker til en husstand. Det er hovedargumentet over for den officielle server, der er bygget til skala og kræver flere gigabyte hukommelse for at køre komfortabelt.
Hvad sker der, hvis jeg glemmer mit hovedkodeord?
I en zero-knowledge-model findes der ingen nulstilling. Glemmer du hovedkodeordet, kan ingen, heller ikke dig selv, dekryptere hvælvingen. Derfor er en fysisk, sikker kopi af hovedkodeordet og mindst én ekstra to-faktor afgørende. Det er prisen for, at end ikke serveren kan læse dine data.
Understøtter Vaultwarden passkeys?
Ja, gennem de officielle klienter. Du kan både logge ind på hvælvingen med en passkey og gemme passkeys for andre tjenester i din hvælving. Passkeys er phishingresistente, fordi de bygger på kryptografiske nøglepar i stedet for delte hemmeligheder, og de er en naturlig opgradering oven på dit hovedkodeord.
Skal jeg eksponere serveren på det åbne internet?
Kun hvis du har brug for adgang udefra. Vil du synkronisere mobil og bærbar overalt, skal serveren være tilgængelig, og så er HTTPS, firewall og fail2ban obligatorisk. Holder du dig til hjemmenetværket, kan du nøjes med en VPN ind til serveren. Vi har en guide til at opsætte din egen WireGuard VPN-server, som passer perfekt til netop det.
Relateret læsning
- Kodeordssikkerhed: længde, hashing, kodeordsmanagere og 2FA
- Onlinesikkerhed: beskyt dine data, konti og forbindelser
- WireGuard VPN på 12 trin: egen server på 20 min
- Gratis SSL/TLS-certifikat: 12 trin med Certbot
- Proton Mail vs Tutanota: 9,99 vs 8 €/md
- Datalæk: sådan opstår de, og sådan beskytter du dig
Eksterne kilder: Vaultwarden på GitHub, Vaultwarden-wikien, det officielle Docker-image, Docker Compose-dokumentationen og Bitwardens KDF-dokumentation.




