【更新】自建BitWarden-强大的跨平台密码管理系统

前言(可跳过)

为了能够记住密码相信小伙伴们使用过很多密码管理器,比如手机、浏览器自带的密码管理软件,或者微信收藏、便签这种手动保存密码的方法。但是随着注册的网站越来越多,记忆密码会带来很多烦恼。很多密码可能会混淆,还有很多无关紧要的网站干脆就设置成 ”12356789“ 这样的弱密码,要么所有网站都使用同一个密码。这些做法无疑会带来安全性问题密码遗失的窘境。

这些问题也困扰了我很久。因此,想要找到一款全平台自动同步的密码管理软件。调查了一下之后发现要么就是闭源的付费软件,要么就只能在部分平台进行同步。一次偶然,发现很多人都在讨论**Bitwarden**。搜索之后发现,这不就是我理想的密码管理软件吗?

Bitwarden有免费的套餐。如果不想折腾的朋友可以用他们家的免费套餐,使用的是他们的服务器,也是支持全平台的。缺点是数据不在自己手中,在支付宝都能崩的时代里我已经不相信官方的安全性,自建的话可以实现多重备份,不怕数据丢失。话不多说,开工!

自建方案

**方案一:**使用官方自建方案。缺点是使用两步验证器等高级功能还是需要付费获取密钥才能使用。如果不付费的话就只是做到了数据保留在自己手中。

**方案二:**使用第三方社区的替代方案。缺点是部分功能不完善(看了一下基本都是不用的功能),可能会出现稳定性和不兼容的问题。

下面两种方法都会分析给大家。一些自己踩过的坑也分析给大家。

预备

一台2c2g以上的服务器、域名、SSL证书(后续会出一期Certd SSL证书自动化部署更新系统,这里先挖个坑)、一点点docker知识。下面是官方的服务器配置要求:

方案一:官方自建

一、安装docker和docker compose(以Ubuntu22.04为例,已安装的可跳过)

安装Docker

  1. 更新包索引:

    sudo apt-get update
    
  2. 安装必要的包,以便通过HTTPS使用存储库:

    sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
    
  3. 添加Docker的官方GPG密钥:

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    
  4. 设置Docker存储库:

    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
    
  5. 更新包索引:

    sudo apt-get update
    
  6. 安装Docker CE:

    sudo apt-get install docker-ce
    
  7. 启动Docker并设置开机自启动:

    sudo systemctl start docker
    sudo systemctl enable docker
    
  8. 验证Docker安装是否成功:

    sudo docker run hello-world
    

安装Docker Compose

  1. 下载Docker Compose:

    sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    
  2. 为Docker Compose二进制文件添加执行权限:

    sudo chmod +x /usr/local/bin/docker-compose
    
  3. 创建符号链接(可选):

    sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
    
  4. 验证Docker Compose安装是否成功:

    docker-compose --version
    

二、创建新用户和工作空间

  1. 创建bitwarden用户

    sudo adduser bitwarden
    
  2. 设置密码

    sudo passwd bitwarden
    
  3. 创建并添加bitwarden至docker组

    sudo groupadd docker
    sudo usermod -aG docker bitwarden
    
  4. 创建bitwarden工作目录(课自行修改)

    sudo mkdir /opt/bitwarden	# 创建工作目录
    sudo chmod -R 700 /opt/bitwarden	# 赋予读写权限
    sudo chown -R bitwarden:bitwarden /opt/bitwarden	# 将目录权限赋予bitwarden用户
    

三、安装Bitwarden

