自己的密碼自己存-Vaultwarden密碼管理庫架設(1)

上網登入各個網站使用各類服務,已經是我們的日常行程之一,但註冊的帳號密碼一多,如何安全的保管它們就很重要了。有的人會用紙筆記,或者用密碼管理App,如Bitwarden、1Password等等。但是這些方法並非都是萬無一失,都有各自的缺點。例如:紙筆記錄需要塗塗改改,時間久了會搞混;密碼管理App的資料都是存放在業者的伺服器,萬一哪天它們被入侵還是怎樣,那資料不就全都GG了?(案例

我自己的帳號密碼也不算少,起初也是想說找個免費好用的密碼管理App存進去就好了,但是看到前面提到的那個案例,便對那些密碼管理App的安全性打了個大大的問號。那麼問題來了:是否有辦法既能透過密碼管理App存取密碼,又能保證存放的密碼資料萬無一失?

最初我是找到Bitwarden這個網站,它除了能直接在他們的伺服器上註冊帳號來存放密碼外,也可以「自建」,就是在自己的主機、NAS、VPS等架設自己的Bitwarden伺服器,資料全都存放在其中。由於我自己已經有架設網站,因此可以直接利用現有的環境來架設Bitwarden伺服器,實現「自己的密碼自己存」,完全不假他人之手。

行前準備

在開始架設自己的Bitwarden伺服器前,需要準備以下這些:

  • 一台能跑Docker的電腦/NAS/VPS(系統以Linux為佳)
  • 一個網域(沒有又不想花錢買的話可以用No-IP免費註冊一個)

註:Bitwarden伺服器的Docker映像有兩個版本:官方版與第三方版(Vaultwarden)。官方版與後面搭配的用戶端App與瀏覽器套件相容性較好,但對硬體需求較高;後者則是對硬體要求較低,且可使用所有功能,惟在瀏覽器套件與用戶端App的相容性做得不夠好。這裡我使用的是第三方版。

開始架設

這裡示範的環境與條件如下:

  • 使用的是執行Debian 12的實體主機/VPS,且已安裝好Docker
  • 已經註冊好一個網域(付費購買的網域或從No-IP註冊的DDNS網址),且已設定好HTTPS連線
  • 主機的80連接埠已被使用
  1. 登入你的主機,然後選個地方作為Bitwarden伺服器的資料存放目錄。這裡我使用/opt/vaultwarden。
  2. 進入1.的目錄,建立一個文字檔,命名為vaultwarden.env,然後填入以下內容:
    TZ=Asia/Taipei
    LOG_FILE=data/vaultwarden.log
    ROCKET_PORT=80
    DOMAIN=https://(換成你要使用的網域)
    ADMIN_TOKEN=(隨機亂數)

    SMTP_HOST=郵件伺服器*
    SMTP_FROM=寄件者email
    SMTP_PORT=SMTP伺服器連接埠號*
    SMTP_SECURITY=連線加密方式*
    SMTP_USERNAME=使用者名稱
    SMTP_PASSWORD=登入密碼
    • TZ:設定時區
    • LOG_FILE:Vaultwarden的紀錄檔
    • ROCKET_PORT:Vaultwarden使用的連接埠號
    • DOMAIN:Vaultwarden對外連線使用的網域
    • ADMIN_TOKEN:Vaultwarden管理後台(與密碼管理介面不一樣!)的密鑰,可使用openssl指令產生;留空會將其停用
    • SMTP開頭變數:設定Vaultwarden的寄件參數,如伺服器、登入資訊、寄件者email等等
      看你要用哪個郵件服務就填與之對應的參數即可
  3. 執行以下指令來執行Vaultwarden(映像會自動下載)
    docker run -d --name vaultwarden -v /opt/vaultwarden:/data -p 80:80 --restart=always --env-file /opt/vaultwarden/vaultwarden.env vaultwarden/server:latest-alpine
    照慣例說明以上指令的參數:
    • -d:執行後保持在背景運作
    • --name vaultwarden:命名這個容器,名字可以隨意填,只要你知道這個容器是什麼作用就好
    • -v /opt/vaultwarden:/data:將主機的/opt/vaultwarden目錄掛載到容器的/data目錄,這是密碼資料的存放位置
    • -p 8080:80:第一個80是主機要開放的連接埠號;第二個必須與前面env檔中的ROCKET_PORT的值一致
    • --restart always:指定容器重新啟動的條件,本例設定一律自動重啟
    • --env-file:2.的檔案位置,本例為1.的目錄下的vaultwarden.env
    • vaultwarden/server:latest-alpine:指定使用的映像,本例的映像為官方最新穩定版,但使用Alpine Linux為基礎系統(體積較小)
  4. 最後就是設定反向代理,這裡我使用Nginx。
    1. 在nginx設定目錄下的sites-available中新增一個文字檔,本例命名為vaultwarden.conf
    2. 打開這個連結,展開Nginx項目並將其中所有內容貼進去
      要修改的部分(行末要附上’;’):
    3. server_name:換成你的網域
    4. upstream vaultwarden-default中的server:最後的連接埠號換成在3.中的-p參數的第一個連接埠號(8080)
    5. 執行ln -s /etc/nginx/sites-available/vaultwarden.conf /etc/nginx/sites-enabled/vaultwarden.conf,啟用設定檔
    6. 執行sudo nginx -t檢查設定檔;沒問題的話就執行sudo nginx -s reload

上面步驟都有做正確的話,打開網址後應該會看到這個畫面:

最後就可以註冊一個帳號並登入,然後把帳號密碼一一加進去(或者從瀏覽器匯出然後匯入也可以)

與Bitwarden用戶端和瀏覽器外掛搭配使用

重點在於登入時,「正登入到」那裏要選”自我裝載”(另外兩個是bitwarden.com與bitwarden.eu,代表Bitwarden的美國與歐盟伺服器),然後填入網址,然後填入註冊的email與密碼,並完成兩步驟驗證(沒有設定或先前登入時有選擇”記住我”的話會直接進入)即可。

之後有需要登入時,它就會自動從資料庫調出帳號密碼,並且自動填到對應欄位;另外也可以自動產生兩步驟驗證的驗證碼(需要先把相關參數填進去)並貼上,省下開手機的時間。

已知問題

  • 設定使用WebAuthn之後,對應的項目會變成無法編輯或刪除(網頁端與手機端不受影響);不確定最新版本是否已解決這個bug(發文時官方有出新版)
  • 無法使用SSO登入;如不是多人使用則無大礙

有備無患:如何備份Vaultwarden的資料

不怕一萬,只怕萬一;Vaultwarden的資料也需要做好備份(重要=備份,不備份=不重要)。那要怎麼備份?

很簡單,要備份的東西就是這些而已(可在與容器的/data目錄對應的主機目錄中找到):

就把這些檔案複製一份到安全的地方存放就可以了(若不放心可以考慮多存幾份,有備無患)。
還原的話就把先前備份的檔案複製回原處,就可以了,非常簡單。

下篇預告:免Docker架設Vaultwarden的方法(我目前使用的方法)

發佈留言