Zum Hauptinhalt springen

Dateien

Dateimanager für Freigaben, Datasets und /appdata: Hochladen, Herunterladen, Umbenennen, Verschieben, Kopieren, Löschen, Besitzer und Rechte.

Die Seite Dateien arbeitet direkt auf dem Dateisystem des NAS, als root. Sie ist für Verwaltungsaufgaben gedacht (Ordner anlegen, Rechte reparieren, eine Datei schnell hoch- oder herunterladen); für die tägliche Arbeit mit vielen Dateien sind die SMB- und NFS-Freigaben besser geeignet.

Ablageorte​

Oben links wählst du den Ablageort. Angeboten werden nur:

ArtHerkunft
Apps/appdata (die App-Verzeichnisse)
Freigabeder Pfad jeder SMB/NFS-Freigabe
Datasetjedes eingehängte ZFS-Dataset, dessen Pfad nicht schon eine Freigabe ist
Netzlaufwerkjedes eingehängte Netzlaufwerk unter /mnt/remotes, dessen Pfad nicht schon eine Freigabe ist

Systempfade (/, /etc, /usr, /var, /root, /boot, /proc, /sys, /dev, /run, /tmp und weitere) sind nie Ablageorte. Das Verzeichnis /appdata/bunkerbox (Bunkerbox selbst mit Sitzungen und Zugangsdaten) wird ausgeblendet und ist auch über einen Pfad nicht erreichbar. Netzlaufwerke im Zustand „wartet“ (Automount noch nicht ausgelöst) werden nicht angeboten, damit das Öffnen nicht hängt.

Die Adresse der Seite enthält Ablageort und Ordner (/files?root=share:media&path=filme) und lässt sich als Lesezeichen speichern.

Sicherheit​

  • Jeder Pfad wird als Ablageort plus relativer Pfad übergeben; jede Komponente muss ein gültiger Name sein (kein /, kein . oder .., keine Steuerzeichen).
  • Bunkerbox geht vom Ablageort aus jede Komponente einzeln mit lstat durch: Jeder Ordner auf dem Weg muss ein echter Ordner sein, symbolische Links werden nie verfolgt, auch nicht im letzten Teil (Dateien werden mit O_NOFOLLOW geöffnet). Zusätzlich muss der echte Pfad (realpath) des übergeordneten Ordners dem angezeigten Pfad entsprechen. So kann weder .. noch ein von einem Freigabe-Benutzer angelegter Link aus dem Ablageort herausführen.
  • Symbolische Links werden angezeigt, lassen sich aber weder öffnen noch herunterladen; beim Kopieren werden sie als Link kopiert.
  • Downloads werden immer als Anhang mit Content-Type: application/octet-stream und einer Sandbox-CSP ausgeliefert, damit hochgeladene HTML-Dateien nie im Kontext der Oberfläche laufen.
  • Hochladen läuft als gestreamte Anfrage an /api/files/upload. Diese Route prüft Anmeldung, zweite Stufe und Herkunft (Origin) selbst, weil der Zugriffsschutz-Proxy von Next.js große Anfragen im Speicher puffern und nach 10 MB abschneiden würde.
  • Alle ändernden Aktionen stehen im Audit-Log (files.*).

Ansicht​

Die Tabelle zeigt Name, Größe, Änderungszeit, Besitzer:Gruppe und Rechte (rwxr-x---, oktal als Tooltip). Spalten lassen sich durch Klick auf die Überschrift sortieren, Ordner stehen immer oben; das Filterfeld durchsucht den aktuellen Ordner. Mehr als 5000 Einträge in einem Ordner werden abgeschnitten. Auf schmalen Bildschirmen werden nur Name und Größe angezeigt. Die Ansicht aktualisiert sich alle 15 s.

Aktionen​

