自己搭设开源密码管理工具 bitwarden

简介

Bitwarden是一款自由且开源的密码管理服务,用户可在加密的保管库中存储敏感信息(例如网站登录凭据)。Bitwarden平台提供有多种客户端应用程序,包括网页用户界面、桌面应用,浏览器扩展、移动应用以及命令行界面。[6]Bitwarden提供云端托管服务,并支持自行部署解决方案。[7]

官方服务器可以免费使用,但不包含高级服务。

官网地址

用 Rust 编写的 Bitwarden 服务器 API 的替代实现,与上游 Bitwarden 客户端兼容*,非常适合运行官方资源密集型服务可能不理想的自托管部署。
在这里插入图片描述

vaultwarden 自己搭设的好处:

  1. 密码仓库在自己手中更安全。
  2. 可以使用无限的账户、组织。
  3. 包含高级功能。

官方仓库

支持原创

准备工作

  1. 在线云服务器
  2. 公网域名
  3. 一把时间

云服务器

我用的阿里云服务器 特价99一年
学生特价服务器
新老客户续费优惠服务器
在这里插入图片描述
地区选离自己近的
我选择的是centos8

配置安全组

服务器通过端口与外界通信,安全组就是设置哪些端口可以通过。

购买后进入控制台 ecs实例配置安全组
在这里插入图片描述
没有安全组就创建一个。
点击管理规则,添加入方向规则 22 80 443 分别对应ssh http 和 https通信。其他的根据自己需求添加。出方向默认不用管。
在这里插入图片描述

设置密码

我这边步骤是先关机,然后通过阿里云控制台修改密码,然后在启动实例。之后就可以通过ssh工具连接了。

域名

vaultwarden 需要通过https使用,所以需要一个域名。
我是在阿里云买的域名。
在这里插入图片描述
搜索域名,然后选择购买。

购买后需要实名和备案,阿里云一套流程走完。
在这里插入图片描述

备案通过后,设置dns解析。将域名解析到你的服务器公网ip。
我这里用的cloudflare,需要先在域名提供商(阿里云 域名)设置为cloudflare的dns。

picture 1

然后在cloudflare设置域名解析。

picture 0

设置完之后继续后面的步骤。

配置Vaultwarden

安装docker

安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。

sudo yum install -y yum-utils \device-mapper-persistent-data \lvm2

使用以下命令来设置稳定的仓库。

sudo yum-config-manager \--add-repo \https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装docker

sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

启动bitwarden 镜像

docker run --rm -d --name vaultwarden -v /home/bitwarden/:/data/   -e LOG_FILE=/data/vaultwarden.log--restart unless-stopped -p 80:80 vaultwarden/server:latest

启动docker

sudo systemctl start docker

配置反向代理

我使用的caddy2

安装caddy2

dnf install 'dnf-command(copr)'
dnf copr enable @caddy/caddy
dnf install caddy

更改反向代理信息

vi /etc/caddy/Caddyfile

参考下面的内容,配置反向代理。{{your email}}改成你的邮箱,www.exampledomain.com 改成你的域名。
caddy 支持自动配置https 省去了我们的麻烦,只需要写上tls 邮箱即可

www.exampledomain.com {log {level WARNoutput file "/home/caddy/www.exampledomain.com.log" {roll_size 10MBroll_keep 10}}log {level WARNoutput file "/home/caddy/www.exampledomain.com-error.log" {rotate_size 10rotate_age 14rotate_keep 5rotate_compress}}tls "{{your email}}"encode gziphandle_path "/vaultwarden/*" {reverse_proxy "0.0.0.0:80" {transport http {dial_timeout 2sresponse_header_timeout 30s}header_up "Host" "{upstream_hostport}"header_up "X-Real-IP" "{remote_host}"}}handle {respond "Nope!" 404}
}

反向代理配置更新

caddy reload --config /etc/caddy/Caddyfile

访问你的 域名/vaultwarden/ 就能看到登陆页面了🎉

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

高级配置

定时备份

vaultwarden中存储了我们的密码,以防万一,设置一个定时备份方便恢复。
使用cron进行备份。/etc/cron.daily/ 目录下的脚本每天会自动执行一次。

vi /etc/cron.daily/backup

输入文件内容

