backup: backup-pull user — read-only rsync-only SSH access (Tanda B, point 2)
ci / lint-test-leaks (pull_request) Canceled after 0s
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.
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user