AktionVerhalten
Neuer Ordnerübernimmt Besitzer, Gruppe und Rechte (inkl. Setgid) des übergeordneten Ordners
HochladenDateien auswählen oder in die Tabelle ziehen; eine Datei nach der anderen mit Fortschrittsanzeige, abbrechbar. Die Datei wird zuerst als versteckte Teildatei geschrieben und erst nach vollständiger Übertragung unter ihrem Namen abgelegt; abgebrochene Übertragungen hinterlassen nichts. Neue Dateien übernehmen Besitzer und Gruppe des Ordners und dessen Lese-/Schreibrechte (ohne Ausführen). Gibt es den Namen schon, fragt die Liste nach Ersetzen oder Überspringen. Ordner lassen sich nicht hochladen. Vorab prüft Bunkerbox den freien Platz; auf dem Systemdatenträger bleiben mindestens 1 GiB bzw. 5 % frei. Kommen 5 Minuten lang keine Daten an, wird der Upload abgebrochen
HerunterladenDateien direkt (Klick auf den Namen), Ordner als ZIP-Datei, die beim Herunterladen erzeugt wird (unkomprimiert, ZIP64 für große Dateien; symbolische Links und Sonderdateien fehlen im Archiv)
Umbenennenim selben Ordner; ein vorhandener Name wird nicht überschrieben
Verschieben, Kopierenin einen beliebigen Ordner eines beliebigen Ablageorts. Vorhandene Dateien gleichen Namens werden nur mit Ersetzen überschrieben, Ordner nie. Kopien behalten Besitzer, Gruppe, Rechte und Änderungszeit (ACLs und erweiterte Attribute werden nicht mitkopiert); in einen anderen Ablageort kopiert, gehören sie dem Besitzer und der Gruppe des Zielordners. Setuid und Setgid von Dateien werden nie mitkopiert. Verschieben innerhalb eines Datasets ist sofort fertig; zwischen Datasets wird kopiert und danach das Original gelöscht
LöschenDateien nach Bestätigung, Ordner nur einzeln und nach Eingabe des Ordnernamens. Enthält ein Ordner ein anderes eingehängtes Dateisystem (z. B. ein Dataset), wird das Löschen vorher verweigert
BesitzerBenutzer und Gruppe aus /etc/passwd und /etc/group, für Ordner optional für den ganzen Inhalt
RechteLesen/Schreiben/Ausführen für Besitzer, Gruppe und Andere sowie Setuid, Setgid und Sticky, auch als Oktalwert. Rekursiv erhalten Ordner genau diese Rechte; Dateien bekommen Ausführen nur, wenn sie schon ausführbar waren (wie chmod X), Setuid/Setgid werden bei Dateien nicht gesetzt

Kopieren, Verschieben, Löschen und rekursive Änderungen laufen im Hintergrund und erscheinen mit Fortschritt unter Vorgänge; solange sie laufen (und solange hochgeladen wird), verweigert Bunkerbox ein Update. Rekursive Änderungen und das Löschen gehen nie in andere eingehängte Dateisysteme hinein. Alle Vorgänge arbeiten über geöffnete Ordner (/proc/self/fd): Ersetzt jemand per SMB oder NFS währenddessen einen Ordner durch einen symbolischen Link, wirkt das nicht nach außerhalb des Ablageorts.

Die Rechte einer Freigabe (ACLs) setzt der Dateimanager nicht. Sind sie durcheinandergeraten, wende sie unter Freigaben erneut an.

Ein Ablageort selbst (z. B. der Ordner einer Freigabe) lässt sich nicht umbenennen, verschieben oder löschen.

API​

MethodePfadBeschreibung
GET/api/files/rootsFileRoot[]
GET/api/files/list?root=&path=DirectoryListing
GET/api/files/stat?root=&path=FileEntry
GET/api/files/principalsBenutzer und Gruppen für den Besitzer-Dialog
GET/api/files/download?root=&path=Datei oder ZIP-Stream
POST/api/files/upload?root=&path=&name=&overwrite=1roher Dateiinhalt als Body, Header x-bunkerbox-upload: 1 -> 201 FileEntry
POST/api/files/mkdir, /api/files/renameCreateFolderRequest, RenameRequest
POST/api/files/move, /api/files/copyTransferRequest -> 202 FileOperation
POST/api/files/deleteDeleteFilesRequest -> 202 FileOperation
POST/api/files/chown, /api/files/chmodChangeOwnerRequest, ChangeModeRequest -> 202 FileOperation
GET/api/files/operations, /api/files/operations/[id]laufende und letzte Vorgänge (die letzten 50, im Speicher)

Testmodus​

Mit BUNKERBOX_MOCK=1 liegen die simulierten Pfade (/tank/media, /tank/documents, /appdata, …) in einem Spielordner data/mock-files/, der beim ersten Aufruf mit Beispieldateien gefüllt wird. Alle Aktionen arbeiten dort wirklich, Besitzer und Rechte werden nur simuliert (das funktioniert auch unter Windows). Zum Zurücksetzen den Ordner löschen.