Vaultwarden密碼管理庫架設(2)-沒有Docker也可以架

前一篇介紹了用Docker架設自己的Vaultwarden密碼管理庫,並透過Bitwarden連線存取,以及如何自助備份資料。今天這篇就來兌現上篇文末的flag(?),就是不用Docker要怎麼架設Vaultwarden(這也是我目前使用的方法)。

行前準備

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

  • 一台使用Linux系統的電腦/VPS
  • 一個網域(沒有又不想花錢買的話可以用No-IP免費註冊一個)
  • docker-image-extract指令檔(沒有裝Docker才需要)

docker-image-extract使用方法:
./docker-image-extract (參數) (映像名稱:標籤)
參數有這兩個:

  • -p:指定平台,預設為linux/amd64(64位元)
  • -o:指定解壓縮的檔案要存放的位置;預設為目前使用中的目錄(以pwd指令檢視)

開始架設

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

  • 使用的是執行Debian 12的實體主機/VPS
  • 已經註冊好一個網域(付費購買的網域或從No-IP註冊的DDNS網址),且已設定好HTTPS連線
  • 主機的80連接埠已被使用
  1. 登入你的主機。
  2. 若沒有安裝Docker/Podman:下載docker-image-extract指令檔到Linux主機或VPS上,並設定可執行權限
    指令:wget https://raw.githubusercontent.com/jjlin/docker-image-extract/main/docker-image-extract
  3. 建立使用者vaultwarden,這是用來執行vaultwarden程式的帳號(※)
  4. 選個地方作為Bitwarden伺服器的資料存放目錄。這裡我使用/opt/vaultwarden
    (記得用chown將目錄擁有者與群組設定成vaultwarden)
  5. 進入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等等
      看你要用哪個郵件服務就填與之對應的參數即可
  6. 下載並解壓縮vaultwarden檔案
    • 使用docker-image-extract
      1. 新建一個目錄(例:output),這是用作vaultwarden映像解壓縮後的暫存目錄
      2. 執行docker-image-extract -o ./output vaultwarden/server:latest-alpine
      3. 將output目錄中的vaultwarden, web-vault複製到/opt/vaultwarden,並設定vaultwarden權限為可執行
        然後就可以刪除output目錄了
    • 使用Docker/Podman-依序執行以下1.-5.的指令(Podman使用者將docker換成podman即可,作用相同)
      1. docker pull docker.io/vaultwarden/server:latest-alpine
      2. docker create --name vw docker.io/vaultwarden/server:latest-alpine
      3. docker cp vw:/vaultwarden /opt/vaultwarden
      4. docker cp vw:/web-vault /opt/vaultwarden
      5. docker rm vw
  7. 建立vaultwarden.service檔案,寫入以下內容:
    [Unit]
    Description=Vaultwarden server
    Documentation=https://github.com/dani-garcia/vaultwarden
    After=network.target
    After=network-online.target

    [Service]
    Type=simple

    User=vaultwarden
    Group=vaultwarden
    Restart=on-failure
    RestartSec=1m
    EnvironmentFile=/opt/vaultwarden/vaultwarden.env
    ExecStart=/opt/vaultwarden/vaultwarden
    LimitNOFILE=1048576
    LimitNPROC=64
    WorkingDirectory=/opt/vaultwarden

    [Install]
    WantedBy=multi-user.target

    然後複製到/etc/systemd/system,之後執行sudo systemctl daemon-reload
  8. 執行sudo systemctl start vaultwarden.service啟動服務;前面指令中的start改成enable可設定開機自動啟動
  9. 最後就是設定反向代理,這裡我使用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
  10. 或者直接用docker即可

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

最後就可以註冊一個帳號並登入,然後把帳號密碼一一加進去(或者從瀏覽器匯出然後匯入也可以)
其他部分如用戶端連線、備份等如前篇所述。

※:這是為了預防當vaultwarden伺服器不幸遭到入侵時,駭客能夠順手接管整個系統。若沒有指定使用者,那預設就會使用root(相當於Windows的Administrator帳號)這個帳號執行;若不幸被入侵,那麼整台主機就GG了。
這裡新增一個vaultwarden帳號,就是令其權限限縮在vaultwarden相關的檔案與目錄上,其餘各處最多就只能讀取而無法寫入與修改,以此來確保整個系統的安全性。不懂的話可以在文末找到鳥哥私房菜的相關說明。
關於如何新增使用者,請看文末第一個連結。

更新

  1. 停止vaultwarden服務
  2. 重複上述下載vaultwarden映像及解壓縮的步驟
  3. 恢復vaultwarden服務

補充

發佈留言