Merge PR #14: usuario backup-pull de solo lectura
ci / lint-test-leaks (push) Canceled after 0s
ci / lint-test-leaks (push) Canceled after 0s
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