Vaultwarden Wiki 中文版
⮐ Vaultwarden Wiki个人主页联系我
  • 关于
  • 首页
  • FAQ
    • 1.FAQ
    • 2.审计
    • 故障排除
      • 1.Bitwarden Android 故障排除
  • 容器镜像的使用
    • 1.容器镜像的选择
    • 2.启动容器
    • 3.更新 Vaultwarden 镜像
    • 4.使用 Docker Compose
    • 5.使用 Podman
  • 部署
    • 1.构建您自己的镜像
    • 2.构建二进制
    • 3.预构建二进制
    • 4.第三方包
    • 5.部署示例
    • 6.代理示例
    • 7.转储示例
    • HTTPS
      • 1.启用 HTTPS
      • 2.使用 Let's Encrypt 证书运行私有 Vaultwarden 实例
  • 配置
    • 1.配置概述
    • 2.禁用新用户注册
    • 3.禁用邀请
    • 4.启用管理页面
    • 5.禁用管理令牌
    • 6.启用 WebSocket 通知
    • 7.启用移动客户端推送通知
    • 8.启用 U2F 和 FIDO2 WebAuthn 身份验证
    • 9.启用 YubiKey OTP 身份验证
    • 10.更改持久性数据位置
    • 11.更改 API 请求大小限制
    • 12.更改 worker 数量
    • 13.SMTP 配置
    • 14.显示密码提示
    • 15.禁用或覆盖密码库接口托管
    • 16.日志记录
    • 17.设置为 systemd 服务
    • 18.从 LDAP 同步用户
    • 19.使用备用基本目录(子目录/子路径)
    • 20.其他配置
    • *使用 systemd docker 运行
    • 数据库
      • 1.使用 MariaDB (MySQL) 后端
      • 2.使用 PostgreSQL 后端
      • 3.在未启用 WAL 的情况下运行
      • 4.从 MariaDB (MySQL) 迁移到 SQLite
    • 安全
      • 1.强化指南
      • 2.Fail2ban 设置
      • 3.Docker Traefik ModSecurity 设置
    • 其他
      • 1.翻译电子邮件模板
      • 2.翻译管理页面
      • 3.自定义 Vaultwarden CSS
  • 备份
    • 1.通用(非 docker)
  • 其他
    • 1.从 Keepass 或 KeepassX 导入数据
    • 2.备份您的密码库
    • 3.与上游 API 实现的区别
    • 4.支持上游的发展
    • 5.使用 Cloudflare DNS 的 Caddy 2.x
    • 6.Git hooks
    • *使用非 root 用户运行 docker 容器
    • *使私有 CA 和自签名证书兼容 Chrome
    • *测试 SSO
由 GitBook 提供支持
在本页
  • 设置
  • 用法
  • 更新 Vaultwarden
  • 卸载 Vaultwarden
  • 查看日志和状态
  • 故障排除
  • 旧版 systemd 的沙盒选项
  • 服务无法启动
  • 环境变量未被加载
  • 更多信息
  1. 配置

17.设置为 systemd 服务

上一页16.日志记录下一页18.从 LDAP 同步用户

最后更新于1个月前

对应的

这部分的内容要求您已经。如果您已生成了 docker 镜像,则需要查看。

设置

要使 Vaultwarden 在系统启动的时候启动并使用 systemd 的其他功能(例如,隔离、日志记录等),则需要一个 .service 文件。以下是一个可行的起点:

[Unit]
Description=Vaultwarden Server (Rust Edition)
Documentation=https://github.com/dani-garcia/vaultwarden
# 如果您使用 mariadb、mysql 或 postgresql 数据库, 
# 您必须像下面这样添加它们,并去掉前面的 # 以取消注释。
# 这将确保您的数据库服务器在 Vaultwarden 之前启动 ("After"),
# 并且在启动 Vaultwarden 之前成功启动 ("Requires")。

# 仅 sqlite
After=network.target

# MariaDB
# After=network.target mariadb.service
# Requires=mariadb.service

# Mysql
# After=network.target mysqld.service
# Requires=mysqld.service

# PostgreSQL
# After=network.target postgresql.service
# Requires=postgresql.service


[Service]
# 设置 Vaultwarden 用户/群组。此用户/群组对工作目录(见下文)允许有读写权限
User=vaultwarden
Group=vaultwarden
# 使用环境文件进行配置
EnvironmentFile=/etc/vaultwarden.env
# 已编译的二进制的位置
ExecStart=/usr/bin/vaultwarden
# 设置合理的连接和进程限制
LimitNOFILE=1048576
LimitNPROC=64
# 将 bitwarden_rs 与系统的其他部分隔离开
PrivateTmp=true
PrivateDevices=true
ProtectHome=true
ProtectSystem=strict
# 仅允许对以下目录进行写入,并将其设置为工作目录(用户和密码数据存储在这里)
WorkingDirectory=/var/lib/vaultwarden
ReadWritePaths=/var/lib/vaultwarden