开始之前请进入到你前一步设置的工作目录。

  1. 下载安装脚本

    curl -Lso bitwarden.sh "https://func.bitwarden.com/api/dl/?app=self-host&platform=linux" && chmod 700 bitwarden.sh
    
  2. 安装

    ./bitwarden.sh install
    
  3. 配置

    1. Enter the domain name for your Bitwarden instance: 准备好的域名
    2. Do you want to use Let’s Encrypt to generate a free SSL certificate? (y/n): 如果你已经有证书就不用再申请,将证书放到./bwdata/ssl/your.domain目录下
    3. Enter your installation id: 点击进入https://bitwarden.com/host/,获取安装id
    4. Enter your installation key: 点击进入https://bitwarden.com/host/,获取key
    5. Enter your region (US/EU): 默认US
    6. Do you have a SSL certificate to use? (y/n): 根据自己情况选择
    7. Do you want to generate a self-signed SSL certificate? (y/n): 根据自己情况选择
  4. 修改端口

    # Note: After making changes to this file you need to run the `rebuild` or `update` 
    修改了这个部分你需要运行./bitwarden rebuild或者./bitwarden update
    
    # Full URL for accessing the installation from a browser. (Required)
    url: https://your.domain
    ...
    http_port: 
    如果你的80端口被占用就需要设置其他端口
    ...
    https_port: 
    如果你的443端口被占用就需要设置其他端口
    ...
    
  5. 修改环境变量

    vi ./bwdata/env/global.override.env
    

    需要修改以下几个位置:

    ...
    globalSettings__mail__replyToEmail=<placeholder>这里请注意,有些邮箱系统要求发件人要和用户名相同,否则可能会报错。
    其他部分根据你使用的邮件服务商填写,# 后面是QQ邮箱例子
    globalSettings__mail__smtp__host=<placeholder>	# smtp.qq.com
    globalSettings__mail__smtp__port=<placeholder>	# 465(587端口适用于TLS,这里是SSL验证,填写587可能会报错)
    globalSettings__mail__smtp__ssl=<placeholder>	# true
    globalSettings__mail__smtp__username=<placeholder>	# [email protected]
    globalSettings__mail__smtp__password=<placeholder>	# 生成的授权码
    ...
    adminSettings__admins=	# 管理员邮箱(必须),可以和上面的邮件服务器相同
    ...
    

    我推荐使用QQ邮箱,因为没有SMTP数量限制。

  6. 配置docker外的nginx

    如果你的80或者443端口被占用,那么你需要再进行一步反向代理。将下面的bitwarden配置文件修改后复制到/etc/nginx/nginx.confighttp{ }中。

    sudo vi /etc/nginx/nginx.config
    

    修改对应的部分:

    # BitWarden
    server {
        listen 80;
        server_name your.domain;
        return 301 https://$host$request_uri;
    }
    server {
        listen 443 ssl;
        #请填写绑定证书的域名
        server_name your.domain;
        #请填写证书文件的相对路径或绝对路径
        ssl_certificate your.crt;	# 这里改成 工作目录/bwdata/ssl/your.domain/xxx.crt
        #请填写私钥文件的相对路径或绝对路径
        ssl_certificate_key your.key;	# 这里改成 工作目录/bwdata/ssl/your.domain/xxx.key
        ssl_session_timeout 5m;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;
    
    
            location / {
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Range $http_range;
                proxy_set_header If-Range $http_if_range;
            proxy_redirect off;
            proxy_pass http://127.0.0.1:10086;	# 改成你设置的http端口
            client_max_body_size 20000m;
            }
    }
    
    :wq	# 保存退出
    
    nginx -t	# 检查配置文件是否正确
    nginx -s reload	# 重载配置文件
    

    至此,所有配置全部完成。

  7. 管理员设置

    登录你的bitwarden的管理员站点https://your.domain/admin会出现下面的界面,如果报错,请看8. Tips

    输入你设置好的管理员邮箱,然后去邮箱里接收验证链接,应该长这样:

    Log in Now

    接下来你就可以注册一个账号使用了,具体的使用方法请自行百度或者留言。

  8. Tips

    • 以上实现的是全链路的SSL加密通信。如果你提前准备好了SSL证书,其实在3. 配置这一步只需要设置好你的域名即可,有关SSL的全选n。个人觉得服务器内部不需要加密通信(这里指的是服务器的nginx向docker中的nginx转发),除非担心你的服务器被入侵。这个按照自己的需求来。
    • 如果输入你的域名能打开bitwarden,但是注册或者进入管理员面板后报错502,请输入docker ps找到admin的容器id,例如7abe6e143c39 bitwarden/admin:2024.11.0,然后输入命令docker logs 7abe6e143c39查看日志,如果有报错基本都在这个日志能看到。找到问题请善用chatgpt等工具,也可以留言我帮你解决(不一定及时)。

方案二:社区自建

一、安装docker和docker compose

见方案一:安装docker和docker compose(以Ubuntu22.04为例,已安装的可跳过)。

二、创建新用户

见方案一:创建新用户和工作空间。

三、安装 Vaultwarden

