Harden remote verification against environment overrides and marker normalization
This commit is contained in:
1 parent
0ec0d3b194
commit
3374019ad6
6 files changed
+248
-8
No files matched your search
+56
-3
@@ -181,6 +181,56 @@ sudo rclone --config /root/.config/rclone/rclone.conf lsd OneDriveCrypt:
|
||||
|
||||
`rclone check --download` vergleicht die heruntergeladenen Inhalte und benötigt keinen gemeinsamen Backend-Hash. Es verändert die geprüften Dateien nicht. Das Paket verwendet es vor dem abschließenden Marker. Quelle: [rclone check](https://rclone.org/commands/rclone_check/).
|
||||
|
||||
Exportierte `RCLONE_*`-Variablen sind ausschließlich für die vom Paket ausdrücklich
|
||||
unterstützten Einstellungen und `RCLONE_CONFIG_PASS` erlaubt. Andere Optionen
|
||||
werden vor dem ersten rclone-Aufruf und vor dem Writer-Stopp mit ihrem Namen,
|
||||
ohne ihren Wert, abgewiesen. Insbesondere kann `RCLONE_SIZE_ONLY=true` in rclone
|
||||
auch bei `check --download` den Inhaltsvergleich überspringen. Ein Regressionstest
|
||||
hat diesen Fehler vor der Härtung mit einer veränderten Remote-Datei gleicher Größe
|
||||
reproduziert. Zusätzliche Filter, Dry-run- und TLS-Overrides aus der Umgebung werden
|
||||
ebenfalls abgewiesen. Einstellungen über die dokumentierte Backup-Konfiguration
|
||||
und Remote-Definitionen verwalten; eine absichtlich manipulierte root-eigene
|
||||
Bash-Konfiguration liegt außerhalb dieser Absicherung.
|
||||
Quelle: [rclone 1.74.3 Inhaltsprüfung](https://github.com/rclone/rclone/blob/v1.74.3/fs/operations/check.go).
|
||||
|
||||
### Upload-Fehlerbehandlung und Betriebsgrenzen
|
||||
|
||||
| Ereignis | Verhalten und Konsequenz |
|
||||
| --- | --- |
|
||||
| Vorübergehender Upload-Fehler | rclone wiederholt den Kopierauftrag bis zu `RCLONE_RETRIES=6` Versuche, soweit der Fehler wiederholbar ist; Wartezeit standardmäßig `RCLONE_RETRIES_SLEEP=30s`, zusätzlich gegebenenfalls Provider-Backoff. Kein erneuter DB-Dump oder Writer-Stopp innerhalb dieser Versuche. |
|
||||
| Upload endgültig fehlgeschlagen | Fehlerexit; lokaler vollständiger Satz und Staging bleiben erhalten; kein neuer Remote-Abschlussmarker und keine Retention in diesem Lauf. |
|
||||
| Rückleseprüfung findet andere oder fehlende Inhalte | Fehlerexit; keine Veröffentlichung des Abschlussmarkers. Auch gleich große Dateien werden inhaltlich verglichen. |
|
||||
| Abschlussmarker kann nicht geschrieben oder bestätigt werden | Fehlerexit; kein lokales `UPLOADED`, kein neuer Erfolgsstatus, keine Retention. Der Vergleich prüft die exakten Bytes einschließlich abschließender Zeilenumbrüche, passend zum strikten Restore-Parser. Ist der Marker schon geschrieben und nur seine Bestätigung fehlgeschlagen, kann der Remote-Satz vollständig vorliegen; der Lauf meldet konservativ trotzdem einen Fehler. |
|
||||
| Wiederholungen erfolgreich und Rücklesen bestanden | Remote-Marker wird zuletzt geschrieben und zurückgelesen; erst danach gilt der Upload als erfolgreich. Ein früheres `ERROR` im Log allein ist kein Endergebnis. |
|
||||
| Prozess hängt oder wird abgebrochen | systemd begrenzt den regulären Backup-Dienst auf 12 Stunden, den Update-Auftrag auf 24 Stunden, mit 5 Minuten Stop-Frist. Direkte CLI-/Foreground-Aufrufe besitzen diese systemd-Gesamtfrist nicht. |
|
||||
|
||||
HTTP 409 benötigt nach dem beobachteten erfolgreichen Wiederholungsversuch keinen
|
||||
zusätzlichen allgemeinen Retry-Wrapper. Dieser würde Versuche vervielfachen und
|
||||
dauerhafte Fehler länger verdecken. Der Auslöser des OneDrive-Konflikts bleibt
|
||||
unbekannt. Häufen sich Konflikte, den betroffenen Objektnamen, Zeitpunkte, rclone-Version,
|
||||
andere Zugriffe auf den Backup-Ordner und die vollständigen Versuchsergebnisse prüfen.
|
||||
Keine automatischen Remote-Löschungen oder Überschreibungen zur Konfliktbehebung.
|
||||
`--immutable` schützt vor Änderungen durch diesen Kopierauftrag, ist aber kein
|
||||
serverseitiger WORM-/Ransomware-Schutz gegen andere berechtigte Zugriffe.
|
||||
|
||||
Die sechs Gesamtversuche gelten nicht pauschal für jeden rclone-Befehl:
|
||||
`check --download` verwendet in rclone 1.74.3 keine Wiederholung des ganzen Befehls,
|
||||
jedoch Wiederholungen fehlgeschlagener Datei-Leseoperationen. Ein verbleibender
|
||||
Prüffehler beendet das Backup sichtbar. Quellen:
|
||||
[Kopierversuche](https://github.com/rclone/rclone/blob/v1.74.3/cmd/cmd.go),
|
||||
[Check-Aufruf](https://github.com/rclone/rclone/blob/v1.74.3/cmd/check/check.go),
|
||||
[Immutable](https://rclone.org/docs/#immutable).
|
||||
|
||||
Ein automatischer späterer Upload eines bereits lokal gesicherten, aber nicht
|
||||
veröffentlichten Satzes ist bislang nicht implementiert. Nach ausgeschöpften
|
||||
Versuchen bleibt er zur gezielten Prüfung erhalten; der nächste Timer-Lauf
|
||||
erstellt einen neuen Satz. Wiederholte Fehler können deshalb lokalen Speicher
|
||||
belegen. Erfolgsalter, Fehlerexit, Speicher und Recovery-Dateien unabhängig
|
||||
überwachen; eine erfolgreiche Mailübergabe an den lokalen Mailserver beweist noch
|
||||
keine Zustellung. Eine fachliche Restore-Probe und separat gesicherte Zugangsdaten
|
||||
sind weiterhin erforderlich. Der erfolgreiche Paketlauf allein rechtfertigt keine
|
||||
uneingeschränkte Zusage für beliebige Serverkonfigurationen oder Katastrophenfälle.
|
||||
|
||||
### Datenbanken und Writer
|
||||
|
||||
Es wird je aktivierter Anwendung ein Dump benötigt, sofern `ENABLE_DB_DUMPS=true`. Fehlende DB-Namen oder CNF-Dateien brechen ab. Der Dump enthält Routinen, Events, Trigger und Binärdaten. Leere Ausgaben sowie Fehler beim Schreiben werden abgelehnt.
|
||||
@@ -298,7 +348,7 @@ sudo cat /var/backups/app-backup/last-successful-backup.json
|
||||
systemctl list-timers app-backup.timer
|
||||
```
|
||||
|
||||
Exit `0` bedeutet, dass die ausgeführten erforderlichen Schritte erfolgreich waren. Jeder Fehlercode ist ein Fehler; `130`/`143` kennzeichnen INT/TERM. `last-backup.json` zeigt den letzten gestarteten operativen Lauf, `last-successful-backup.json` wird ausschließlich nach einem vollständig erfolgreichen Backup aktualisiert. `--check` aktualisiert diese Erfolgsmarkierung nicht. Sehr frühe Fehler vor der Laufinitialisierung/Sperrübernahme können nur auf stderr bzw. im Journal erscheinen; deshalb sowohl Servicefehler als auch Alter des letzten Erfolgs überwachen.
|
||||
Exit `0` bedeutet, dass die ausgeführten erforderlichen Schritte erfolgreich waren. Jeder Fehlercode ist ein Fehler; `130`/`143` kennzeichnen INT/TERM. `last-backup.json` wird beim Beenden geschrieben und zeigt während eines laufenden Backups noch den vorherigen beendeten Lauf. `last-successful-backup.json` wird ausschließlich nach einem vollständig erfolgreichen Backup aktualisiert. `--check` aktualisiert diese Erfolgsmarkierung nicht. Sehr frühe Fehler vor der Laufinitialisierung/Sperrübernahme können nur auf stderr bzw. im Journal erscheinen; deshalb sowohl Servicefehler als auch Alter des letzten Erfolgs überwachen. Bei `ENABLE_UPLOAD=false` belegt ein Erfolg nur eine lokale Sicherung; für Offsite-Überwachung zusätzlich die Upload-Konfiguration und `UPLOADED` des gemeldeten Satzes berücksichtigen.
|
||||
|
||||
Für den täglichen Zeitplan z. B. bei mehr als 36 Stunden ohne erfolgreichen Lauf alarmieren, zusätzlich freien Speicher, offene Recovery-Dateien und wachsende Partial-Verzeichnisse prüfen. Diese Überwachung läuft idealerweise außerhalb des gesicherten Servers. `TimeoutStartSec=12h` und `TimeoutStopSec=5min` sind Ausgangswerte und müssen zum ersten gemessenen Vollbackup plus Rückleseprüfung passen.
|
||||
|
||||
@@ -433,12 +483,15 @@ Die Entfernung der drei DB-Dateien aus dem aktuellen Baum löscht deren Historie
|
||||
|
||||
Reproduzierbar mit `tests/Dockerfile` und `tests/run.sh`. Der Container bekommt das Repository nur lesbar und benötigt während der Tests kein Netzwerk. Die MariaDB läuft ohne TCP-Port in einem temporären Verzeichnis. systemd/occ werden simuliert; alle eigentlichen Archive, Dateikopien, Dumps/Imports und Crypt-Operationen sind real.
|
||||
|
||||
Verifikation am 10.09.2026: **52 Testfälle erfolgreich** — 50 im vollständigen Durchlauf, anschließend beide zusätzlichen Abbruchtests für Kopie und Upload auf dem ergänzten Stand. Shell-Syntax und ShellCheck abschließend ohne Befund. Testumgebung: Debian 13.6, MariaDB 11.8.6, rclone 1.60.1-DEV (Distributionspaket), ShellCheck 0.10.0. Diese Versionsangaben beschreiben die Testumgebung, keine Empfehlung für die Produktivversion.
|
||||
Verifikation am 10.09.2026: **59 Testfälle erfolgreich** — 58 im vollständigen Durchlauf (524,6 Sekunden), dazu der ergänzte Test für zusätzliche Marker-Zeilenumbrüche. Die vier betroffenen Markertests und der echte Crypt-Upload mit Remote-Restore wurden nach der Marker-Korrektur nochmals gezielt erfolgreich ausgeführt. Shell-Syntax und ShellCheck ohne Befund. Testumgebung: Debian 13.6, MariaDB 11.8.6, rclone 1.60.1-DEV (Distributionspaket), ShellCheck 0.10.0. Diese Versionsangaben beschreiben die Testumgebung, keine Empfehlung für die Produktivversion.
|
||||
|
||||
Für die anschließende Ergänzung der Upload-Statistiken wurden drei betroffene Tests erneut erfolgreich ausgeführt: echter gedrosselter Crypt-Upload samt Remote-Restore, fehlgeschlagene Rückleseprüfung ohne Remote-Abschlussmarker und TERM während eines Uploads mit gestoppt bleibendem Timer. Shell-Syntax und ShellCheck bestanden ebenfalls erneut. Der vollständige 52-Fälle-Umfang wurde für diese Protokollergänzung nicht nochmals durchlaufen.
|
||||
Die Regressionstests für `RCLONE_SIZE_ONLY` und zusätzliche Marker-Zeilenumbrüche scheiterten vor den jeweiligen Korrekturen mit einem fälschlich erfolgreichen Backup und bestanden danach. Upload-/Markerfehler werden an den Befehlsgrenzen injiziert, während Crypt-Übertragung und Inhaltsvergleich real bleiben. Die Tests bilden keine OneDrive-API nach; das tatsächliche HTTP-409-Wiederholungsverhalten ist durch den Betreiberlauf und den rclone-1.74.3-Quellcode separat belegt.
|
||||
|
||||
Geprüfte Fälle umfassen:
|
||||
|
||||
- Endgültiger Upload-Fehler trotz bereits übertragener Bytes: vollständiger lokaler Satz, vorheriger Erfolgsstatus und alte lokale/entfernte Retention-Kandidaten bleiben erhalten.
|
||||
- Veränderte Remote-Datei gleicher Größe, Marker-Schreibfehler, abweichender Marker-Inhalt und zusätzliche Zeilenumbrüche verhindern den lokalen Upload-Erfolg und die Retention.
|
||||
- Nicht unterstützte rclone-Umgebungsoptionen werden vor Remote-Zugriff und Writer-Stopp abgewiesen; unterstützte exportierte Einstellungen bleiben nutzbar.
|
||||
- Periodische NOTICE-Statistiken bei gedrosseltem echten Crypt-Upload, erfolgreicher Rückleseprüfung und Remote-Restore; die Statistik verändert den maschinell gelesenen Abschlussmarker nicht.
|
||||
- Fremde Startversuche während realer rsync-Kopien werden durch das systemd-Testmodell übersprungen; zuvor inaktive Writer bleiben nach dem Lauf inaktiv.
|
||||
- Aktive sowie zwischenzeitlich gestartete und wieder gestoppte Writer verhindern die Veröffentlichung eines vollständigen Satzes.
|
||||
|
||||
Reference in new issue
Block a user