[Install]
WantedBy=multi-user.target

更改以上所有路径以匹配您的安装(WorkingDirectory 与 ReadWritePaths 应相同),将此文件命名为 vaultwarden.service 并将其放入 /etc/systemd/system 中。

如果必须更改现有(而不是像上面那样新建)的 systemd 文件(您安装的软件包提供给您的),可以使用下面的命令来添加更改:

$ sudo systemctl edit vaultwarden.service

请运行以下命令,以让 systemd 知道您的新文件或您所做的任何更改:

$ sudo systemctl daemon-reload

用法

要启动此「服务」,请运行:

$ sudo systemctl start vaultwarden.service

要启用自动启动,请运行:

$ sudo systemctl enable vaultwarden.service

同理,您可以使用 stop、restart 和 disable 来停止、重启或禁用此服务。

更新 Vaultwarden

编译新版本的 Vaultwarden 之后,您可以复制已编译的(新的)二进制文件并替换现有的(旧的)二进制文件,然后重新启动服务:

$ sudo systemctl restart vaultwarden.service

卸载 Vaultwarden

在执行其他操作之前,应先停止并禁用该服务:

$ sudo systemctl disable --now vaultwarden.service

然后,您可以删除二进制、环境文件、web-vault 文件夹(如果已安装)以及用户数据(如果需要)。请记住,还要删除专门创建的用户、群组和防火墙规则(如果需要)和 systemd 文件。

删除 systemd 文件后,您应该通过下面的方式使 systemd 意识到这一点:

$ sudo systemctl daemon-reload

查看日志和状态

如果要查看日志输出,请运行:

$ journalctl -u vaultwarden.service

或查看此服务的更简洁的状态,请运行:

$ systemctl status vaultwarden.service

故障排除

旧版 systemd 的沙盒选项

Failed at step NAMESPACE spawning /home/vaultwarden/vaultwarden: Permission denied

或者:

Failed to parse protect system value

要解决这一点,您可以在包含有 PrivateTmp、PrivateDevices、ProtectHome、ProtectSystem 和 ReadWritePaths 的部分或全部行前面放置 # 符号来将其注释掉。尽管将所有这些行注释掉可能会起作用,但不建议这样做,因为这些都是很好的安全措施。要查看您的 systemd 支持哪些选项,请运行以下命令来查看其输出:

$ systemctl --version

编辑 .service 文件后,请不要忘记在启动(或重启)服务之前运行如下命令:

$ sudo systemctl daemon-reload

服务无法启动

systemd journal (journalctl -eu vaultwarden.service) 中显示以下错误:

Feb 18 05:29:10 staging-bitwarden systemd[1]: Started Vaultwarden Server (Rust Edition).
Feb 18 05:29:10 staging-bitwarden systemd[49506]: vaultwarden.service: Failed to execute command: Resource temporarily unavailable
Feb 18 05:29:10 staging-bitwarden systemd[49506]: vaultwarden.service: Failed at step EXEC spawning /usr/bin/vaultwarden: Resource temporarily unavailable
Feb 18 05:29:10 staging-bitwarden systemd[1]: vaultwarden.service: Main process exited, code=exited, status=203/EXEC
Feb 18 05:29:10 staging-bitwarden systemd[1]: vaultwarden.service: Failed with result 'exit-code'.

已知当 Vaultwarden 在容器(LXC 等)内部或本地运行时,会出现这种情况。服务文件中的参数 LimitNPROC=64 使服务无法启动。注释掉此参数后,服务可以正常启动。

注意:systemd 覆盖文件不起作用,必须注释/删除该行。最简单的方法是通过

# systemctl edit --full vaultwarden.service

然后重新加载守护程序并重新启动。

环境变量未被加载

ROCKET_PORT=8080
WEBSOCKET_ENABLED=true # enable websocket

更多信息

在 RHEL 7(以及 debian 8)中,使用的 systemd 不支持某些隔离选项 (, )。这可能导致出现如下错误:

检查您的 systemd 版本并与 进行比较。

请注意,systemd 不支持 EnvironmentFile=/etc/vaultwarden.env 文件中的注释与变量在同一行中(参阅 )。比如下面这个环境文件示例中,变量 WEBSOCKET_ENABLED 将不会被加载:

如果您想要使用同行注释,请考虑改用 /var/lib/vaultwarden/.env(这也将避免启动时提示 的 INFO 错误)。

有关 .service 文件的更多信息,请参阅 和 (用于安全性配置)手册页。

官方页面地址
编译了 Vaultwarden 二进制
使用 systemd-docker 运行
#445
#363
systemd/NEWS.md
#1607
.env 文件缺失
systemd.service
systemd.exec