Začínam s password manager vaultwarden

V začiatkoch internetu sme nevyužívali tak často služby, ktoré vyžadovali autentizáciu prístupu. Možno sme používali jeden mail, nejaké diskusné fórum a ešte nejakú inú webovú službu, kde bola registrácia povinná. Po registrácii sme si museli pre budúci prístup zapamätať okrem názvu služby aj prihlasovacie meno a heslo. Vo webových prehliadačoch nebolo možné uložiť heslo, resp. automaticky doplniť meno, preto sme si vymýšľali jednoduché mená a hesla.

Obsah

Problematika okolo hesiel

Často krát sme jednoduché (3 písmenové) heslá používali pre každý nový účet. V dnešnej dobe existujú nástroje, ktoré dokážu 6-8 miestne heslo prelomiť hrubou silou do niekoľkých hodín v závislosti od výpočtového výkonu procesora. Samozrejme mám na mysli heslo, ktoré sa skladá len s malých písmen. Dnes sme registrovaný na stovkách webov, ktoré z bezpečnostného hľadiska vyžadujú min. 8 znakov a okrem alfa-numerických znakov to chce po nás použiť ďalší znak (napr. >*/+@&\|€), čiže heslo môže vyzerať napr. takto:

M7#d)2J%mCgGgKNjj!^ek#LH

Takéto heslo si bežný človek nedokáže zapamätať a preto si ho musí niekde uschovať. Možností ako si heslo uschovať je mnoho, preto spomeniem len niektoré

  • Prihlasovacie údaje napísane na papieri a schované
  • Prihlasovacie údaje uložené na PC v txt súbore
  • Prihlasovacie údaje uložené v tab. editore a zašifrované
  • Prihlasovacie údaje uložené v pass manažéri prehliadača
  • Prihlasovacie údaje uložené na externom cloude

Všetky tieto možnosti sú dobré, ale každá možnosť prináša aj riziko. Ak si napr. heslá napíšeme na papier, tak papier môže niekto nájsť, alebo sa papier stratí. Podobne to platí pre uloženie hesiel do texťáku. Buď sa v našom PC k nemu niekto dostane, alebo ho omylom vymažeme atď. Celkom dobrá možnosť je ak si heslá uložíme napr. do tabuľkového editora a súbor zaheslujeme. Problém môže vzniknúť ak zabudneme hlavné heslo, potom sa k uloženým heslám už nedostaneme. Ďalej sa môže poškodiť súbor, príp. úložisko kde ich máme uložené. V takomto prípade je dobré mať kópie aspoň na dvoch miestách (USB, cloud a pod). Posledné 2 možnosti v zozname sú super a s najväčšou pravdepodobnosťou sa k ním dostaneme odkiaľkoľvek, avšak musíme vedieť hlavné heslo.

Ja som to v minulosti riešil tak, že najdôležitejšie hesla (mailov) som mal uložené v libre calc súbore a súbor som mal zašifrovaný silným 16 miestnym heslom. Heslo pre tento súbor bolo veľmi silne a názov súboru bolo to heslo, čiže som si ho nemusel pamätať (je tam síce háčik). Ak by tento súbor našla tretia osoba, ktorá trochu uvažuje, tak by si povedala, že takýto nezmyselný názov súboru môže byť aj heslo. Toto heslo by však nefungovalo, pretože len ja poznám sekvenciu, ktoré znaky je potrebné z hesla odstrániť, alebo doplniť. Problém by mohol nastať aj vtedy ak by bol súbor vymazaný, alebo ak by bol zmenený názov. Aj na to však existuje liek. Súbor sa dá skryť, príp. zmenou atribútov sa dá zakázať úprava, zmena atď. Ako som už uviedol, tak v súbore som mal asi 5 mailových adries aj so silnými 16 znakovými heslami.

Takmer každá služba na internete do ktorej sa prihlasujeme je naviazaná na email. To znamená, že ak by som zabudol heslo do nejakej služby, tak si môžeme nechať zaslať reset hesla a vytvorím si do služby nové heslo. Okrem toho som používal aj password manažér v prehliadači (Google Chrome). Tento password manažér je výborný, vie synchronizáciu, takže heslá môžem zdieľať na rôznych zariadeniach. Problém vidím len v tom, že Google Chrome je tretia strana a okrem mňa pozná hesla ešte niekto iný. Okrem toho (nesúvisí to s googlom) som nedávno čítal, že známa služba na ukladanie hesiel lastpass bola hacknutá a hackeri sa zmocnili dôležitých dát zákazníkov tejto služby.

Bitwarden vs Vaultwarden

