filebrowser – ein webbasierter Dateimanager für „einfache“ Ansprüche

Allgemein Linux

Aus verschiedenen Gründen war ich auf der Suche nach einer Lösung, um auf einfache Weise Fotos durch Dritte auf meinen Server im Internet hochladen zu können. Folgende Bedingungen waren für mich darüber hinaus relevant:

  1. Anwendung soll als Dockerinstanz laufen
  2. möglichst wenig Systemressourcen nötig (vollwertige NAS-Lösung unnötig)
  3. Upload soll browserbasiert und
  4. am besten ohne Anmeldung (im schlimmsten Fall als anonymer User) möglich sein (KISS – Keep it simple and stupid!)
  5. Link zur Dateifreigabe soll per QR-Code verteilt werden können.

Okay, der 5. Punkt meiner Liste ist recht schnell mit einem QR-Code-Generator (z.B. https://www.qrcode-generator.de/) erledigt. Bei Punkt 2-3 habe ich lange gesucht und habe mich am Ende für den filebrowser entschieden, der den 1. und 4. Punkt dann auch noch erfüllte. Alles in allem ist filebrowser ein recht ordentliches Tool, welches den Ordnerinhalt eines beliebigen Ordners im Dateisystem browserbasiert mit einer Vielzahl von individuell einstellbaren Rechten zur Verfügung stellt.

Grundsätzlich ist die Docker-Installtion von filebrowser bereits auf der Entwickler-Seite beschrieben, aber ein paar Anpassungen sind dann doch notwendig. Hier nun meine Anleitung zur Installation und Konfiguration:

Zuerst loggst du dich auf deinen Server mit der Docker-Installation ein (ein ausführliches Tutorial zur Installation von Docker habe ich hier schon einmal beschrieben). Anschließend erstellst du dir ein neues Arbeitsverzeichnis (ich habe /opt gewählt und mir dort neues ein Unterverzeichnis filebrowser generiert).

$ cd /opt
$ mkdir filebrowser
$ cd /opt/filebrowser

Natürlich kannst du dies auch innerhalb deines Nutzerverzeichnis erstellen oder später gleich dieses freigeben, aber bitte nicht auf einem Server der öffentlich (aus dem Intenet) zugänglich ist 😉

Mir ging es darum, einen temporären Upload-Server bereitzustellen, der nur wenige Tage in Betrieb ist. Beim ersten Start wird eine Datenbank (User, Rechte, Freigaben, etc.) generiert und auf dem Server persistent abgelegt, um bei einem erneuten Start der Aplikation mit denselben Einstellungen arbeiten zu können. Den Pfad zu dieser, als auch das spätere Wurzelverzeichnis sowie die initialen Konfigurationsvorgaben musst du selber erstellen:

$ mkdir data
$ touch filebrowser.db
$ nano .filebrowser.json

{
  "port": 80,
  "baseURL": "",
  "address": "",
  "log": "stdout",
  "database": "/database.db",
  "root": "/srv"
}

Das war es auch schon an Vorarbeit, anschließend startest du mit folgendem Kommando deine neue Docker-Instanz (die letzten beiden Zeilen zeigen, das die Instanz fehlerfrei gestartet wurde):

$ docker run \
    -name filebrowser \
    -v /opt/filebrowser/data:/srv \
    -v /opt/filebrowser/filebrowser.db:/database.db \
    -v /opt/filebrowser/.filebrowser.json:/.filebrowser.json \
    --user $(id -u):$(id -g)
    -p 80:80 \
    filebrowser/filebrowser


2021/09/27 06:06:58 Using config file: /.filebrowser.json
2021/09/27 06:06:58 Listening on [::]:80

Gegebenenfalls musst du den Port anpassen, sofern Port 80 bei dir schon belegt ist, dies kannst du zum Beispiel mit der Option -p 8081:80 erledigen. Ich empfehle dir ausdrücklich, den Container nicht als Root auszuführen, da ansonsten durch die Option –user $(id -u):$(id -g) alle hochgeladenen Dateien mit Root-Rechten auf deinem Server abgelegt werden. Damit schaffst du dir die ersten Grundlagen für einen Angriff auf deinen Servr mittels Local File Inclusion (LFI) oder file-upload vulnerabilities – aber das soll hier nicht das Thema sein.

Nach dem erfolgreichen Start des Containers kannst du im Browser durch http://IP-SERVER bzw. http://IP-SERVER :8081 die Weboberfläche aufrufen.

Nach dem Login (die Initial-Credentials lauten admin:admin und solltest du grundsätzlich ändern) siehst du die schlicht gestaltete Weboberfläche.

Für das o.a. Setup (anonymer Login ausschließlich für den Upload von Dateien) erstellen wir uns jedoch einen neuen (zweiten!) Administrator-Account. Warum erläutere ich dir später, wenn es um das Login ohne Authentifizierung geht. Dies geht unter Settings/User Management:

Das Setup ist recht übersichtlich gehalten. Wie du den Usernamen benennst, liegt ganz an dir. Kleiner Sicherheitshinweis: benutze keine Namen wie admin, root, etc., sondern wirklich einen individuellen. Den Haken bei den Rechten setzt du einfach auf Administrator.

Anschließend bearbeitest du den ersten Nutzer (ursprünglich admin), benennst ihn zum Beispiel anonymous und gibt ihm ausschließlich das Recht, Dateien und Verzeichnisse zu erstellen (dies impliziert auch den Upload von Files)

Jetzt solltest du 2 User haben, einen anoymous als user1 und deinen individuellen Administrator-Account mit der ID user2 (user-ID siehst du in der Adresszeile deines Browsers, wenn du im entsprechenden Profil bist).

filebrowser verfügt über etliche Befehle auf der Kommandozeile. Dies machen wir uns zur Nutze, indem wir mittels config set die Authentifizierung komplett deaktivieren. Dann wird grundsätzlich der Benutzer mit der id1 und dessen Rechten eingeloggt (in unserem Fall anonymous, da wir den 2. Nutzer zum Administrator gemacht haben). Jetzt ist dir sicherlich auch klar, warum der Admin-Account auf gar keinen Falls der erste Nutzer in den Einstellungen des filebrowser sein sollte.

$ docker run \
    -name filebrowser \
    -v /opt/filebrowser/data:/srv \
    -v /opt/filebrowser/filebrowser.db:/database.db \
    -v /opt/filebrowser/.filebrowser.json:/.filebrowser.json \
    --user $(id -u):$(id -g)
    -p 80:80 \
    filebrowser/filebrowser config set --auth.method=noauth

Dies kann später auch über die Option config set –auth.method=json rückgängig gemacht werden. Theoretisch ist sogar reCAPTCHA möglich. Wenn du dazu mehr wissen willst, schau mal in den enstprechenden Abschnitt der Dokumenation.

Das o.a. docker-Kommando setzt ausschließlich die Authentifizierungsmethode und führt den Container nicht permanent aus. Wenn du anschließend den Container erneut mit folgendem Kommando startest, solltest du bei Aufruf im Browser mittels http://IP-SERVER bzw. http://IP-SERVER :8081 automatisch im filebrowser eingeloggt werden.

$ docker run \
    -name filebrowser \
    -v /opt/filebrowser/data:/srv \
    -v /opt/filebrowser/filebrowser.db:/database.db \
    -v /opt/filebrowser/.filebrowser.json:/.filebrowser.json \
    --user $(id -u):$(id -g)
    -p 80:80 \
    filebrowser/filebrowser &

Wie du im folgenden Bild bzgl. Web-Access siehst – Upload geht – löschen, Vorschaubilder und Download nicht.

Hochgeladene Dateien liegen dann gem. o.a. Konfiguration unter /opt/filebrowser/data.

Sehr nice, oder?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.