From 46c212fee8c19f2903a9dd04fbd1ed940a194449 Mon Sep 17 00:00:00 2001 From: Christoph Date: Wed, 30 Sep 2026 16:02:36 +0200 Subject: [PATCH] Adjust readme's for 'Bad-Signature-Toolkit'. Rename markdown file. --- README_Bad-Signature-Toolkit.docx | Bin 14560 -> 16315 bytes README.md => README_Bad-Signature-Toolkit.md | 104 +++++++++++++++++-- 2 files changed, 95 insertions(+), 9 deletions(-) rename README.md => README_Bad-Signature-Toolkit.md (66%) diff --git a/README_Bad-Signature-Toolkit.docx b/README_Bad-Signature-Toolkit.docx index a9a16ce461611e5b8ee451c31fd6c8bdd21c3d68..2c1ae27f0c66da8090ff55aaa23a30dd1235c4a2 100644 GIT binary patch delta 9430 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 Papierkorb) +1. scan_bad_signature.sh Betroffene Dateien FINDEN (read-only) +2. recover_bad_signature.sh Dateien probeweise ENTSCHLÜSSELN (read-only, + schreibt nur außerhalb von Nextcloud) +3. restore_bad_signature.sh Geprüfte Dateien ZURÜCKSCHREIBEN (live-Schreibzugriff) +4. recreate_bad_signature.sh Fallback für die Fälle, die (3) (live-Schreibzugriff, + nicht reparieren kann bricht Freigaben!) +5. delete_bad_signature.sh Nicht rettbare Dateien LÖSCHEN (Dateisystem-Bypass + + (letzter Ausweg nach 3 und 4) direktes DB-Cleanup, + kein Papierkorb!) + delete_files.sh Explizite Dateiliste LÖSCHEN (live-Schreibzugriff, + (unabhängig vom obigen Ablauf) -> Papierkorb) ``` Jeder Schritt liest den Report des vorherigen Schritts. Reports landen @@ -158,6 +161,83 @@ bei restore. --- +## 5. `delete_bad_signature.sh` – Letzter Ausweg für nicht rettbare Dateien + +Für Dateien, bei denen weder `restore_bad_signature.sh` noch +`recreate_bad_signature.sh` geholfen hat und die **nicht mehr +erhaltenswert sind**: löscht sie vollständig, indem die +Verschlüsselungsschicht vollständig umgangen wird. + +**Hintergrund:** Dateien mit kaputten Signaturen können nicht über die +normale Nextcloud-API oder WebDAV gelöscht werden – auch ein normaler +`rm` im Dateisystem reicht nicht, weil der Filecache-Eintrag in der +Datenbank bestehen bleibt und Nextcloud die Datei weiterhin anzeigt. +Außerdem blockieren solche Dateien die Archiv-/Download-Funktion +(Nextcloud wirft bei jedem Versuch, sie einzuschließen, eine +`DecryptionFailedException`). Dieses Script erledigt daher drei Dinge: + +1. Rohen Chiffretext per `rm -f` vom Dateisystem entfernen +2. Schlüsselmaterial-Verzeichnis per `rm -rf` entfernen +3. Filecache-Eintrag, Freigabe-Einträge und Sperren direkt per + MySQL-Abfragen aus der Datenbank löschen + +Das Script benötigt **kein** `INSTALL_DIR`, `HTTP_USER` oder PHP – +das Datenbank-Cleanup erfolgt direkt über den MySQL-Client. + +**Standardverhalten (sicher):** Alle `recreate__*.tsv`-Reports +im `reports/`-Verzeichnis werden automatisch ausgewertet. Dateien, die +dort bereits als `OK` oder `WRITTEN_UNVERIFIED` stehen (erfolgreich +wiederhergestellt), werden **nicht** gelöscht. So werden nur Dateien +entfernt, die tatsächlich nicht gerettet werden konnten. + +**`DATA_DIR`-Erkennung:** Wenn `DATA_DIR` in der conf-Datei nicht +gesetzt ist, versucht das Script es automatisch aus `WEB_BASE_DIR/data` +oder `/var/www//data` abzuleiten – mit interaktiver +Bestätigung, bevor fortgefahren wird. + +```bash +./delete_bad_signature.sh -s +# oder ganz ohne Parameter - Website wird interaktiv abgefragt: +./delete_bad_signature.sh + +# Dry-Run: zeigt, was gelöscht würde, ohne etwas zu verändern: +./delete_bad_signature.sh -n -s + +# Alle kaputten Signaturdateien löschen, auch bereits recreatete +# (Vorsicht!): +./delete_bad_signature.sh -a -s + +# Zusätzlichen recreate-Report für den Ausschluss angeben: +./delete_bad_signature.sh -x reports/recreate__.tsv -s +``` + +**Pflicht-Variablen in der conf-Datei:** + +| Variable | Beschreibung | +|---|---| +| `DATABASE_NAME` | Name der Nextcloud-Datenbank | +| `DATABASE_TYPE` | Muss `mysql` sein (PostgreSQL noch nicht unterstützt) | +| `MYSQL_CREDENTIALS` | MySQL-Client-Argumente, z. B. `-u root -S /run/mysqld/mysqld.sock` | + +**Optionale Variablen (werden auto-erkannt oder haben Defaults):** + +| Variable | Beschreibung | Default | +|---|---|---| +| `DATA_DIR` | Nextcloud-Datenverzeichnis | auto-erkannt aus `WEB_BASE_DIR/data` oder `/var/www//data` | +| `WEB_BASE_DIR` | Nextcloud-Webroot | – | +| `DB_TABLE_PREFIX` | Datenbank-Tabellenpräfix | `oc_` | +| `DELETE_BACKUP_BASE_DIR` | Backup-Verzeichnis vor dem Löschen | ein Verzeichnis über `DATA_DIR` | + +⚠️ **Kein Papierkorb.** Die Dateien werden unwiderruflich entfernt – +lediglich ein Backup des Chiffretexts und des Schlüssel-Verzeichnisses +wird unter `DELETE_BACKUP_BASE_DIR` angelegt, bevor gelöscht wird. Das +ermöglicht ein manuelles Wiederherstellen auf Dateisystem-Ebene, aber +kein automatisches "Rückgängig" innerhalb von Nextcloud. + +→ Ergebnis: `reports/delete__.tsv` + +--- + ## `delete_files.sh` – Gezielt nicht benötigte Dateien löschen Generisches, von Account und Site unabhängiges Script für den zweiten @@ -204,6 +284,10 @@ Fehler. # nur bei einzelnen WRITE_ERROR mit Schlüsselmaterial-Fehler nötig: ./recreate_bad_signature.sh -s cloud-01.oopen.de +# letzter Ausweg: nicht rettbare Dateien bereinigen +# (schließt automatisch alle erfolgreich recreateten aus): +./delete_bad_signature.sh -s cloud-01.oopen.de + # optional: von Hand geprüfte, nicht erhaltenswerte Dateien entfernen ./delete_files.sh -s cloud-01.oopen.de -f nicht_benoetigt.txt @@ -218,6 +302,7 @@ Fehler. | Recovery-Kopien (unverschlüsselt!) | `/var/nc-recovery/` | `RECOVERY_BASE_DIR` | | Backup vor restore-Überschreiben | `/var/nc-restore-backup/` | `RESTORE_BACKUP_BASE_DIR` | | Backup vor recreate-Löschen | `/var/nc-recreate-backup/` | `RECREATE_BACKUP_BASE_DIR` | +| Backup vor delete_bad_sig.-Löschen | ein Verzeichnis über `DATA_DIR` | `DELETE_BACKUP_BASE_DIR` | | Backup vor delete_files-Löschen | `/var/nc-delete-backup/` | `DELETE_BACKUP_BASE_DIR` | | Reports aller Scripte | `reports/` (neben den Scripten) | – | @@ -241,6 +326,7 @@ Instanzen). | `recover_bad_signature.sh` | Website | `-V` nur revalidieren | | `restore_bad_signature.sh` | Website | `-n` Dry-Run erzwingen | | `recreate_bad_signature.sh` | Website | `-n` Dry-Run erzwingen · `-f` Dateien mit aktiven Freigaben einschließen | +| `delete_bad_signature.sh` | Website | `-n` Dry-Run erzwingen · `-a` alle löschen (auch recreatete) · `-x ` zusätzlichen recreate-Report für Ausschluss angeben | | `delete_files.sh` | Website | `-n` Dry-Run erzwingen · `-f ` Pfadliste (ohne Angabe interaktiv abgefragt) | `-h` zeigt bei jedem Script die ausführliche Hilfe.