Nejaký čas som uvažoval, čím by som nahradil google password manager. Možno by nebolo zle použiť doplnok keepassxc pre Nextcloud Hub, ale ten mám otvorený do internetu a to sa mi nepáčilo. Potom som si prečítal niekoľko rewievs, čo sa nosí v manažovaní hesiel pre rok 2023 a nakoniec som sa rozhodol pre bitwarden, resp. vaultwarden. V manažovaní hesiel som úplný nováčik, ale po prečítaní rôznych blogov a článkov som zistil, že vaultwarden bude najvhodnejší kandidát na inštaláciu.

Vaultwarden je neoficiálna implementácia servera Bitwarden napísaná v jazyku Rust. Je kompatibilný s oficiálnymi klientmi Bitwarden a je ideálny pre nasadenia self-hosting, kde je spustenie oficiálnej služby s vysokými zdrojmi nežiaduce. Vaultwarden je zameraný na jednotlivcov, rodiny a menšie organizácie. Vývoj funkcií, ktoré sú užitočné hlavne pre väčšie organizácie (napr. jednotné prihlásenie, synchronizácia adresára atď.), nie je prioritou, hoci by boli vítané kvalitné PR, ktoré takéto funkcie implementujú.

Vaultwarden bol predtým známi ako Bitwarden_RS, ale neskôr (apríl 2021) vznikol názov Vaultwarden, aby sa predišlo zbytočným komplikáciam s ochrannými známkami oficiálnej značky bitwarden. Zoznam podporovaných a chýbajúcich funkcií oproti bitwardenu si môžete pozrieť v tomto krátkom prehľade.

Za ďalšie sa mi nepáčilo, že bitwarden beží nad technológiou Microsoft .NET a používa databázu MS SQL. Z tohoto dôvodu inštalácia vytvorí množstvo kontejnerov a značne zaťaží RAM pamäť. Odporúčané HW požiadavky na nasadenie bitwarden sú 2GHz dual core a 4GB RAM.

Bezpečný prístup

Najväčšou výhodou vaultwardenu je, že funguje aj ako self-hosting a žiadaná tretia strana nemá nad ním kontrolu. Oficiálne aplikácie (či už sa jedná o webové, desktopové, alebo mobilné) sa domnievajú, že komunikujú s oficiálnym serveroom bitwarden.

Moje riešenie nasadenia servera vaultwarden je následovné:

Na verejnom free DNS servery (freenom) mám založenú verejnú doménu. Následne som v lokálnej sieti vytvoril k tejto doméne subdoménu, ktorá je určená pre web rozhranie vaultwarden. Táto subdoména nie je dostupná z verejného internetu. To by mohlo predstavovať problém, pretože ak by som bol mimo svoju lokálnu sieť, tak by som nemal prístup do password managera. Ak sa teda nachádzam mimo svoju lokálnu sieť, tak z vonka sa viem do lokálnej siete dostať pomocou WG tunela.

V konečnom dôsledku na to nepotrebujeme verejnú doménu. Stačilo by mať prístup z WAN do lokálnej siete (cez nejakú vlastnú VPN) a do password manažéra pristupovať cez IP adresu. Toto je už na každom ako si to spraví, ale viac sa mi to páči keď to beží cez https na dôveryhodnom certifikáte od let’s encrypt.

Budeme inštalovať docker

Implementácia vaultwarden servera počíta s nasadením dockera (možnosť je však aj použitie binárky, alebo kompilácia so zdroja), takže pred inštaláciou budeme inštalovať docker. Ja používam na servery väčšinou LXC (linuxové kontajnery). Docker je taktiež kontajner (aplikačný), ktorý nebol navrhnutý aby bežal vnútri LXC a ani sa to neodporúča. Pred nedávnom som však na youtube videl ako samotný správca projektu LXC (Stefan Graber), demonštruje (dokonca to sam používa) ako funguje docker vnútri LXC. Aby to fungovalo správne, tak pri konfigurácii neprivilegovaného kontajneru je potrebné nastaviť tieto 2 parametre.

nesting=1
keyctl=1

Následne som taký kontajner vytvoril a ono to naozaj funguje. Tu je ukážkový príkaz na vytvorenie kontajneru.

pct create 109 \
    local:vztmpl/debian-11-standard_11.6-1_amd64.tar.zst \
     --ssh-public-keys ~/ssh.key \
     --ostype debian \
     --hostname debian-11-docker \
     --unprivileged 1 \
     --net0 name=eth0,bridge=vmbr1,gw=192.168.1.1,hwaddr=26:BC:B6:A4:84:B9,ip=192.168.1.110/24,type=veth \
     --cores 2 \
     --arch amd64 \
     --memory 4096 --swap 2048 \
     --rootfs local-zfs:16 \
     --features nesting=1,keyctl=1 \
     --onboot 1 \
     --start 1\

Tento príkaz je ukážkový a Vám by asi neprešiel, pretože min. v riadku 3 mám link na ssh-key. V riadku 7 je konfigurácia pre moju LAN, čiže to by asi tiež neprešlo.