Vaultwarden官方仓库:Vaultwarden: Unofficial Bitwarden compatible server written in Rust, formerly known as bitwarden_rs

  1. 创建数据存储路径(包含数据库和配置文件)

    su bitwarden	# 切换到bitwarden用户
    mkdir /home/bitwarten/data	# 创建数据目录,这里可以自行设置,之后的配置文件和数据库都会在这里。
    
  2. 创建docker-compose.yml

    这里我推荐使用docker compose方式安装vaultwarden。直接在命令行用docker安装坑太多不推荐!

    cd /home/bitwarden	# 进入你准备安装vaultwarden的目录,可自行修改
    vi docker-compose.yml
    

    以下是最基本的配置,开启了管理员页面和移动设备通知。修改下面的配置文件后粘贴到docker-compose.yml文件中。(如果你不熟悉docker,建议只修改备注的地方)

    services:
      vaultwarden:
        image: vaultwarden/server:latest
        container_name: waitwarden	# 容器名称
        restart: unless-stopped
        ports:
          - "10086:80"	# 将10086修改为你想要映射的端口(记住你修改的端口,后面配置nginx用得到)
        volumes:
          - ./data:/data	# 配置数据存储路径。将./data修改为你在第一步设置的数据存储路径
        environment:
          - ADMIN_TOKEN=XXXXXXXXXXXXXXXXXX	# 去下面的密码生成网站生成一串40位以上的token
          - PUSH_ENABLED=true	# 这里的意思是打开推送功能(不开启的话移动设备无法接收通知)
          - PUSH_INSTALLATION_ID=XXXXXXXXX	# 去下面的推送通知网站获取你的id和key。填入id
          - PUSH_INSTALLATION_KEY=XXXXXXXX	# 填入key
          - WEBSOCKET_ENABLED=true
          - PUSH_RELAY_URI=https://api.bitwarden.eu
          - PUSH_IDENTITY_URI=https://identity.bitwarden.eu
          - SIGNUPS_ALLOWED=false	# 禁止新用户注册,可以在管理员页面邀请注册
    
    1. 密码生成网站:安全、强大的密码生成器 | 1Password
    2. 推送通知网站:Requesting Hosting Installation ID & Key | Bitwarden
  3. 启动!!!

    第一次启动:

    docker compose up -d && docker compose logs -f
    

    docker compose logs -f是为了查看日志,如果报错的话可以查一查原因,不懂的话可以留言帮你解决。

    如果更新compose文件之后的话用下面的命令启动:

    docker compose pull && docker compose up -d && docker compose logs -f
    

    此时,如果你的端口是打开的就可以用ip:port访问了(不推荐)

四、配置nginx

见方法一:配置docker外的nginx。忽略其他废话,直接配置,注意其中的端口修改为你刚才设置的映射端口。

下面是官方的nginx示例:Proxy examples

还有官方的HTTPS证书申请方法:Enabling HTTPS

五、其他设置

第四步完成之后就可以使用域名来访问自建的vaultwarden了。其他设置都可以在https://you.domain/admin进行设置。

这里一定配置好邮箱,邮箱的配置还是看方法一。这里还有官方推荐的几种邮箱:SMTP Configuration

大功告成!

其他更加详细的配置建议查看官方文档:Vaultwarden Wiki

105 个赞

感谢大佬分享

1 个赞

如果服务器配置比较低,推荐部署vault warden
2c1g的服务器就可以跑vaultwarden

5 个赞

是的,就准备写在方案二呢,今天先写这么点

3 个赞

感谢大佬分享

4 个赞

对于SSL证书,我是让cloudflare自动套的,感觉这个比较方便
此外,建议开启CDN,防止泄露真实IP :tieba_024:

3 个赞

开cnd才是真全链路加密了哈哈哈

2 个赞

很详细 谢谢大佬分析

1 个赞

太麻烦了, 不是习惯 Bitwarden 的话直接用keepass2/keepassxc, 同样开源免费.

优点是支持webdav, 可以用坚果云等支持webdav的云服务, 只需要把主密码和密钥另外存放, 也不怕泄密.

坚果云只存放加密后的数据库, 还支持历史版本, 可比自己自建服务器可靠多了.
实在不放心再写个脚本定时复制一份到本地.

2 个赞

这个支持全平台吗佬友

1 个赞

推荐 vault warden,占用低,但是一定记得定期备份数据,自建的属于丢了就G了

还是vaultWarden傻瓜式适合我一些 :rofl:

vaultWarden的网页拓展用起来确实比keepassxc方便不少,但是把自己的所有密码都存放在别人的服务器上也挺尴尬的(虽然说是没有密码光得到数据文件夹也难以解密),更何况对机器是有一定要求的,比如阿里云国内服务器就没法绑定域名,SSL证书也难搞,可能还需要cloudflare帮忙打洞 。我觉得真要玩vaultWarden还得家里自备一台nas,再加上一台国外的线路还可以的服务器帮忙打洞和数据转发 。

1 个赞

确实,我自己已经这样稳定3年了,数据放在自己手里最放心,小鸡上也是商家随便看,给自己安全感

2 个赞

感谢大佬教程

1 个赞

感谢大佬分享

2 个赞

感谢大佬分享

4 个赞

安卓/ios/windows/mac/linux, 真正的全平台.

感谢分享佬友

1 个赞

感谢大佬分享。

3 个赞