Files
cayce-ops/deploy/backup/backup-pull-setup.md
cayce fc2dcd4fca
ci / lint-test-leaks (pull_request) Canceled after 0s
backup: backup-pull user — read-only rsync-only SSH access (Tanda B, point 2)
System user backup-pull created on the VPS (no sudo, locked password).
authorized_keys restricted with restrict + forced command
rrsync -ro /var/backups/cayce. Verified with a since-deleted throwaway
key: no shell, no arbitrary commands, no sftp/scp, no reads outside
/var/backups/cayce, no writes; the positive rsync pull works.

authorized_keys is left EMPTY — the operator adds their real key with
the exact line documented in deploy/backup/backup-pull-setup.md.
2026-10-28 21:01:44 +00:00

1.9 KiB

backup-pull — usuario de solo lectura para el pull desde la Mac

La VPS genera los backups cifrados en /var/backups/cayce/YYYY-MM-DD/. La Mac los descarga por rsync con una clave SSH restringida. La VPS nunca tiene credenciales para escribir ni borrar nada fuera de sí misma.

Estado instalado en la VPS

  • Usuario de sistema backup-pull (uid 1001): sin sudo, password bloqueado, home /home/backup-pull, shell /bin/sh (necesario para que sshd ejecute el forced command; la restricción real la pone la clave, no el shell).
  • /home/backup-pull/.ssh/authorized_keys (600, backup-pull:backup-pull) — vacío hasta que el operador añada su clave pública.
  • /var/backups/cayce → root:backup-pull, 750; artefactos 640.

Formato de la línea authorized_keys (una sola línea)

restrict,command="/usr/bin/rrsync -ro /var/backups/cayce" ssh-ed25519 AAAA... comentario

restrict = no-pty, no-port-forwarding, no-agent-forwarding, no-X11-forwarding (y sin sftp). rrsync -ro = solo rsync de LECTURA, confinado a /var/backups/cayce. Añadirla con:

echo 'restrict,command="/usr/bin/rrsync -ro /var/backups/cayce" ssh-ed25519 AAAA... cayce-mac-pull' \
  | sudo tee -a /home/backup-pull/.ssh/authorized_keys

Pull desde la Mac

rsync -av --partial backup-pull@15.235.3.239:/ ~/backups/cayce/

Verificación realizada (2026-10-28, con clave desechada después)

Prueba Resultado
Shell interactivo ✗ rrsync error: Not invoked via sshd
Comando arbitrario (cat /etc/shadow) ✗ SSH_ORIGINAL_COMMAND does not run rsync
rsync de /etc/ ✗ invalid rsync-command syntax or options (fuera del root permitido)
scp/sftp ✗ (restrict)
rsync pull de /var/backups/cayce/ ✓ funciona
rsync write (upload) ✗ protocolo cortado, nada escrito

La clave usada para las pruebas se borró; authorized_keys quedó vacío.