aboutsummaryrefslogtreecommitdiff
path: root/hosts/tower
diff options
context:
space:
mode:
authorIsabella Bastaja <isabella@sorre.xyz>2026-08-22 11:36:28 +0200
committerIsabella Bastaja <isabella@sorre.xyz>2026-08-22 12:30:43 +0200
commitc042ef7ec6857092ae0281f49b65fef54761a0fa (patch)
tree7f400f30f21d29153b8caf7a2f2f9aebe6f7f588 /hosts/tower
parent9cb19e49d18815146629f811c2581414f83a7cc0 (diff)
harden vaultwarden backup service
Diffstat (limited to 'hosts/tower')
-rw-r--r--hosts/tower/web/vaultwarden.nix41
1 files changed, 32 insertions, 9 deletions
diff --git a/hosts/tower/web/vaultwarden.nix b/hosts/tower/web/vaultwarden.nix
index c277d65..d356e36 100644
--- a/hosts/tower/web/vaultwarden.nix
+++ b/hosts/tower/web/vaultwarden.nix
@@ -32,28 +32,51 @@ in
};
systemd.services.backup-vaultwarden = lib.mkIf cfg.enable {
- serviceConfig.Type = "oneshot";
+ serviceConfig = {
+ Type = "exec";
+ User = config.systemd.services.vaultwarden.serviceConfig.User;
+ Group = config.systemd.services.vaultwarden.serviceConfig.Group;
+ StateDirectory = "backups/vaultwarden";
+ StateDirectoryMode = "0700";
+ Umask = "077";
+ };
description = "Back up vaultwarden data";
conflicts = [ "vaultwarden.service" ];
- path = [
- pkgs.gnutar
- pkgs.systemdMinimal
- ];
+ path = [ pkgs.gnutar ];
enableStrictShellChecks = true;
script = ''
#!/usr/bin/env bash
set -euo pipefail
- [ ! -d /var/lib/backup/vaultwarden ] && mkdir -p /var/lib/backup/vaultwarden
TIMESTAMP="$(date +%Y%m%d%H%M%S)"
- tar cvf "/var/lib/backup/vaultwarden/$TIMESTAMP.backup.tar" /var/lib/vaultwarden
+ BACKUP_PATH="$STATE_DIRECTORY/$TIMESTAMP.backup.tar"
+ echo "Backing up Vaultwarden to $BACKUP_PATH" >&2
- find /var/lib/backup/vaultwarden -type f -name '*.backup.tar' -print0 |
+ tar cf "$BACKUP_PATH" /var/lib/vaultwarden
+ chmod u=r,go-rwx "$BACKUP_PATH"
+
+ find "$STATE_DIRECTORY" -type f -name '*.backup.tar' -print0 |
sort --zero-terminated --reverse |
tail --zero-terminated --lines=+6 |
xargs --null --no-run-if-empty rm --
'';
- postStop = "systemctl start vaultwarden.service";
+ };
+
+ # See: https://unix.stackexchange.com/a/804263
+ systemd.services.backup-vaultwarden-restart-service = {
+ unitConfig = {
+ StopPropagatedFrom = "backup-vaultwarden.service";
+ Before = "backup-vaultwarden.service";
+ User = "root";
+ };
+ path = [ pkgs.systemdMinimal ];
+ serviceConfig = {
+ Type = "oneshot";
+ User = "root";
+ RemainAfterExit = true;
+ ExecStop = "systemctl start vaultwarden.service";
+ };
+ wantedBy = [ "backup-vaultwarden.service" ];
};
systemd.timers.backup-vaultwarden = {