#/bin/bash
bitwardenPath=/home/bitwarden
bitwardenBPath=你的备份目录
bitwardenBTDir=${bitwardenBPath}/tmp/# bitwarden 备份
mkdir -p  ${bitwardenBTDir}
cp -r   ${bitwardenPath}/* ${bitwardenBTDir}# 删除不需要备份的数据
rm -rf ${bitwardenBTDir}db.sqlite3-shm
rm -rf ${bitwardenBTDir}send/
rm -rf ${bitwardenBTDir}tmp/tar -czf  ${bitwardenBPath}/$(date '+%Y%m%d-%H%M').tar.gz -C  ${bitwardenBTDir} .
rm -rf ${bitwardenBTDir}

后续如果需要恢复,就把挂载目录清空解压一个备份文件到里面重启docker即可。

定时更新镜像

vaultwarden 还在持续更新,为了及时用上最新的版本,设置一个定时任务,定时更新镜像。

vi /etc/cron.daily/dockerImageUpdate

脚本内容如下

#/bin/bash
docker run -d --name watchtower --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup --run-once

watchtower 自动更新 Docker 容器基础镜像的流程。

多次失败屏蔽ip fail2ban

待续

填坑记录

domain 重启 404

设置domain参数后重启docker,访问就404,暂未搜到解决方法。

绕行方案,删除domain参数,重启docker后通过ip:端口访问admin管理页面设置domain。

TOTP 时区问题

报错如下

发生错误。
Invalid TOTP code! Server time: 2023-11-15 06:46:43 UTC IP: 172.xx.xx.xx

docker镜像内时间错误

启动时将时间挂载进去。

docker run ······ -v /etc/localtime:/etc/localtime ·····

改完之后依旧不行,苦苦寻找解决方案,最后发现存的totp太多了用错了 😅。

待续

支持原创

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/180297.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

247:vue+openlayers 根据坐标显示多边形(3857投影),计算出最大幅宽

第247个 点击查看专栏目录 本示例是演示如何在vue+openlayers项目中根据坐标显示多边形(3857投影),计算出最大幅宽。这里先通过Polygon来显示出多边形,利用getExtent() 获取3857坐标下的最大最小x,y值,通过ransformExtent转换坐标为4326, 通过turf的turf.distance和计算…

5、鸿蒙项目远程调试

一、注册华为账号, 如果是华为手机,并注册了账号可能跳过此步骤,如果使用邮箱注册,此邮箱一定是要正确的邮箱,此处需要使用邮箱获取验证码 注册地址:‎ 1、进入注册页面,输入手机号等信息后点…

系列二、类装载器ClassLoader

一、能干嘛 1.1、方法区 存放类的描述信息的地方。 1.2、JVM中的类装载器 1.3、获取ClassLoader的方式 /*** Author : 一叶浮萍归大海* Date: 2023/11/16 0:08* Description: 获取类的加载器的方式*/ public class ClassLoaderMainApp {public static void main(String[] arg…

Android 10.0 framework层设置后台运行app进程最大数功能实现

1. 前言 在10.0的定制开发中,在系统中,对于后台运行的app过多的时候,会比较耗内存,导致系统运行有可能会卡顿,所以在系统优化的 过程中,会限制后台app进程运行的数量,来保证系统流畅不影响体验,所以需要分析下系统中关于限制app进程的相关源码来实现 功能 2.framewo…

VIVADO+FPGA调试记录

vivadoFPGA调试记录 vitis编译vivado导出的硬件平台,提示xxxx.h file cant find vitis编译vivado导出的硬件平台,提示’xxxx.h file cant find’ 此硬件平台中,包含有AXI接口类型的ip。在vitis编译硬件平台时,经常会报错&#xf…

贪吃蛇小游戏

一. 准备工作 首先获取贪吃蛇小游戏所需要的头部、身体、食物以及贪吃蛇标题等图片。、 然后,创建贪吃蛇游戏的Java项目命名为snake_game,并在这个项目里创建一个文件夹命名为images,将图片素材导入文件夹。 再在src文件下创建两个包&#…

JavaWeb-HTML

​ 一、什么是HTML HTML是hypertext markup language(超文本标记语言)的缩写。HTML文件本质上是文本文件,普通的文本文件只能显示字符,而HTML文件可以在浏览器上显示更丰富的信息(如图片等)。 超文本&am…

python链表_递归求和_递归求最大小值

创建一个单链表: class LinkNode: #设置属性def __init__(self,data None):self.data dataself.next None class LinkList: #设置头结点def __init__(self):self.head LinkNode()self.head.next Nonedef CreateListR(self,a): …

EMNLP 2023 | DeepMind提出大模型In-Context Learning的可解释理论框架

论文题目:In-Context Learning Creates Task Vectors 论文链接:https://arxiv.org/abs/2310.15916 01. 引言 此外,作者也提到本文的方法与软提示(soft-prompt)[1]方法类似,soft-prompt也是通过调整大模型内…

sqli-labs(Less-5) updatexml闯关

updatexml() - Xpath类型函数 1. 确定注入点闭合方式 确认为字符型注入 2. 爆出当前数据库的库名 http://127.0.0.1/sqlilabs/Less-5/?id1 and updatexml(~,concat(~,(select database())),~) --3. 爆出当前用户名 http://127.0.0.1/sqlilabs/Less-5/?id1 and updatexml…

嵌入式linux--sysfs文件系统以及操作GPIO

sysfs文件系统 在Linux系统中,/sys路径是一个特殊的虚拟文件系统(Virtual File System),用于提供对内核和设备的运行时信息的访问。它是sysfs文件系统的挂载点,提供了一种以文件和目录形式表示系统设备、总线、驱动程…

SpringBoot--中间件技术-4:整合Shiro,Shiro基于会话SessionManager实现分布式认证,附案例含源代码!

SpringBoot整合安全中间件Shiro 技术栈&#xff1a;SpringBootShiro 代码实现 pom文件加坐标 Springboot版本选择2.7.14 &#xff1b;java版本1.8 &#xff1b; shiro做了版本锁定 1.3.2 <properties><java.version>1.8</java.version><!--shiro版本锁定…