← 返回 TimeAmber
Waitfor
游龙当归6-!3p

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

经验分享

前言(可跳过)

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

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

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

自建方案

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

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

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

预备

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

2cvxwybd.ahc

方案一:官方自建

johcry02.fnn

一、安装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. 配置

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

    d2kxnmlk.zpb

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

    xvidhdyv.ir4

    Log in Now

    w3uxrqkf.tc1

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

  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

za4ua2ja.2uw

大功告成!

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

  • 作者:Waitfor (联系作者)
  • 发表时间:2024-11-16 17:57
  • 最后修改:2024-11-20 22:22
  • 本站点采用 署名 4.0 国际 (CC BY 4.0) 创作共享协议。可自由转载、引用,并且允许商业性使用。但需署名作者且注明文章出处。

发表评论

0/250

Comments | 共 0 条评论

快来抢沙发!

Once Upon a Time - Max Oazo / Moonessa
00:00 / 03:26

作词 : Jennifer Jung

作曲 : Chiril Oarza

It’s been a couple of years since I've seen your face (许久不见)

Wondering what you're up to now (我仍心系于你)

Yeah my head is still up in space (是啊,那份情愫被永远定格于无法触及的高空)

I guess it never came down (我想它永远无法安然坠下)

I can tell you that I’ve changed a bit though (想要告诉你,我已改变了些许)

Not too much since then (虽然那些不值一提)

We were always rebellious kids (我们曾是意气风发的叛逆少年)

Do you remember when (你是否还记得呢)

We were riding through the night (你我一同驱车驶过漫长黑夜)

The moon was on our side (身披银白月光)

Once upon a time (在许久许久之前)

Once upon a time (在从前的从前)

As high as the stars in the sky (如深沉夜空中的璀璨星辰)

Crossing all the lines (跃过遥远天际)

Once upon a time (在故事的开始)

Once upon a time (在许久以前)

Do you recall all the promises (你是否能忆起从前的承诺)

We used to make back then (那时一并许下的诺言)

Can you tell me are they still on (请告诉我你是如我这般珍视这些回忆)

Or is that silly of me to think (还是一切只是我的一厢情愿)

The years I find separate us (与你分别的这些岁月里)

I think of you now and then (我时常陷入与你的旧日回忆)

Won’t let the memories fade to dust (不愿放任往昔随尘埃逝去)

Baby remember when (亲爱的,我仍记得)

We were riding through the night (与你一同驱车驶过漫漫长夜)

The moon was on our side (身披皎洁月光)

Once upon a time (在许久许久之前)

Once upon a time (在从前的从前)

As high as the stars in the sky (如夜空中高悬的明星)

Crossing all the lines (跨越昼夜交际线)

Once upon a time (在许久以前)

Once upon a time (在一切的开始)

We were riding through the night (并肩驶过冗长黑暗)

The moon was on our side (身披潺潺月光)

Once upon a time (在很久以前)

Once upon a time (在从前的岁月)

As high as the stars in the sky (如烁着熠熠星光的碎星)

Crossing all the lines (跃过遥远天际)

Once upon a time (在故事的开始)

Once upon a time (在许久以前)