diff --git a/README_Bad-Signature-Toolkit.docx b/README_Bad-Signature-Toolkit.docx index a9a16ce..2c1ae27 100644 Binary files a/README_Bad-Signature-Toolkit.docx and b/README_Bad-Signature-Toolkit.docx differ diff --git a/README.md b/README_Bad-Signature-Toolkit.md similarity index 66% rename from README.md rename to README_Bad-Signature-Toolkit.md index cbcbcb3..355e3f9 100644 --- a/README.md +++ b/README_Bad-Signature-Toolkit.md @@ -11,19 +11,22 @@ konfigurierten Instanzen anhand der `.conf`-Dateien im `conf/`- Verzeichnis neben den Scripten. Gibt es davon **mehrere** (mehrere Nextcloud-Instanzen auf demselben Server), wird interaktiv eine Auswahlliste angezeigt, aus der die gewünschte Website ausgewählt wird. -Das gilt für alle fünf Scripte gleichermaßen. +Das gilt für alle sechs Scripte gleichermaßen. ## Der Ablauf auf einen Blick ``` -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!) - delete_files.sh Explizite Dateiliste LÖSCHEN (live-Schreibzugriff, - (unabhängig vom obigen Ablauf) -> 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.