{"id":88,"date":"2026-06-14T20:38:43","date_gmt":"2026-06-14T20:38:43","guid":{"rendered":"https:\/\/shattered.io\/dk\/2026\/06\/14\/selvhostet-password-manager-vaultwarden\/"},"modified":"2026-06-15T12:25:47","modified_gmt":"2026-06-15T12:25:47","slug":"selvhostet-password-manager-vaultwarden","status":"publish","type":"post","link":"https:\/\/shattered.io\/dk\/selvhostet-password-manager-vaultwarden\/","title":{"rendered":"Selvhostet password manager: Vaultwarden i 12 trin [2026]"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">En <strong>password manager<\/strong> er det enkelt vigtigste v\u00e6rkt\u00f8j, du kan tage i brug for at sikre dine konti. Men hvor ender dine krypterede hv\u00e6lvinger egentlig? Hos en kommerciel udbyder ligger de p\u00e5 en sky, du ikke kontrollerer. Med en selvhostet l\u00f8sning ligger de p\u00e5 din egen server, bag din egen kryptering og dine egne regler. Denne guide viser dig, hvordan du ops\u00e6tter <strong>Vaultwarden<\/strong>, den lette Rust-baserede server, der taler Bitwardens API, i 12 konkrete trin p\u00e5 cirka 45 minutter.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Du f\u00e5r en komplet, k\u00f8rende stak: Docker-container, HTTPS via reverse proxy, Argon2id-n\u00f8gleudledning, to-faktor, automatiske krypterede backups og h\u00e6rdning 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\u00e5 din <strong>password manager<\/strong> k\u00f8rer stabilt i drift.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"hvorfor-self-hoste-din-password-manager-i-2026\">Hvorfor self-hoste din password manager i 2026?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Selvhosting handler om kontrol. N\u00e5r 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\u00e5r du opdaterer. For privatpersoner, sm\u00e5 teams og virksomheder med GDPR-krav er den datasuver\u00e6nitet et reelt argument, ikke bare en teknisk detalje.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Det andet argument er ressourceforbrug. Den officielle Bitwarden-server er bygget til skala og tr\u00e6kker tilsvarende p\u00e5 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\u00f8rer Vaultwarden fint p\u00e5 en virtuel maskine med 1 vCPU og 512 MB RAM, og en Raspberry Pi er rigeligt til en husstand.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sikkerhedsm\u00e6ssigt arver du Bitwardens zero-knowledge-model. Serveren ser kun krypterede blobs. Dit hovedkodeord udleder via Argon2id den n\u00f8gle, der l\u00e5ser hv\u00e6lvingen op, og den n\u00f8gle forlader aldrig din enhed. Selv hvis nogen stj\u00e6ler hele din database, st\u00e5r de tilbage med ubrugelig ciffertekst, s\u00e5 l\u00e6nge dit hovedkodeord er st\u00e6rkt. Det er forskellen mellem en kompromitteret server og en kompromitteret konto. L\u00e6s mere om princippet bag i vores gennemgang af <a href=\"https:\/\/shattered.io\/dk\/2026\/06\/10\/kodeordssikkerhed\/\">kodeordssikkerhed<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ansvaret f\u00f8lger dog med. Du st\u00e5r selv for opdateringer, backups og h\u00e6rdning. En fors\u00f8mt server er en farligere server. Et konkret eksempel: CVE-2026-26012 lod et almindeligt organisationsmedlem hente alle organisationens ciphers uanset rettigheder p\u00e5 samlinger. Fejlen blev rettet i Vaultwarden 1.35.3. Pointen er, at selvhosting kr\u00e6ver disciplin med patching, og denne guide bygger den disciplin ind fra start.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"vaultwarden-vs-bitwarden-forskelle-og-kompatibilitet\">Vaultwarden vs. Bitwarden: forskelle og kompatibilitet<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Vaultwarden beskriver sig selv som en uofficiel, Bitwarden-kompatibel server skrevet i Rust. Det betyder, at du bruger de samme officielle klienter, men k\u00f8rer 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\u00e6ld er Vaultwarden et f\u00e6llesskabsprojekt uden kommerciel support og uden formel sikkerhedscertificering.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Funktion<\/th><th>Vaultwarden (selvhostet)<\/th><th>Bitwarden cloud<\/th><\/tr><\/thead><tbody><tr><td>Pris<\/td><td>Gratis (kun hosting)<\/td><td>Gratis basis, betalt premium<\/td><\/tr><tr><td>Sprog\/runtime<\/td><td>Rust, \u00e9t bin\u00e6rt image<\/td><td>.NET, flere tjenester<\/td><\/tr><tr><td>RAM-behov<\/td><td>Fra ~256-512 MB<\/td><td>Flere GB anbefalet<\/td><\/tr><tr><td>TOTP og 2FA<\/td><td>Inkluderet<\/td><td>Premium for TOTP<\/td><\/tr><tr><td>Vedh\u00e6ftede filer<\/td><td>Inkluderet<\/td><td>Premium<\/td><\/tr><tr><td>Organisationer\/deling<\/td><td>Inkluderet<\/td><td>Betalt over fri gr\u00e6nse<\/td><\/tr><tr><td>Passkeys\/FIDO2<\/td><td>Underst\u00f8ttet via klient<\/td><td>Underst\u00f8ttet<\/td><\/tr><tr><td>Officiel support<\/td><td>Nej, f\u00e6llesskab<\/td><td>Ja<\/td><\/tr><tr><td>Ansvar for drift<\/td><td>Dig selv<\/td><td>Bitwarden<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">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\u00e5 du ogs\u00e5 har en webgr\u00e6nseflade. Nyere funktioner f\u00f8lger med, efterh\u00e5nden som de modnes: SSH-n\u00f8gleopbevaring blev for eksempel tilf\u00f8jet, men kr\u00e6ver Bitwarden Desktop 2024.12.0 eller nyere og er gated bag eksperimentelle feature-flag.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hvis du i forvejen overvejer hostede alternativer til andre tjenester, har vi sammenlignet to popul\u00e6re krypterede mailudbydere i <a href=\"https:\/\/shattered.io\/dk\/2026\/06\/12\/proton-mail-vs-tutanota\/\">Proton Mail vs Tutanota<\/a>. Logikken er den samme: vej kontrol op mod bekvemmelighed.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"forudsaetninger-hardware-software-og-versioner\">Foruds\u00e6tninger: hardware, software og versioner<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Inden du g\u00e5r i gang, skal nogle f\u00e5 ting v\u00e6re p\u00e5 plads. Du har brug for en Linux-server med rod-adgang, et dom\u00e6nenavn, der peger p\u00e5 serverens IP, og \u00e5bne porte 80 og 443. Et dom\u00e6ne er ikke teknisk p\u00e5kr\u00e6vet, men det er foruds\u00e6tningen for gyldigt HTTPS, og uden HTTPS n\u00e6gter de fleste Bitwarden-klienter at forbinde. Tabellen herunder samler de versioner, denne guide er skrevet og testet mod.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Komponent<\/th><th>Anbefalet version<\/th><th>Note<\/th><\/tr><\/thead><tbody><tr><td>Operativsystem<\/td><td>Ubuntu 24.04 LTS eller Debian 12<\/td><td>22.04 LTS fungerer ogs\u00e5<\/td><\/tr><tr><td>Docker Engine<\/td><td>24.0 eller nyere<\/td><td>Testet med 27.x-serien<\/td><\/tr><tr><td>Docker Compose<\/td><td>v2 (plugin)<\/td><td>Brug <code>docker compose<\/code>, ikke <code>docker-compose<\/code><\/td><\/tr><tr><td>Vaultwarden image<\/td><td>vaultwarden\/server:1.36 eller :latest<\/td><td>Web Vault 2025.7.0 bundtet<\/td><\/tr><tr><td>Reverse proxy<\/td><td>Caddy 2<\/td><td>Automatisk Let&#8217;s Encrypt<\/td><\/tr><tr><td>RAM<\/td><td>Min. 512 MB, 1 GB anbefalet<\/td><td>1 vCPU er nok<\/td><\/tr><tr><td>Diskplads<\/td><td>2 GB + plads til vedh\u00e6ftninger<\/td><td>SSD anbefales<\/td><\/tr><tr><td>Bitwarden-klienter<\/td><td>Nyeste version<\/td><td>SSH-n\u00f8gler kr\u00e6ver Desktop 2024.12.0+<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Du b\u00f8r ogs\u00e5 have grundl\u00e6ggende kendskab til terminalen, til at redigere tekstfiler med <code>nano<\/code> eller <code>vim<\/code> og til DNS. Hvis HTTPS-delen virker ny, s\u00e5 l\u00e6s vores trinvise guide til et <a href=\"https:\/\/shattered.io\/dk\/2026\/06\/11\/ssl-tls-certifikat-certbot-2026\/\">gratis SSL\/TLS-certifikat med Certbot<\/a> f\u00f8rst. I denne guide lader vi dog Caddy h\u00e5ndtere certifikatet automatisk, s\u00e5 du slipper for manuelt arbejde.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-1-opdater-serveren-og-installer-docker\">Trin 1: Opdater serveren og installer Docker<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Start med en ren, opdateret server. Log ind via SSH som en bruger med sudo-rettigheder, og k\u00f8r systemopdateringer. Installer derefter Docker Engine fra det officielle repository. Brug ikke distributionens for\u00e6ldede <code>docker.io<\/code>-pakke, da den ofte halter bagefter.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Opdater systemet\nsudo apt update &amp;&amp; sudo apt upgrade -y\n\n# Installer Dockers officielle repository og engine\ncurl -fsSL https:\/\/get.docker.com | sudo sh\n\n# Tilfoej din bruger til docker-gruppen (log ud og ind igen bagefter)\nsudo usermod -aG docker $USER\n\n# Bekraeft versioner\ndocker --version\ndocker compose version<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Forventet output ligner dette og bekr\u00e6fter, at b\u00e5de engine og Compose-plugin er p\u00e5 plads:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Docker version 27.5.1, build 9f9e405\nDocker Compose version v2.32.4<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Log ud og ind igen, s\u00e5 gruppemedlemskabet tr\u00e6der i kraft. Derefter kan du k\u00f8re <code>docker<\/code>-kommandoer uden <code>sudo<\/code>. Test med <code>docker run hello-world<\/code>, der henter et lille testimage og bekr\u00e6fter, at daemonen k\u00f8rer korrekt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-2-opret-projektmappe-og-docker-compose-yml\">Trin 2: Opret projektmappe og docker-compose.yml<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Saml hele stakken \u00e9t sted, s\u00e5 backup og vedligehold bliver enkelt. Opret en mappe og en <code>docker-compose.yml<\/code>, der definerer Vaultwarden-tjenesten. Vi binder en persistent <code>\/data<\/code>-volume, s\u00e5 hv\u00e6lvingerne overlever genstarter og opdateringer.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir -p ~\/vaultwarden &amp;&amp; cd ~\/vaultwarden\nnano docker-compose.yml<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Inds\u00e6t f\u00f8lgende. Udskift <code>vault.ditdomaene.dk<\/code> med dit eget dom\u00e6ne. Vi deaktiverer offentlig registrering med det samme og sl\u00e5r den kun midlertidigt til i Trin 6.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>services:\n  vaultwarden:\n    image: vaultwarden\/server:1.36\n    container_name: vaultwarden\n    restart: unless-stopped\n    environment:\n      DOMAIN: \"https:\/\/vault.ditdomaene.dk\"\n      SIGNUPS_ALLOWED: \"false\"\n      INVITATIONS_ALLOWED: \"true\"\n      WEBSOCKET_ENABLED: \"true\"\n      ADMIN_TOKEN: \"${ADMIN_TOKEN}\"\n    volumes:\n      - .\/vw-data:\/data\n    ports:\n      - \"127.0.0.1:8080:80\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Bem\u00e6rk, at vi binder porten til <code>127.0.0.1<\/code>, ikke <code>0.0.0.0<\/code>. Det betyder, at Vaultwarden kun er tilg\u00e6ngelig fra serveren selv, og at al udefrakommende trafik tvinges gennem reverse proxyen med HTTPS. Det er en lille detalje med stor sikkerhedsm\u00e6ssig effekt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-3-generer-admin-token-med-argon2\">Trin 3: Generer admin-token med Argon2<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">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\u00e5 selv en l\u00e6kket Compose-fil ikke afsl\u00f8rer adgangskoden. Generer hashen med Vaultwardens indbyggede kommando.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Generer en staerk, tilfaeldig hemmelighed\nopenssl rand -base64 48\n\n# Lad Vaultwarden hashe den med Argon2id\ndocker run --rm -it vaultwarden\/server:1.36 \/vaultwarden hash<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Kommandoen beder dig indtaste hemmeligheden to gange og returnerer en streng, der begynder med <code>$argon2id$<\/code>. Output ser s\u00e5dan ud:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Generating an Argon2id PHC hash string...\nADMIN_TOKEN=$argon2id$v=19$m=65540,t=3,p=4$bXBhc3N3b3Jkc2FsdA$Tr3k...redacted...9Qm<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">L\u00e6g hele <code>$argon2id$...<\/code>-strengen i en <code>.env<\/code>-fil ved siden af din Compose-fil. Husk de enkelte apostroffer, s\u00e5 shellen ikke fortolker dollartegnene. Hold denne fil hemmelig og uden for backups, der deles bredt.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ~\/vaultwarden\/.env\nADMIN_TOKEN='$argon2id$v=19$m=65540,t=3,p=4$bXBhc3N3b3Jkc2FsdA$Tr3k...redacted...9Qm'<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-4-start-vaultwarden-containeren\">Trin 4: Start Vaultwarden-containeren<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nu kan du starte tjenesten. Compose l\u00e6ser automatisk <code>.env<\/code> og inds\u00e6tter dit admin-token. K\u00f8r stakken i baggrunden og f\u00f8lg loggen for at bekr\u00e6fte en ren opstart.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker compose up -d\ndocker compose logs -f vaultwarden<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">En sund opstart skriver versionsnummer og lytteadresse til loggen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[INFO] Starting Vaultwarden 1.36.0\n[INFO] Web Vault version: 2025.7.0\n[INFO] Rocket has launched from http:\/\/0.0.0.0:80<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Tryk Ctrl+C for at forlade logvisningen uden at stoppe containeren. Du kan teste lokalt med <code>curl http:\/\/127.0.0.1:8080\/alive<\/code>, der skal svare med et tidsstempel. Endnu er tjenesten kun tilg\u00e6ngelig p\u00e5 serveren. Det laver vi om p\u00e5 i n\u00e6ste trin.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-5-opsaet-reverse-proxy-med-caddy-og-https\">Trin 5: Ops\u00e6t reverse proxy med Caddy og HTTPS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Bitwarden-klienter kr\u00e6ver HTTPS. Caddy er den enkleste vej dertil, fordi den henter og fornyer Let&#8217;s Encrypt-certifikater helt automatisk. Tilf\u00f8j Caddy til din Compose-stak, s\u00e5 proxy og server k\u00f8rer side om side i samme netv\u00e6rk.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Tilfoej til docker-compose.yml under services:\n  caddy:\n    image: caddy:2\n    container_name: caddy\n    restart: unless-stopped\n    ports:\n      - \"80:80\"\n      - \"443:443\"\n    volumes:\n      - .\/Caddyfile:\/etc\/caddy\/Caddyfile:ro\n      - .\/caddy-data:\/data\n      - .\/caddy-config:\/config<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Opret derefter en <code>Caddyfile<\/code> i samme mappe. Den fort\u00e6ller Caddy at terminere TLS og sende trafikken videre til Vaultwarden-containeren. WebSocket-stien sikrer, at klienter f\u00e5r realtidsopdateringer.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>vault.ditdomaene.dk {\n    encode gzip\n    reverse_proxy vaultwarden:80 {\n        header_up X-Real-IP {remote_host}\n    }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Fordi Caddy nu h\u00e5ndterer porten, kan du fjerne den offentlige portbinding fra Vaultwarden og lade tjenesterne tale sammen internt. Genstart stakken med <code>docker compose up -d<\/code>. Caddy henter et certifikat inden for f\u00e5 sekunder, og du kan \u00e5bne <code>https:\/\/vault.ditdomaene.dk<\/code> i browseren og se Web Vault med en gyldig h\u00e6ngel\u00e5s. Hvis h\u00e6ngel\u00e5sen mangler, s\u00e5 tjek vores forklaring af <a href=\"https:\/\/shattered.io\/dk\/2026\/06\/10\/https-og-tls\/\">HTTPS og TLS<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-6-opret-din-konto-og-laas-registrering\">Trin 6: Opret din konto og l\u00e5s registrering<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Du satte <code>SIGNUPS_ALLOWED<\/code> til <code>false<\/code> i Trin 2. For at oprette din egen konto har du to muligheder. Den sikreste er at logge ind p\u00e5 admin-panelet p\u00e5 <code>\/admin<\/code> med dit token og invitere dig selv via e-mail. Alternativt kan du midlertidigt tillade registrering, oprette din konto og sl\u00e5 den fra igen med det samme.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">V\u00e6lg et st\u00e6rkt, unikt hovedkodeord. Det er den eneste hemmelighed, der beskytter hele hv\u00e6lvingen, og det kan ikke nulstilles uden datatab i en zero-knowledge-model. En passphrase p\u00e5 fire til fem tilf\u00e6ldige ord plus tal og tegn rammer en god balance mellem styrke og hukommelse. Skriv det ned p\u00e5 papir og opbevar det fysisk sikkert, indtil det sidder fast.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e5r din konto er oprettet, s\u00e5 bekr\u00e6ft i admin-panelet, at <code>SIGNUPS_ALLOWED<\/code> st\u00e5r til <code>false<\/code>. Hvis du vil tilf\u00f8je familie eller kolleger senere, s\u00e5 brug invitationer i stedet for \u00e5ben registrering. Det forhindrer fremmede i at oprette konti p\u00e5 din server, hvis URL&#8217;en skulle blive kendt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-7-konfigurer-argon2id-som-kdf\">Trin 7: Konfigurer Argon2id som KDF<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00f8gleudledningsfunktionen, KDF, omdanner dit hovedkodeord til den krypteringsn\u00f8gle, der l\u00e5ser hv\u00e6lvingen op. Bitwardens nuv\u00e6rende standard er Argon2id, der vinder over den \u00e6ldre PBKDF2 ved at kr\u00e6ve betydelig hukommelse og dermed g\u00f8re brute force p\u00e5 specialhardware dyrt. KDF-indstillingerne ligger i selve hv\u00e6lvingens metadata, ikke i Vaultwarden, s\u00e5 du s\u00e6tter dem i klienten under kontoindstillinger.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Parameter<\/th><th>Bitwardens standard<\/th><th>H\u00e6rdet valg<\/th><\/tr><\/thead><tbody><tr><td>Algoritme<\/td><td>Argon2id<\/td><td>Argon2id<\/td><\/tr><tr><td>Hukommelse (m)<\/td><td>64 MiB<\/td><td>128-256 MiB<\/td><\/tr><tr><td>Iterationer (t)<\/td><td>3<\/td><td>4-5<\/td><\/tr><tr><td>Parallelisme (p)<\/td><td>4<\/td><td>4<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">H\u00f8jere hukommelse og flere iterationer g\u00f8r hv\u00e6lvingen mere modstandsdygtig, men ogs\u00e5 langsommere at l\u00e5se op p\u00e5 svage enheder. Test gerne en h\u00e6rdet indstilling p\u00e5 din \u00e6ldste telefon, f\u00f8r du fastl\u00e5ser den. De officielle standardv\u00e6rdier er fornuftige for de fleste, og du kan altid h\u00e6ve dem senere. Detaljerne er dokumenteret i <a href=\"https:\/\/bitwarden.com\/help\/kdf-algorithms\/\" target=\"_blank\" rel=\"noopener\">Bitwardens KDF-dokumentation<\/a>, og selve algoritmen er beskrevet p\u00e5 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Argon2\" target=\"_blank\" rel=\"noopener\">Argon2-siden p\u00e5 Wikipedia<\/a>. Hvis du vil dykke ned i, hvorfor hashing er fundamentet under det hele, har vi en grundig artikel om <a href=\"https:\/\/shattered.io\/dk\/2026\/06\/10\/security-hub\/\">onlinesikkerhed<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-8-installer-bitwarden-klienterne\">Trin 8: Installer Bitwarden-klienterne<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nu kobler du dine enheder p\u00e5. Vaultwarden bruger de officielle Bitwarden-klienter, s\u00e5 du installerer dem fra de normale kilder og peger dem mod din egen server. Det g\u00f8r du via det lille tandhjul p\u00e5 loginsk\u00e6rmen, hvor du angiver din server-URL inden indtastning af e-mail og hovedkodeord.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Browserudvidelse<\/strong>: Hentes til Chrome, Firefox, Edge og Safari fra de officielle webshops.<\/li><li><strong>Mobilapp<\/strong>: Findes til iOS og Android. S\u00e6t server-URL under indstillinger, f\u00f8r du logger ind.<\/li><li><strong>Desktop<\/strong>: Til Windows, macOS og Linux. Kr\u00e6ves til SSH-n\u00f8gleopbevaring i version 2024.12.0 eller nyere.<\/li><li><strong>CLI<\/strong>: Til scripting og automatisering. Konfigureres via milj\u00f8variabler.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">For kommandolinjen s\u00e6tter du serveren og logger ind. CLI&#8217;en er st\u00e6rk til eksport, backup og integration i scripts. Her er det grundl\u00e6ggende flow:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Peg CLI mod din egen server\nbw config server https:\/\/vault.ditdomaene.dk\n\n# Log ind og laas hvaelvingen op\nbw login din@email.dk\nexport BW_SESSION=$(bw unlock --raw)\n\n# Verificer adgang\nbw list items | head<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">I browserudvidelsen finder du tandhjulet p\u00e5 loginsk\u00e6rmen og indtaster server-URL&#8217;en under &#8220;Selvhostet&#8221;. Derefter logger du ind som normalt. N\u00e5r den f\u00f8rste enhed synkroniserer, ser du Web Vault og klienten vise det samme indhold. Tilf\u00f8j resten af dine enheder p\u00e5 samme m\u00e5de.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-9-aktiver-to-faktor-og-passkeys\">Trin 9: Aktiver to-faktor og passkeys<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Et st\u00e6rkt hovedkodeord er fundamentet, men to-faktor er sikkerhedsnettet. Vaultwarden underst\u00f8tter TOTP gratis, hvor de fleste cloud-udbydere tager betaling for det. Aktiv\u00e9r det under sikkerhedsindstillinger i en klient, og scan QR-koden med en autenticator-app. Gem genoprettelseskoden et sikkert sted, adskilt fra din enhed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Passkeys og FIDO2 er det n\u00e6ste skridt. De erstatter delte hemmeligheder med kryptografiske n\u00f8glepar bundet til din enhed eller en hardwaren\u00f8gle, og de er st\u00e6rkt phishingresistente. De officielle Bitwarden-klienter underst\u00f8tter passkeys b\u00e5de til at logge ind p\u00e5 selve hv\u00e6lvingen og til at gemme passkeys for andre tjenester. For en bredere forst\u00e5else af, hvorfor delte hemmeligheder er p\u00e5 vej ud, s\u00e5 l\u00e6s vores baggrund om <a href=\"https:\/\/shattered.io\/dk\/2026\/06\/10\/kodeordssikkerhed\/\">kodeordssikkerhed<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Et praktisk r\u00e5d: registrer mindst to faktorer, gerne en autenticator-app og en fysisk sikkerhedsn\u00f8gle. Mister du den ene, kan du stadig komme ind. En enkelt faktor uden backup er en l\u00e5st d\u00f8r uden reserven\u00f8gle, og i en zero-knowledge-model findes der ingen support, der kan lukke dig ind igen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-10-automatiske-krypterede-backups\">Trin 10: Automatiske krypterede backups<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En selvhostet password manager uden backup er en ulykke, der venter p\u00e5 at ske. Hele tilstanden ligger i <code>vw-data<\/code>-mappen: SQLite-databasen, vedh\u00e6ftninger, RSA-n\u00f8gler og konfiguration. Et simpelt, krypteret natligt \u00f8jebliksbillede d\u00e6kker de fleste behov. Scriptet herunder pakker data og krypterer arkivet med GPG.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\n# ~\/vaultwarden\/backup.sh\nset -euo pipefail\nSTAMP=$(date +%Y%m%d-%H%M)\nSRC=~\/vaultwarden\/vw-data\nDEST=~\/backups\nmkdir -p \"$DEST\"\n\n# Stop kort for konsistent SQLite-snapshot\ndocker compose -f ~\/vaultwarden\/docker-compose.yml stop vaultwarden\ntar czf - -C \"$SRC\" . | gpg --symmetric --cipher-algo AES256 \\\n  -o \"$DEST\/vw-$STAMP.tar.gz.gpg\"\ndocker compose -f ~\/vaultwarden\/docker-compose.yml start vaultwarden\n\n# Behold kun de seneste 14 backups\nls -1t \"$DEST\"\/vw-*.tar.gz.gpg | tail -n +15 | xargs -r rm\necho \"Backup faerdig: vw-$STAMP.tar.gz.gpg\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">G\u00f8r scriptet eksekverbart og planl\u00e6g det med cron. En k\u00f8rsel klokken 03:30 hver nat rammer typisk uden for brugstiden:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>chmod +x ~\/vaultwarden\/backup.sh\n( crontab -l 2>\/dev\/null; echo \"30 3 * * * ~\/vaultwarden\/backup.sh\" ) | crontab -<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Test altid en gendannelse, ikke kun en backup. En backup, du aldrig har pr\u00f8vet at gendanne, er kun et h\u00e5b. Kopi\u00e9r en arkivfil til en testserver, dekrypt\u00e9r med <code>gpg -d<\/code>, pak ud og start stakken. Opbevar desuden mindst \u00e9n kopi uden for serveren, s\u00e5 et samlet hardwaresvigt ikke tager b\u00e5de drift og backup med sig. Se vores gennemgang af, hvordan <a href=\"https:\/\/shattered.io\/dk\/2026\/06\/10\/datalaek\/\">datal\u00e6k opst\u00e5r<\/a>, for hvorfor offsite-kopier betaler sig.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-11-haerdning-med-fail2ban-og-firewall\">Trin 11: H\u00e6rdning med fail2ban og firewall<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En server p\u00e5 det \u00e5bne internet bliver scannet konstant. To enkle lag reducerer angrebsfladen markant: en firewall, der kun \u00e5bner det n\u00f8dvendige, og fail2ban, der blokerer gentagne loginfors\u00f8g. Start med firewallen og luk alt undtagen SSH, HTTP og HTTPS.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo ufw default deny incoming\nsudo ufw default allow outgoing\nsudo ufw allow OpenSSH\nsudo ufw allow 80\/tcp\nsudo ufw allow 443\/tcp\nsudo ufw enable\nsudo ufw status verbose<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Vaultwarden skriver fejlslagne loginfors\u00f8g til sin log, og fail2ban kan l\u00e6se den og banlyse gentagne syndere. Opret et filter og en jail, der ser efter mislykkede fors\u00f8g og blokerer IP&#8217;en midlertidigt p\u00e5 firewall-niveau.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \/etc\/fail2ban\/filter.d\/vaultwarden.conf\n[Definition]\nfailregex = ^.*Username or password is incorrect\\. Try again\\. IP: &lt;ADDR&gt;.*$\n\n# \/etc\/fail2ban\/jail.d\/vaultwarden.local\n[vaultwarden]\nenabled = true\nport = 80,443\nfilter = vaultwarden\nlogpath = \/home\/USER\/vaultwarden\/vw-data\/vaultwarden.log\nmaxretry = 5\nbantime = 3600<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For at fail2ban kan l\u00e6se fors\u00f8gene, skal Vaultwarden logge til fil. Tilf\u00f8j <code>LOG_FILE: \"\/data\/vaultwarden.log\"<\/code> til milj\u00f8et i din Compose-fil og genstart. Genstart derefter fail2ban med <code>sudo systemctl restart fail2ban<\/code> og bekr\u00e6ft med <code>sudo fail2ban-client status vaultwarden<\/code>. Husk ogs\u00e5 at holde din container opdateret, for h\u00e6rdning erstatter ikke patching. CVE-2026-26012 viste, hvor hurtigt en uopdateret server bliver et problem.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-12-test-migrering-og-import-af-kodeord\">Trin 12: Test, migrering og import af kodeord<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Sidste trin er at flytte ind. Hvis du kommer fra en anden password manager, kan du eksportere derfra og importere til din nye hv\u00e6lving. Bitwarden-klienterne underst\u00f8tter import fra de fleste store udbydere via CSV eller JSON. Importer i en klient under v\u00e6rkt\u00f8jer, og v\u00e6lg det format, der matcher din gamle eksport.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Slet eksportfilen sikkert bagefter. En CSV med alle dine kodeord i klartekst er den farligste fil p\u00e5 din disk. Brug <code>shred -u eksport.csv<\/code> p\u00e5 Linux eller t\u00f8m papirkurven sikkert p\u00e5 andre systemer. Verificer derefter, at alt synkroniserede korrekt p\u00e5 tv\u00e6rs af mindst to enheder.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">K\u00f8r til sidst en hurtig kontrol af hele ops\u00e6tningen. Tjeklisten herunder d\u00e6kker det, der oftest g\u00e5r galt, og er v\u00e6rd at gennemg\u00e5, f\u00f8r du stoler fuldt p\u00e5 din nye <strong>password manager<\/strong>.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>HTTPS svarer med gyldigt certifikat og ingen advarsler.<\/li><li>To-faktor er aktiveret, og genoprettelseskoden er gemt sikkert.<\/li><li>Registrering er l\u00e5st (<code>SIGNUPS_ALLOWED=false<\/code>).<\/li><li>Admin-token er gemt som Argon2-hash, ikke klartekst.<\/li><li>Backup-cron k\u00f8rer, og en gendannelse er testet.<\/li><li>Firewall og fail2ban er aktive.<\/li><li>Containeren er p\u00e5 nyeste patchede version.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"del-kodeord-sikkert-med-organisationer\">Del kodeord sikkert med organisationer<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En af de funktioner, der ofte koster penge i kommercielle l\u00f8sninger, 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\u00e6lving. 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\u00f8gler, s\u00e5 serveren stadig kun ser krypterede data.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Rettighedsstyringen er finmasket. Du kan give et medlem skrivelig adgang til en samling, men kun l\u00e6seadgang til en anden, og du kan skjule kodeord, s\u00e5 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\u00e5rd sikkerhedsgr\u00e6nse, for den, der kan bruge et login, kan ofte ogs\u00e5 udlede det.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Netop her var CVE-2026-26012 relevant. S\u00e5rbarheden lod et almindeligt organisationsmedlem hente alle organisationens ciphers uanset rettigheder p\u00e5 samlinger, og den blev rettet i Vaultwarden 1.35.3. Lektien er klar: organisationsfunktioner \u00f8ger angrebsfladen, og en uopdateret server kan l\u00e6kke data p\u00e5 tv\u00e6rs af det adgangshierarki, du troede var sikkert. K\u00f8rer du organisationer med flere brugere, er hurtig patching ikke valgfrit. S\u00e6t en fast rytme for opdateringer, og abonner p\u00e5 sikkerhedsmeddelelser fra projektet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For mindre husstande er et enkelt alternativ til fuld organisationsstyring at oprette en delt samling med f\u00e5 betroede medlemmer og holde antallet lavt. Jo f\u00e6rre personer og samlinger, jo lettere er det at gennemskue, hvem der har adgang til hvad. Gennemg\u00e5 medlemslisten med j\u00e6vne mellemrum, og fjern adgang for personer, der ikke l\u00e6ngere har brug for den. Adgang, der aldrig bliver trukket tilbage, er en af de mest oversete kilder til <a href=\"https:\/\/shattered.io\/dk\/2026\/06\/10\/datalaek\/\">datal\u00e6k<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"saadan-migrerer-du-fra-en-cloud-tjeneste-uden-datatab\">S\u00e5dan migrerer du fra en cloud-tjeneste uden datatab<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Mange kommer til Vaultwarden fra en betalt cloud-tjeneste eller en browsers indbyggede kodeordsfunktion. Migreringen er ligetil, men r\u00e6kkef\u00f8lgen betyder noget, hvis du vil undg\u00e5 at miste data eller efterlade kopier i klartekst. Planl\u00e6g et roligt tidspunkt, hvor du ikke skal bruge dine logins under selve flytningen, og hav b\u00e5de den gamle og den nye l\u00f8sning \u00e5ben samtidig.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"eksporter-fra-den-gamle-loesning\">Eksport\u00e9r fra den gamle l\u00f8sning<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Stort set alle password managers tilbyder eksport til CSV eller JSON. Find funktionen under indstillinger eller v\u00e6rkt\u00f8jer, og v\u00e6lg et format, Bitwarden-klienten kan l\u00e6se. JSON bevarer typisk flere felter end CSV, herunder noter og brugerdefinerede felter. Eksport\u00e9r til en mappe, du fuldt ud kontrollerer, og aldrig til en delt eller synkroniseret mappe, hvor filen kunne blive kopieret videre.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"importer-til-vaultwarden\">Import\u00e9r til Vaultwarden<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c5bn en Bitwarden-klient eller Web Vault, g\u00e5 til import under v\u00e6rkt\u00f8jer, og v\u00e6lg den udbyder eller det format, din eksport stammer fra. Import\u00e9r filen, og gennemg\u00e5 derefter resultatet manuelt. Tjek is\u00e6r, at TOTP-koder, noter og vedh\u00e6ftninger fulgte med, da disse felter oftest falder fra ved CSV-import. Ret eventuelle dubletter, s\u00e5 din nye hv\u00e6lving starter ryddelig.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Slet eksportfilen sikkert efter vellykket import\nshred -u ~\/eksport.json   # Linux\n# macOS: flyt til papirkurv og toem den sikkert\n# Windows: brug et vaerktoej som SDelete<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">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\u00e5r adgang til din disk eller en backup af den. Brug <code>shred<\/code> p\u00e5 Linux, et sikkert slettev\u00e6rkt\u00f8j p\u00e5 Windows, eller t\u00f8m papirkurven grundigt p\u00e5 macOS. T\u00f8m ogs\u00e5 eventuelle skybaserede papirkurve, hvis filen l\u00e5 i en synkroniseret mappe. F\u00f8rst n\u00e5r kopien i klartekst er v\u00e6k, er migreringen reelt f\u00e6rdig.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">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 \u00e5revis, kan have v\u00e6ret 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.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"komplet-projekt-hele-stakken-samlet\">Komplet projekt: hele stakken samlet<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Her er den f\u00e6rdige <code>docker-compose.yml<\/code> med b\u00e5de Vaultwarden og Caddy, klar til drift. Kombineret med <code>.env<\/code>, <code>Caddyfile<\/code> og <code>backup.sh<\/code> fra de foreg\u00e5ende trin har du en komplet, h\u00e6rdet og sikkerhedskopieret selvhostet password manager.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>services:\n  vaultwarden:\n    image: vaultwarden\/server:1.36\n    container_name: vaultwarden\n    restart: unless-stopped\n    environment:\n      DOMAIN: \"https:\/\/vault.ditdomaene.dk\"\n      SIGNUPS_ALLOWED: \"false\"\n      INVITATIONS_ALLOWED: \"true\"\n      WEBSOCKET_ENABLED: \"true\"\n      LOG_FILE: \"\/data\/vaultwarden.log\"\n      ADMIN_TOKEN: \"${ADMIN_TOKEN}\"\n    volumes:\n      - .\/vw-data:\/data\n\n  caddy:\n    image: caddy:2\n    container_name: caddy\n    restart: unless-stopped\n    ports:\n      - \"80:80\"\n      - \"443:443\"\n    volumes:\n      - .\/Caddyfile:\/etc\/caddy\/Caddyfile:ro\n      - .\/caddy-data:\/data\n      - .\/caddy-config:\/config<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Start eller opdater hele stakken med to kommandoer. Den f\u00f8rste henter den nyeste image-version, den anden genstarter tjenesterne med det nye image. K\u00f8r dem som et fast vedligeholdelsesritual, gerne hver m\u00e5ned.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd ~\/vaultwarden\ndocker compose pull\ndocker compose up -d\ndocker image prune -f<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"almindelige-faldgruber\">Almindelige faldgruber<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">De fleste problemer med Vaultwarden skyldes en h\u00e5ndfuld gentagne fejl. Kender du dem p\u00e5 forh\u00e5nd, sparer du timers fejls\u00f8gning. Her er de mest almindelige faldgruber og hvordan du undg\u00e5r dem.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Manglende HTTPS<\/strong>: Klienter n\u00e6gter at forbinde over ren HTTP. S\u00f8rg for, at <code>DOMAIN<\/code> begynder med <code>https:\/\/<\/code>, og at Caddy har hentet et certifikat, f\u00f8r du fejls\u00f8ger andet.<\/li><li><strong>Forkert DNS<\/strong>: Caddy kan ikke hente et certifikat, hvis dom\u00e6net ikke peger p\u00e5 serverens IP. Bekr\u00e6ft med <code>dig vault.ditdomaene.dk<\/code>, f\u00f8r du starter.<\/li><li><strong>Glemt at l\u00e5se registrering<\/strong>: Hvis <code>SIGNUPS_ALLOWED<\/code> bliver st\u00e5ende p\u00e5 <code>true<\/code>, kan fremmede oprette konti. L\u00e5s den, s\u00e5 snart din egen konto findes.<\/li><li><strong>Admin-token i klartekst<\/strong>: Et token i klartekst i Compose-filen er en \u00e5ben d\u00f8r. Brug altid Argon2-hashen fra Trin 3.<\/li><li><strong>Ingen backup-test<\/strong>: En backup, du aldrig har gendannet, t\u00e6ller ikke. Test gendannelse mindst \u00e9n gang.<\/li><li><strong>Mistet hovedkodeord<\/strong>: Der findes ingen nulstilling i en zero-knowledge-model. Mister du hovedkodeordet uden backup-faktor, er hv\u00e6lvingen tabt.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">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\u00e5 at sikre det rigtigt, f\u00f8r du flytter alle dine logins ind.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"fejlfinding-de-hyppigste-problemer\">Fejlfinding: de hyppigste problemer<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e5r noget ikke virker, s\u00e5 start ved loggen. <code>docker compose logs vaultwarden<\/code> og <code>docker compose logs caddy<\/code> afsl\u00f8rer de fleste fejl. Tabellen samler de symptomer, brugere oftest st\u00f8der p\u00e5, og den hurtigste l\u00f8sning.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Symptom<\/th><th>Sandsynlig \u00e5rsag<\/th><th>L\u00f8sning<\/th><\/tr><\/thead><tbody><tr><td>Klient kan ikke forbinde<\/td><td>Manglende eller ugyldigt HTTPS<\/td><td>Tjek Caddy-log og certifikat, bekr\u00e6ft <code>DOMAIN<\/code><\/td><\/tr><tr><td>Certifikat hentes ikke<\/td><td>DNS eller port 80 blokeret<\/td><td>Verificer DNS og firewall-regler<\/td><\/tr><tr><td>Admin-panel afviser token<\/td><td>Forkert citering i .env<\/td><td>Brug enkelte apostroffer om hele hashen<\/td><\/tr><tr><td>WebSocket virker ikke<\/td><td>Proxy videresender ikke korrekt<\/td><td>S\u00e6t <code>WEBSOCKET_ENABLED=true<\/code> og genstart<\/td><\/tr><tr><td>Login-fejl efter import<\/td><td>Forkert KDF eller hovedkodeord<\/td><td>Bekr\u00e6ft KDF-indstillinger og kodeord<\/td><\/tr><tr><td>Container starter ikke<\/td><td>Optaget port eller defekt volume<\/td><td>Tjek <code>docker compose logs<\/code> og portbinding<\/td><\/tr><tr><td>fail2ban fanger intet<\/td><td>Vaultwarden logger ikke til fil<\/td><td>S\u00e6t <code>LOG_FILE<\/code> og ret logpath<\/td><\/tr><tr><td>Langsom opl\u00e5sning p\u00e5 mobil<\/td><td>For h\u00f8je Argon2-parametre<\/td><td>S\u00e6nk hukommelse eller iterationer<\/td><\/tr><tr><td>Data v\u00e6k efter opdatering<\/td><td>Volume ikke persistent<\/td><td>Bekr\u00e6ft <code>.\/vw-data:\/data<\/code>-binding<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Hvis intet af dette hj\u00e6lper, s\u00e5 s\u00f8g i Vaultwardens wiki og issues p\u00e5 GitHub. Projektet er aktivt vedligeholdt, og de fleste fejl er beskrevet f\u00f8r. Inkluder altid relevante loglinjer, n\u00e5r du beder om hj\u00e6lp, men fjern dom\u00e6ne, IP og tokens, f\u00f8r du deler dem offentligt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"avancerede-tips-til-drift-i-produktion\">Avancerede tips til drift i produktion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e5r basisops\u00e6tningen k\u00f8rer, kan du l\u00f8fte den til produktionsniveau. Disse tips \u00f8ger sikkerhed, oppetid og overblik uden at g\u00f8re stakken kompleks.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"skift-til-postgresql-ved-flere-brugere\">Skift til PostgreSQL ved flere brugere<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">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\u00f8tter det via <code>DATABASE_URL<\/code>. Migr\u00e9r i en stille periode, og tag en fuld backup f\u00f8rst, s\u00e5 du kan rulle tilbage.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"overvaagning-og-notifikationer\">Overv\u00e5gning og notifikationer<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">En tjeneste, du ikke overv\u00e5ger, opdager du f\u00f8rst er nede, n\u00e5r du selv skal bruge den. S\u00e6t en simpel uptime-check op mod <code>\/alive<\/code>-endepunktet og f\u00e5 besked ved nedetid. Kombineret med fail2ban-statistik og diskpladsalarmer ved du, hvorn\u00e5r noget kr\u00e6ver opm\u00e6rksomhed, f\u00f8r det bliver kritisk.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"hold-dig-opdateret-paa-sikkerhed\">Hold dig opdateret p\u00e5 sikkerhed<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Abonner p\u00e5 udgivelser i Vaultwardens GitHub-repository, s\u00e5 du ser sikkerhedsrettelser med det samme. Nyere udgivelser bruger uforanderlige releases og release-attestering, hvilket g\u00f8r det lettere at verificere, at det image, du henter, ikke er manipuleret. Anvend opdateringer hurtigt, is\u00e6r dem m\u00e6rket som sikkerhedsrettelser, og overvej en separat, isoleret instans, hvis du eksperimenterer med eksperimentelle feature-flag.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"ofte-stillede-spoergsmaal\">Ofte stillede sp\u00f8rgsm\u00e5l<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"er-vaultwarden-sikkert-nok-til-at-stole-paa\">Er Vaultwarden sikkert nok til at stole p\u00e5?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ja, med korrekt drift. Vaultwarden arver Bitwardens zero-knowledge-kryptering, s\u00e5 serveren kun ser krypterede data. Risikoen ligger ikke i selve modellen, men i ops\u00e6tningen: manglende HTTPS, fors\u00f8mt patching eller svage hovedkodeord. F\u00f8lger du denne guide med Argon2id, to-faktor og regelm\u00e6ssige opdateringer, er din selvhostede <strong>password manager<\/strong> robust.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"hvad-er-forskellen-paa-vaultwarden-og-bitwarden_rs\">Hvad er forskellen p\u00e5 Vaultwarden og bitwarden_rs?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">De er det samme projekt. bitwarden_rs blev omd\u00f8bt til Vaultwarden for at undg\u00e5 forveksling med det officielle Bitwarden og for at signalere, at det er et uafh\u00e6ngigt f\u00e6llesskabsprojekt. K\u00f8rer du stadig et gammelt <code>bitwarden_rs<\/code>-image, b\u00f8r du migrere til <code>vaultwarden\/server<\/code> for at f\u00e5 sikkerhedsrettelser.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"kan-jeg-bruge-de-officielle-bitwarden-apps\">Kan jeg bruge de officielle Bitwarden-apps?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ja. Vaultwarden implementerer Bitwardens API, s\u00e5 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\u00f8r Vaultwarden s\u00e5 attraktivt: du f\u00e5r selvhosting uden at give afkald p\u00e5 de polerede apps.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"hvor-mange-ressourcer-kraever-det\">Hvor mange ressourcer kr\u00e6ver det?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Meget f\u00e5. Vaultwarden er skrevet i Rust og k\u00f8rer fint p\u00e5 1 vCPU og 512 MB RAM, og en Raspberry Pi r\u00e6kker til en husstand. Det er hovedargumentet over for den officielle server, der er bygget til skala og kr\u00e6ver flere gigabyte hukommelse for at k\u00f8re komfortabelt.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"hvad-sker-der-hvis-jeg-glemmer-mit-hovedkodeord\">Hvad sker der, hvis jeg glemmer mit hovedkodeord?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">I en zero-knowledge-model findes der ingen nulstilling. Glemmer du hovedkodeordet, kan ingen, heller ikke dig selv, dekryptere hv\u00e6lvingen. Derfor er en fysisk, sikker kopi af hovedkodeordet og mindst \u00e9n ekstra to-faktor afg\u00f8rende. Det er prisen for, at end ikke serveren kan l\u00e6se dine data.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"understoetter-vaultwarden-passkeys\">Underst\u00f8tter Vaultwarden passkeys?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ja, gennem de officielle klienter. Du kan b\u00e5de logge ind p\u00e5 hv\u00e6lvingen med en passkey og gemme passkeys for andre tjenester i din hv\u00e6lving. Passkeys er phishingresistente, fordi de bygger p\u00e5 kryptografiske n\u00f8glepar i stedet for delte hemmeligheder, og de er en naturlig opgradering oven p\u00e5 dit hovedkodeord.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"skal-jeg-eksponere-serveren-paa-det-aabne-internet\">Skal jeg eksponere serveren p\u00e5 det \u00e5bne internet?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Kun hvis du har brug for adgang udefra. Vil du synkronisere mobil og b\u00e6rbar overalt, skal serveren v\u00e6re tilg\u00e6ngelig, og s\u00e5 er HTTPS, firewall og fail2ban obligatorisk. Holder du dig til hjemmenetv\u00e6rket, kan du n\u00f8jes med en VPN ind til serveren. Vi har en guide til at ops\u00e6tte din egen <a href=\"https:\/\/shattered.io\/dk\/2026\/06\/11\/wireguard-vpn-server-2026\/\">WireGuard VPN-server<\/a>, som passer perfekt til netop det.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"relateret-laesning\">Relateret l\u00e6sning<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/shattered.io\/dk\/2026\/06\/10\/kodeordssikkerhed\/\">Kodeordssikkerhed: l\u00e6ngde, hashing, kodeordsmanagere og 2FA<\/a><\/li><li><a href=\"https:\/\/shattered.io\/dk\/2026\/06\/10\/security-hub\/\">Onlinesikkerhed: beskyt dine data, konti og forbindelser<\/a><\/li><li><a href=\"https:\/\/shattered.io\/dk\/2026\/06\/11\/wireguard-vpn-server-2026\/\">WireGuard VPN p\u00e5 12 trin: egen server p\u00e5 20 min<\/a><\/li><li><a href=\"https:\/\/shattered.io\/dk\/2026\/06\/11\/ssl-tls-certifikat-certbot-2026\/\">Gratis SSL\/TLS-certifikat: 12 trin med Certbot<\/a><\/li><li><a href=\"https:\/\/shattered.io\/dk\/2026\/06\/12\/proton-mail-vs-tutanota\/\">Proton Mail vs Tutanota: 9,99 vs 8 \u20ac\/md<\/a><\/li><li><a href=\"https:\/\/shattered.io\/dk\/2026\/06\/10\/datalaek\/\">Datal\u00e6k: s\u00e5dan opst\u00e5r de, og s\u00e5dan beskytter du dig<\/a><\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Eksterne kilder: <a href=\"https:\/\/github.com\/dani-garcia\/vaultwarden\" target=\"_blank\" rel=\"noopener\">Vaultwarden p\u00e5 GitHub<\/a>, <a href=\"https:\/\/github.com\/dani-garcia\/vaultwarden\/wiki\" target=\"_blank\" rel=\"noopener\">Vaultwarden-wikien<\/a>, <a href=\"https:\/\/hub.docker.com\/r\/vaultwarden\/server\" target=\"_blank\" rel=\"noopener\">det officielle Docker-image<\/a>, <a href=\"https:\/\/docs.docker.com\/compose\/\" target=\"_blank\" rel=\"noopener\">Docker Compose-dokumentationen<\/a> og <a href=\"https:\/\/bitwarden.com\/help\/kdf-algorithms\/\" target=\"_blank\" rel=\"noopener\">Bitwardens KDF-dokumentation<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En password manager er det enkelt vigtigste v\u00e6rkt\u00f8j, du kan tage i brug for at sikre dine konti. Men hvor ender dine krypterede hv\u00e6lvinger egentlig? Hos en kommerciel udbyder ligger\u2026<\/p>\n","protected":false},"author":3,"featured_media":89,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-88","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-privacy"],"_links":{"self":[{"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/posts\/88","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/comments?post=88"}],"version-history":[{"count":1,"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/posts\/88\/revisions"}],"predecessor-version":[{"id":90,"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/posts\/88\/revisions\/90"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/media\/89"}],"wp:attachment":[{"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/media?parent=88"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/categories?post=88"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/tags?post=88"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}