Po klasických úvodných nastaveniach som pokračoval inštaláciou docker enginu. V súčasnosti používam LXC Debian 11 a viac-menej som postupoval podľa tohto návodu. Príkazy budeme vykonávať ako bežný užívateľ s privilégiami sudo

sudo apt update && sudo apt upgrade -y
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo docker run hello-world

Toto je vlastne všetko čo sa týka inštalácie dockera. Posledný príkaz stiahne testovací obraz a spustí ho v kontajneri. Keď kontajner beží, vytlačí potvrdzujúcu správu a ukončí sa. Tým sme overili funkčnosť dockera.

Inštalácia portainer

Portainer je webové GUI (grafické užívateľské rozhranie), ktoré zjednodušuje nasadzovanie a manažovanie kontejnerov bez použitia terminálu. Samotný portainer beží tiež len ako docker, takže nasadenie nebude nejak extra zložité. Je to vlastne jeden dlhší príkaz. Z nasledujúceho príkazu vyplýva, že po inštalácii bude portainer bežať na IP adrese stroja, kde sme ho nainštalovali s portom 9000. V mojom prípade to bude http://192.168.1.110:9000

sudo docker run -d \
--name="portainer" \
--restart on-failure \
-p 9000:9000 \
-p 8000:8000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest

Po prihlásení do portainera by sme mohli vidieť niečo podobné tomu z čoho vyplýva, že docker beží.

Portainer

Inštalujeme vaultwarden

Teraz sa pustíme do inštalácie vaultwarden. Samozrejme že vaultwarden môžeme nasadiť aj pomocou portainera, ale teraz si ukážeme ako to nasadíme cez príkazový riadok (ako sa vaultwarden nasadzuje cez portainer bude ukázané nižšie z odkazom na youtube video). Ešte pred nasadením kontajnera vygenerujeme ADMIN_TOKEN, ktorý použijeme ako parameter pri nasadzovaní

openssl rand -base64 48
EIDH6BTm/wWrJQLNQ3**************************HOyGoXMQKygetWvjKhRM

Pre nasadenie resp. deploymend kontejnera nám budú stačiť 2 príkazy. Druhý príkaz obsahuje aj spomínanú premennú prostredia, ADMIN_TOKEN a to nám otvára aj administrátorské možnosti.

sudo docker pull vaultwarden/server:latest
sudo docker run -d --name vaultwarden --restart unless-stopped -e ADMIN_TOKEN=EIDH6BTm/wWrJQLNQ3**************************HOyGoXMQKygetWvjKhRM -v ~/vw-data/:/data/ -p 8022:80 vaultwarden/server:latest

Vaultwarden je nainštalovaný a mi prejdeme do webového prehliadača, kde zadáme url IP adresu stroja, a port 8022 (port si zvolíme ako nám vyhovuje, viď predošlý príkaz). Čiže ak sme Vaultwarden nainštalovali na stroj s IP adresou 192.168.1.110 a port sme zvolili 8022, tak do url web prehliadača zadáme 192.168.1.110:8022. Ako som uviedol, tak ja som pre Vaultwarden vytvoril subdoménu s platným cert. let’s encrypt a na reverznom proxy som nastavil port na 8022. Takže stačí ak zadám do url názov subdomény a budeme presmerovaný na bitwarden. Po zadaní url by sme mohli vidieť niečo podobné tomu.

Vaultwarden

Hneď na začiatku si vytvorime účet a po prihlásení sa dostaneme do užívateľského rozhrania, kde môžeme pracovať. Užívateľské rozhranie vyzerá nasledovne.

Vaultwarden user Interface

Jednoduchým spôsobom sa vieme dostať aj do admin rozhrania a to tak, že do url (v mojom prípade) zadáme 192.168.1.110:8022/admin. Následne to bude chcieť po nás aby sme korektne vyplnili admin token.

Enter admin token

V admin rozhraní môžeme nastavovať rôzne funkcie ako napr. SMTP server pre odosielanie emailov, zakázanie, alebo povolenie rôznych funkcií, zálohu databázy, atď.

Vaultwarden Admin interface

Ak by niekto chcel inštalovať vaultwarden pomocou portainera, tak veľmi pekne spracovane video je možné nájsť na Youtube kanály

Záver

Vždy som sa bránil dockerom, ale zdá sa, že práca s dockerom nie je náročná a na dockerhube je možné nájsť čokoľvek. Otázne je ako je to z bezpečnosťou. V ďalšej časti by som sa chcel venovať nastaveniam aplikácie, migrácii hesiel z Google pass manažéra, doplnky do web prehliadačov, resp. do smartfonov a pod. Dúfam, že to všetko bude prebiehať hladko a bez problémov. Do teraz som žiadny manažér hesiel (ak nepočítam google password manager) nepoužíval, takže naozaj som v tomto nováčik.

Leave a Reply

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *