host(koumakan): set up a backup user

Changed files
+59 -1
creds
ssh
users
systems
koumakan
services
+1
creds/ssh/users/backup
···
+
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKU8Vxg12sa9HmupfMYGQV/4aK4kHlcD66JolpCJeGzv
+1 -1
creds/ssh/users/cassie
···
# SmartCards
# ssh-keygen -t ed25519-sk -C "YubiKey #${invalid:?gock}" -O{resident,verify-required}
# -> To obtain resident keys, use ssh-keygen -K
-
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJxpXpPlPEZPfnw2mIuWJEy/C/5h1bb6pIMeFsHAICQ+lLdEkbBSeDXQuA8feLN0MJw8KaB9jqrJbYgFadV/nVA= YubiKey #19302295 PIV Slot 9a
+
#ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJxpXpPlPEZPfnw2mIuWJEy/C/5h1bb6pIMeFsHAICQ+lLdEkbBSeDXQuA8feLN0MJw8KaB9jqrJbYgFadV/nVA= YubiKey #19302295 PIV Slot 9a
sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIEP1oum6r6bTb4My/ZRqhVWxYKYGEqDyijUqqL1ZCIWjAAAABHNzaDo= YubiKey #13901056
sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAILJ3mxaweLrFL//bYIJvE1XVmjQf2Dq/CjKIPkIVmDpXAAAABHNzaDo= YubiKey #19302295
+56
systems/koumakan/services/storage/backup.nix
···
+
{
+
lib,
+
pkgs,
+
inputs,
+
...
+
}:
+
{
+
users = {
+
users.backup = {
+
isNormalUser = true;
+
shell = pkgs.bashInteractive;
+
packages = with pkgs; [ rsync ];
+
openssh.authorizedKeys.keyFiles = lib.singleton (inputs.self + "/creds/ssh/users/backup");
+
createHome = false;
+
};
+
+
groups.backup = { };
+
};
+
+
system.activationScripts.initBackupHome = {
+
deps = [ "users" ];
+
supportsDryActivation = false;
+
text = ''
+
if test ! -e /home/backup; then
+
${lib.getExe pkgs.btrfs-progs} subvolume create /home/backup
+
fi
+
+
chmod 0550 /home/backup
+
install -dm755 /home/backup/public
+
install -dm700 /home/backup/private
+
'';
+
};
+
+
systemd = {
+
services."snapshot-backup" = {
+
script = ''
+
NOW=$(date -u +%Y%m%d.%H%M%S)
+
DATA_PATH=/home/backup/public
+
+
mkdir -p ''${DATA_PATH}/snapshots
+
btrfs subvolume snapshot -r $DATA_PATH ''${DATA_PATH}/snapshots/''${NOW}
+
'';
+
serviceConfig.User = "backup";
+
};
+
+
timers."snapshot-backup" = {
+
wantedBy = lib.singleton "multi-user.target";
+
timerConfig = {
+
OnCalendar = "*:0";
+
RandomizedDelaySec = "60s";
+
AccuracySec = "1us";
+
};
+
unitConfig.RequiresMountsFor = "/home";
+
};
+
};
+
}
+1
systems/koumakan/services/storage/default.nix
···
imports = [
./atuin.nix
./wastebin.nix
+
./backup.nix
./zipline.nix
];
}