ci / lint-test-leaks (pull_request) Canceled after 0s
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.
1.9 KiB
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; artefactos640.
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.