Compare commits

..
2 Commits
3 changed files with 105 additions and 9 deletions
Binary file not shown.
+87 -1
View File
@@ -11,7 +11,7 @@ konfigurierten Instanzen anhand der `.conf`-Dateien im `conf/`-
Verzeichnis neben den Scripten. Gibt es davon **mehrere** (mehrere Verzeichnis neben den Scripten. Gibt es davon **mehrere** (mehrere
Nextcloud-Instanzen auf demselben Server), wird interaktiv eine Nextcloud-Instanzen auf demselben Server), wird interaktiv eine
Auswahlliste angezeigt, aus der die gewünschte Website ausgewählt wird. 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 ## Der Ablauf auf einen Blick
@@ -22,6 +22,9 @@ Das gilt für alle fünf Scripte gleichermaßen.
3. restore_bad_signature.sh Geprüfte Dateien ZURÜCKSCHREIBEN (live-Schreibzugriff) 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, 4. recreate_bad_signature.sh Fallback für die Fälle, die (3) (live-Schreibzugriff,
nicht reparieren kann bricht Freigaben!) 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, delete_files.sh Explizite Dateiliste LÖSCHEN (live-Schreibzugriff,
(unabhängig vom obigen Ablauf) -> Papierkorb) (unabhängig vom obigen Ablauf) -> Papierkorb)
``` ```
@@ -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_<website>_*.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/<website>/data` abzuleiten – mit interaktiver
Bestätigung, bevor fortgefahren wird.
```bash
./delete_bad_signature.sh -s <website>
# 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 <website>
# Alle kaputten Signaturdateien löschen, auch bereits recreatete
# (Vorsicht!):
./delete_bad_signature.sh -a -s <website>
# Zusätzlichen recreate-Report für den Ausschluss angeben:
./delete_bad_signature.sh -x reports/recreate_<website>_<datum>.tsv -s <website>
```
**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/<website>/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_<website>_<datum>.tsv`
---
## `delete_files.sh` – Gezielt nicht benötigte Dateien löschen ## `delete_files.sh` – Gezielt nicht benötigte Dateien löschen
Generisches, von Account und Site unabhängiges Script für den zweiten 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: # nur bei einzelnen WRITE_ERROR mit Schlüsselmaterial-Fehler nötig:
./recreate_bad_signature.sh -s cloud-01.oopen.de ./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 # optional: von Hand geprüfte, nicht erhaltenswerte Dateien entfernen
./delete_files.sh -s cloud-01.oopen.de -f nicht_benoetigt.txt ./delete_files.sh -s cloud-01.oopen.de -f nicht_benoetigt.txt
@@ -218,6 +302,7 @@ Fehler.
| Recovery-Kopien (unverschlüsselt!) | `/var/nc-recovery/<website>` | `RECOVERY_BASE_DIR` | | Recovery-Kopien (unverschlüsselt!) | `/var/nc-recovery/<website>` | `RECOVERY_BASE_DIR` |
| Backup vor restore-Überschreiben | `/var/nc-restore-backup/<website>` | `RESTORE_BACKUP_BASE_DIR` | | Backup vor restore-Überschreiben | `/var/nc-restore-backup/<website>` | `RESTORE_BACKUP_BASE_DIR` |
| Backup vor recreate-Löschen | `/var/nc-recreate-backup/<website>` | `RECREATE_BACKUP_BASE_DIR` | | Backup vor recreate-Löschen | `/var/nc-recreate-backup/<website>` | `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/<website>` | `DELETE_BACKUP_BASE_DIR` | | Backup vor delete_files-Löschen | `/var/nc-delete-backup/<website>` | `DELETE_BACKUP_BASE_DIR` |
| Reports aller Scripte | `reports/` (neben den Scripten) | – | | Reports aller Scripte | `reports/` (neben den Scripten) | – |
@@ -241,6 +326,7 @@ Instanzen).
| `recover_bad_signature.sh` | Website | `-V` nur revalidieren | | `recover_bad_signature.sh` | Website | `-V` nur revalidieren |
| `restore_bad_signature.sh` | Website | `-n` Dry-Run erzwingen | | `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 | | `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 <report>` zusätzlichen recreate-Report für Ausschluss angeben |
| `delete_files.sh` | Website | `-n` Dry-Run erzwingen · `-f <datei>` Pfadliste (ohne Angabe interaktiv abgefragt) | | `delete_files.sh` | Website | `-n` Dry-Run erzwingen · `-f <datei>` Pfadliste (ohne Angabe interaktiv abgefragt) |
`-h` zeigt bei jedem Script die ausführliche Hilfe. `-h` zeigt bei jedem Script die ausführliche Hilfe.
+10
View File
@@ -141,3 +141,13 @@ PSQL_SERVER=
# - WOPI_URL="https://office-cl.oopen.de" # - WOPI_URL="https://office-cl.oopen.de"
# - # -
#WOPI_URL="" #WOPI_URL=""
# - EO_DocumentServerURL
# -
# - URL to connect Eiuro-Office service
# -
# - Example:
# - EO_DocumentServerURL="https://eo-ds.ndnaht.de"
# -
#EO_DocumentServerURL=""