vaultwarden编译安装搭建教程 作者: Hogwarts 发布于: 2021-07-12 更新于: 2024-02-25 分类: 默认分类 Vaultwarden不知道是啥吧,Bitwarden_rs改名了。本文标题应该叫:Debian10下编译安装Bitwarden_rs。Bitwarden_rs是用Rust编写的非官方Bitwarden兼容服务器。为啥心血来潮要搭Bitwarden_rs呢?一直以来疏忽对于密码的管理,不乏有账户被盗的情况,虽未造成大的损失,但心中一直不爽。再加上前些天的社工库事件,查了下自己暴露的信息,加强了搭建密码管理软件的决心。 看了几个密码管理软件的情况,尤其是重点关注了keepass,开源、客户端齐全且易操作、支持浏览器插件、支持网盘和webdav协议。试用了一下,不爽的地方是浏览器集成的插件得在本地客户端运行的情况下起作用。而且需用社区版keepassXC集成到浏览器中。要是客户端和浏览器插件直接支持webdav协议就好了。可能要求有点高。 鉴于以上情况,故试搭建Bitwarden,然后一了解这货太麻烦,而且要求VPS的配置挺高。就去学习Bitwarden_rs,网上千篇一律的全是Docker搭建教程,抄来抄去的,也没啥意思。 搜到荒岛的教程有编译版,而且是Rust编译的,Rust编译不就一运行文件么,还需要啥Docker呢。前些日子试编译过ss-rust和trojan-r,有了经验就想学习着试编译一下。安装运行后感觉太强大了,得学习一阵子了。先将编译搭建过程分享一下吧。 #一、搭建前的准备工作 ##1.1 安装必要的软件及编辑器 apt update apt upgrade apt -y install wget curl vim git sudo build-essential pkg-config libssl-dev libsqlite3-dev **说明一下** **1.1.1** 不安装build-essential报错:error linker cc not found = note no such file or directory (os error 2),相当于centos下的gcc,所以centos下报错就要yum -y install gcc **1.1.2** 不安装pkg-config libssl-dev报错: It looks like you're compiling on Linux and also targeting Linux. Currently this requires the pkg-config utility to find OpenSSL but unfortunately pkg-config could not be found. If you have OpenSSL installed you can likely fix this by installing pkg-config.目测是OpenSSL的问题,不懂。 **1.1.3** libsqlite3-dev是sqlite数据库文件,没有安装,暂时还没问题,不知道以后有没有问题。貌似是装PHP时自动安装了。 ##1.2 安装rust编译环境 安装命令:`curl https://sh.rustup.rs -sSf | sh` 1) Proceed with installation (default) 2) Customize installation 3) Cancel installation 选1即可, Debian下安装结束后运行:`. ~/.profile`使生效。 如安装过执行更新命令:rustup update即可。 参考:`https://winamp.top/87.html` #二、编译安装Bitwarden_rs ##2.1 下载源码 git clone https://github.com/dani-garcia/vaultwarden.git ##2.2 编译源码 cd vaultwarden #编译命令 cargo build --features sqlite –release #本文是以sqlite3作为数据库文件的,需要MySQL作为后端的将sqlite改为mysql即可。具体请参考Wiki。 如果报错,更换编译命令为 cargo run --features sqlite --release #编译完成后运行 strip ./target/release/vaultwarden #去除调试符号表以减少文件体积 说一下Centos7下编译的情况: 1. Centos7下运行上述编译命令有报错,运行`cargo run --features sqlite --release`没有问题。 1. 编译完成后运行:`./vaultwarden -v`,显示`vaultwarden 1.23.0-d0bf0ab2`,但在Debian下显示:`./vaultwarden: error while loading shared libraries: libssl.so.10: cannot open shared object file: No such file or directory`。可能是C7的openssl的版本低所致,具体原因未明。 1. 同理,1.22.1是在Debian10下编译,在Centos7下运行 `./vaultwarden-1.22.1 -v`报错 `./vaultwarden-1.22.1: /lib64/libc.so.6: version GLIBC_2.18' not found (required by ./vaultwarden-1.22.1)` Debian11 运行`cargo build --features sqlite –release`报错 error: Found argument '–release' which wasn't expected, or isn't valid in this context USAGE: cargo build --features ... For more information try --help 运行:`cargo run --features sqlite --release`开始编译。 PS:在甲骨文的1G内存迪拜的机器上一直卡着,开了vultr东京2H2G的AMD机器,编译了9分44秒。 - 在debian12下编译的文件,在debian11下都不一定能够运行。所以更不建议进行交叉编译,rust的跨平台编译跟Golang还是有很大差距的,因为使用跨平台编译,需要准备的依赖工具太多了,所以跨平台编译非常不方便。 - 可以在Docker容器中提取运行文件。参考:`https://github.com/dani-garcia/vaultwarden/wiki/Pre-built-binaries` ##2.3 拷贝到运行目录 cp ./target/release/vaultwarden /usr/bin/bitwarden_rs chmod +x /usr/bin/bitwarden_rs //给予执行权限 /usr/bin/bitwarden_rs –v //查看一下版本 ##2.4 新建运行用户 我感觉是nobody用户和etc目录对于写权限不友好,所以建立新运行用户,并且将数据存在opt目录中。 useradd -m -d /opt/bitwarden_rs -s /sbin/nologin bitwarden_rs //创建一个名为bitwarden_rs的用户 adduser bitwarden_rs sudo //加到sudo组 cd /opt/bitwarden_rs sudo -u bitwarden_rs mkdir data //创建用于存放数据的目录 ##2.5 安装web-vault Github地址:`https://github.com/dani-garcia/bw_web_builds/releases/` sudo -u bitwarden_rs wget https://github.com/dani-garcia/bw_web_builds/releases/download/v2022.11.2/bw_web_v2022.11.2.tar.gz //下载 sudo -u bitwarden_rs tar -xzvf bw_web_v2022.11.2.tar.gz //解压 #三、配置运行文件 ##3.1 建立运行文件 ###3.1.1 简单配置 vim /etc/bitwarden_rs.env 写入如下配置: SIGNUPS_ALLOWED=true ROCKET_ADDRESS=127.0.0.1 ROCKET_PORT=8000 自1.30起取消了WS接口,故以下三项不再需要。 ~~WEBSOCKET_ENABLED=true WEBSOCKET_ADDRESS=127.0.0.1 WEBSOCKET_PORT=3012~~ 配置文件可参考:`https://github.com/dani-garcia/vaultwarden/blob/main/.env.template` ###3.1.2 SMTP服务 可选择加入SMTP服务,找回主密码提示用。 **`此项并不能找回主密码。`** SMTP_HOST=smtp.mail.ru #以mail.ru邮局为例 SMTP_FROM=admin@yourdomain.com #发件人 SMTP_PORT=465 #一般为465 SMTP_USERNAME=yourname #发件人用户名 SMTP_PASSWORD=yourpassword #发件人密码 SMTP_SECURITY=force_tls INVITATIONS_ALLOWED=false SENDS_ALLOWED=false 参考: [valutwarden wiki SMTP](https://github.com/dani-garcia/vaultwarden/wiki/SMTP-Configuration "valutwarden wiki SMTP") 设置 ##3.2 创建系统运行文件 vim /etc/systemd/system/bitwarden_rs.service 写入如下配置: [Unit] Description=Bitwarden Server (Rust Edition) Documentation= https://github.com/dani-garcia/vaultwarden After=network.target [Service] User=bitwarden_rs Group=bitwarden_rs WorkingDirectory=/opt/bitwarden_rs ReadWriteDirectories=/opt/bitwarden_rs EnvironmentFile=/etc/bitwarden_rs.env ExecStart=/usr/bin/bitwarden_rs LimitNOFILE=1048576 LimitNPROC=64 PrivateTmp=true PrivateDevices=true ProtectHome=true ProtectSystem=strict AmbientCapabilities=CAP_NET_BIND_SERVICE CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE NoNewPrivileges=true Restart=on-failure RestartPreventExitStatus=10 [Install] WantedBy=multi-user.target 写入完成后运行以下命令 systemctl daemon-reload systemctl start bitwarden_rs.service systemctl status bitwarden_rs.service systemctl enable bitwarden_rs.service 如不能正常运行,则运行以下命令查看报错的日志信息 journalctl -u bitwarden_rs.service #四、安装caddy v1.0.5 ##4.1 下载安装 参考:`https://winamp.top/101.html` ##4.2 修改配置文件 vim /etc/caddy/caddy.conf 写入以下内容 yourdomain.com:80 { redir https://yourdomain.com {uri} } yourdomain.com:443 { gzip browse timeouts none tls fullchain.cer private.key //注意路径,或改为邮箱自助申请。 header / { Strict-Transport-Security "max-age=31536000;" } proxy / 127.0.0.1:8000 { transparent header_upstream -Origin } } 因取消了WS,故以下配置不再需要 ~~proxy /notifications/hub/negotiate 127.0.0.1:8000 { transparent header_upstream -Origin } proxy /notifications/hub 127.0.0.1:3012 { websocket header_upstream -Origin }~~ ##4.3 Nginx 配置参考 server { listen 80; listen [::]:80; server_name vaultwarden.example.tld; if ($host = vaultwarden.example.tld) { return 301 https://$host$request_uri; } return 404; } server { # For older versions of nginx appened http2 to the listen line after ssl and remove `http2 on` listen 443 ssl; listen [::]:443 ssl; http2 on; server_name vaultwarden.example.tld; # Specify SSL Config when needed #ssl_certificate /path/to/certificate/letsencrypt/live/vaultwarden.example.tld/fullchain.pem; #ssl_certificate_key /path/to/certificate/letsencrypt/live/vaultwarden.example.tld/privkey.pem; #ssl_trusted_certificate /path/to/certificate/letsencrypt/live/vaultwarden.example.tld/fullchain.pem; client_max_body_size 525M; location / { proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://vaultwarden-default; } } 参考:`https://github.com/dani-garcia/vaultwarden/wiki/Proxy-examples` #五、bitwarden_rs操作 ##5.1 登录注册 在浏览器中输入`https://yourdomain.com`后就会看到注册的英文页面。 ##5.2 小技巧 登入时如果是英文界面就先翻译一下,在`“设置”-“选项”-“语言”`下拉菜单中选择中文。 ##5.3 取消注册 注册好账号后,修改配置文件 vim /etc/bitwarden_rs.env 将SIGNUPS_ALLOWED=ture改为SIGNUPS_ALLOWED=false 并运行:systemctl restart bitwarden_rs.service 其实无所谓,谁会在你的服务器上保存他的密码呢。 ##5.4 关闭web vault面板 看个人情况吧,关闭后在浏览器打开网址是 `404: Not Found` 的显示。在 /etc/bitwarden_rs.env 中加入 WEB_VAULT_ENABLED=false 不推荐nginx或caddy反代目录加密码,那样的话,chrome的扩展插件加载失败。或许是水平所致。 ##5.5 关于备份 ###5.5.1 客户端或网页端导出密码库 ###5.5.2 备份/opt/bitwarden_rs/data文件夹 建议手动备份到另外的云端。 #六、应用体验 刚搭建完毕,还未使用。貌似比keepass强大。自行体验吧。 我在想如果把主密码忘了该咋办呢。 ##6.1关于主密码 > 对于使用任何密码管理工具的人来说,主密码的重要性不言而喻。一旦主密码泄漏,相当于将所有帐号密码拱手相让;一旦主密码丢失,所有数据也都化作随机噪音,变得一文不值。所以,请时常审视、改进你的安全策略,定期对帐号做安全审查,不定期修改并牢记主密码。 引用原文:[使用 bitwarden_rs 搭建自托管的密码服务器](https://blog.mynook.info/post/selfhost-bitwarden/ "使用 bitwarden_rs 搭建自托管的密码服务器") ##关于主密码补充 **`主密码不能恢复`**,忘记主密码就嘚了。 可以用SMTP邮件找回设置的主密码提示,前提是你的主密码得有一定的纪念意义,并且在设置主密码时设置提示。提示问题不能和主密码相同。还需自建或三方的邮局服务。故此功能也就那么回事。 ##6.2 关于PIN码 开启PIN码还是有用的,尤其是浏览器插件登录主密码后,需要密码时输入PIN码就可以了。在设置-安全中设置。至于密码库超时和密码库超时动作,看自己喜好吧。 ##6.3 生物识别解锁 手机客户端添加指纹很方便。带指纹的笔记本应该也可以。 ##6.4 关于二步登录 在手机端尝试了Google身份验证器、Authy和Microsoft Authenticator,感觉有点鸡肋。说一下三个软件的使用体验吧。有点跑题了。 要开启二次验证的话 **需特别注意:**`扫描前将二维码和密钥打印出来,放保险柜中备份。` ###6.4.1 Google身份验证器 大部分人的推荐,教程也多。 优点:不需要网络,和银行的动态口令卡相似。 缺点: 1.没有备份二维码,手机不慎丢失的风险。 2.app不需密码或指纹可直接打开。 点评:简单。不是高手的话备份是个难题。无PIN码登录,安全性差。 20230701补充:Google已更新APP,支持云端备份了。未充分测试。 ###6.4.2 Authy 优点: 1.老牌安全软件,众多公司使用。 2.平台全方位,可用手机号异地登录。 3.app中的密钥能在回收站中保存48小时。 4.app可设置PIN码或指纹 缺点: 1.需手机号验证或Email注册。国内手机接码不保准。 点评:推荐。 ###6.4.3 Microsoft Authenticator 微软推出的一款密码管理工具 优点: 1.需指纹或密码登录app。 2.可登录微软账号同步到其它手机。 缺点:本来是做验证的,增加了密码管理功能。 点评:在之前只是有验证功能,但是最近新增了密码填充的功能,它支持Android、iOS以及浏览器扩展,你可以直接使用微软账号登陆来同步保存的密码,相当于你信任微软,你的密码微软替你保存。仅安装未使用未测试。 ###6.4.4 特别注意 ####6.4.4.1 将要扫描的二维码和密钥打印出来 ####6.4.4.2 先停用二次验证、再删除app或app中的密钥 ####6.4.4.3 再看一眼前面两条,一定要按顺序操作(不要笑) ##6.5 再说一下二步验证 ###6.5.1 推荐Aegis Authenticator GitHub:`https://github.com/beemdevelopment/Aegis` ###6.5.2 一点想法 Google更新了IOS端的版本,支持云同步。也打开了关于密码安全的话题。vaultwarden支持同时存储“密码”和“TOTP”,在安全和方便之间,怎么选择呢。 我认为没有绝对的安全,我选择的是方便。 #七、参考 7.1 [编译安装Bitwarden_rs](https://lala.im/7749.html "编译安装Bitwarden_rs") 7.2 [Bitwarden_rs官方仓库](https://github.com/dani-garcia "Bitwarden_rs官方仓库") 7.3 [如何设置caddy](https://github.com/dani-garcia/vaultwarden/issues/301 "如何设置caddy") 7.4 [本人编译版本](https://dl.winamp.top/vaultwarden/ "本人编译版本") (直接打开会乱码,右键-链接另存为,或在Linux下下载。) 7.5 更多问题参考:[vaultwarden wiki](https://github.com/dani-garcia/vaultwarden/wiki "vaultwarden wiki") 7.6 [Bitwarden 部署和使用](https://host.bitwarden.in/ "Bitwarden 部署和使用") 这篇文章不仅是部署,还有其它方面,写的很全面。 #八、天下文章一大抄 我有点怀念Docker了,毕竟文档多。我对Docker的认知确实是片面的。 标签: bitwarden, vaultwarden, bitwarden_rs, rust