From 8bf83d7a27c08599820f145c073d979744b81c63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isma=C3=ABl=20Bouya?= Date: Thu, 13 Feb 2020 13:07:06 +0100 Subject: Add rsync backup via dilion --- modules/private/system/dilion.nix | 25 +++++++++++++++++++++++++ modules/private/system/eldiron.nix | 19 ++++++++++++++++++- 2 files changed, 43 insertions(+), 1 deletion(-) (limited to 'modules/private') diff --git a/modules/private/system/dilion.nix b/modules/private/system/dilion.nix index 258506b..dbfd38f 100644 --- a/modules/private/system/dilion.nix +++ b/modules/private/system/dilion.nix @@ -41,6 +41,31 @@ programs.zsh.enable = true; + users.users.backup = { + home = "/var/lib/backup"; + createHome = true; + hashedPassword = "!"; + isSystemUser = true; + shell = pkgs.bashInteractive; + openssh.authorizedKeys.keys = let + in + ["command=\"${pkgs.rrsync_sudo}/bin/rrsync /var/lib/backup/eldiron/\" ${config.myEnv.rsync_backup.ssh_key.public}"]; + }; + security.sudo.extraRules = [ + { + commands = [ + { command = "${pkgs.rsync}/bin/rsync"; options = [ "NOPASSWD" ]; } + ]; + users = [ "backup" ]; + runAs = "root"; + } + ]; + + system.activationScripts.backup_home = '' + chown root:root /var/lib/backup + install -m 0750 -o backup -g root -d /var/lib/backup/eldiron + ''; + time.timeZone = "Europe/Paris"; nix = { useSandbox = "relaxed"; diff --git a/modules/private/system/eldiron.nix b/modules/private/system/eldiron.nix index 5e3d45c..ab48ab4 100644 --- a/modules/private/system/eldiron.nix +++ b/modules/private/system/eldiron.nix @@ -39,6 +39,23 @@ services.duplyBackup.enable = true; services.duplyBackup.profiles.oldies.rootDir = "/var/lib/oldies"; + secrets.keys = [ + { + dest = "rsync_backup/identity"; + user = "root"; + group = "root"; + permissions = "0400"; + text = config.myEnv.rsync_backup.ssh_key.private; + } + ]; + programs.ssh.knownHosts.dilion = { + hostNames = ["dilion.immae.eu"]; + publicKey = let + profile = config.myEnv.rsync_backup.profiles.dilion; + in + "${profile.host_key_type} ${profile.host_key}"; + }; + deployment = { targetEnv = "hetzner"; hetzner = { @@ -65,7 +82,7 @@ systemCronJobs = [ '' # The star after /var/lib/* avoids deleting all folders in case of problem - 0 3,9,15,21 * * * root rsync -e "ssh -i /root/.ssh/id_charon_vpn" --new-compress -aAXv --delete --numeric-ids --super --rsync-path="sudo rsync" /var/lib/* immae@immae.eu: > /dev/null + 0 3,9,15,21 * * * root rsync -e "ssh -i /var/secrets/rsync_backup/identity" --new-compress -aAXv --delete --numeric-ids --super --rsync-path="sudo rsync" /var/lib/* backup@dilion.immae.eu: > /dev/null 0 0 * * * root journalctl -q --since="25 hours ago" -u postfix -g "immae.eu.*Recipient address rejected" '' ]; -- cgit v1.2.3