SSD Nodes Learn 🎉 VPS vanaf $5.50/mnd
Gidsen Matt ConnorDoor Matt Connor

Beste self-hosted file manager vergelijken

Wij vergelijken FileBrowser, Filestash, SFTPGo en Cloud Commander op basis van authenticatie, opslagbackends en deelopties. Ontdek hoe u veilig bestanden beheert op uw server.

Wat een self-hosted bestandsbeheerder is, en wat het niet is

Een self-hosted bestandsbeheerder is een webpagina die over de mappenstructuur ligt die al op uw VPS (virtual private server) aanwezig is. U logt in, u ziet /srv/files precies zoals het op de schijf staat, en u uploadt, hernoemt, downloadt of deelt een link met iemand. Er wordt niets naar een tweede systeem gekopieerd, dus een bestand dat u in de browser sleept, is een bestand dat ls een seconde later toont.

Zoekresultaten verwarren dit vaak met software die andere taken uitvoert. Synchronisatietools houden een kopie van elk bestand op elk apparaat bij; daarvoor is een self-hosted Dropbox-alternatief bedoeld. Object storage heeft helemaal geen mappenstructuur, maar werkt met buckets en een API; daarom beantwoordt het draaien van MinIO voor S3-compatibele object storage een andere vraag. Server-beheerpanelen beheren de machine in plaats van de bestanden, en dat is waar de vergelijking tussen Cockpit en Webmin over gaat.

U heeft een bestandsbeheerder nodig wanneer een collega een archief van 300 MB van de server moet halen, of wanneer u vanaf een telefoon een typefout in een configuratiebestand wilt corrigeren. De taak is klein, en dat geldt ook voor de tools.

Houd tijdens het lezen één feit in gedachten. Dit is een webapplicatie met lees- en schrijftoegang tot uw bestandssysteem, die luistert op een poort. Elke keuze hieronder is in feite een keuze over welk deel van uw schijf dat proces kan bereiken.

FileBrowser is gearchiveerd, lees dit voordat u het installeert

FileBrowser, het filebrowser/filebrowser-project, is het antwoord dat de meeste handleidingen nog steeds geven. De README opent nu met een mededeling:

File Browser is gearchiveerd op 2026-09-01. De laatst geplande release is inmiddels verschenen. Er zullen geen verdere releases, bugfixes of beveiligingsupdates meer volgen.

De Apache 2.0-code blijft werken. De beveiligingsupdates stoppen echter. Dat is voor deze categorie belangrijker dan voor de meeste andere, omdat het hoofddoel van de software schrijftoegang tot een bestandssysteem via HTTP is.

De beheerders hebben beschreven hoe u het draaiende kunt houden, en het advies is het volgen waard, ongeacht welk hulpmiddel u kiest: stel het niet rechtstreeks bloot aan het internet, plaats het achter een reverse proxy die TLS (transport layer security) afhandelt en eigen authenticatie uitvoert, houd de command runner uitgeschakeld en draai het met beperkte rechten in een container waarbij alleen de map die u wilt aanbieden is gemount.

Eén regel in die README is belangrijker dan de rest. Sessies zijn op zichzelf staande JWT's (JSON web tokens) in plaats van identifiers aan de serverzijde, waardoor ze niet kunnen worden ingetrokken. Een gelekt sessietoken blijft geldig totdat het verloopt, en het wijzigen van het wachtwoord beëindigt de sessie niet. Als u FileBrowser blijft gebruiken, is de authenticatielaag ervoor degene die het echte werk verricht.

FileBrowser Quantum: de fork die in beweging blijft

De actieve ontwikkeling is verplaatst naar een fork, FileBrowser Quantum (gtsteffaniak/filebrowser), gepubliceerd als de gtstef/filebrowser-image. Deze bouwt de configuratie opnieuw op rondom één enkel config.yaml-bestand in plaats van de oudere mix van command-line flags en database-instellingen. De gedocumenteerde snelle test:

docker run -d \
  -v $(pwd):/srv \
  -p 80:80 \
  gtstef/filebrowser:beta

Dit serveert de huidige map op http://localhost, en de eerste inloggegevens zijn admin / admin. Wijzig deze voordat de container vanaf een andere locatie dan uw eigen machine bereikbaar is.

Gebruik voor een permanente instantie Compose, mount de map met data in plaats van een enkel databasebestand, en bind de poort aan localhost:

services:
  filebrowser:
    image: gtstef/filebrowser:beta
    user: "1000:1000"
    volumes:
      - /srv/files:/folder
      - ./data:/home/filebrowser/data
    ports:
      - 127.0.0.1:8080:80
    restart: unless-stopped

De configuratie bevindt zich in /home/filebrowser/data/config.yaml en de database in /home/filebrowser/data/filebrowser.sqlite. Versie 2.0.0 heeft het databaseformaat gewijzigd en voert een eenmalige migratie uit; daarom vragen de documenten om een map-mount: bij een mount van een enkel bestand kan de migratie het nieuwe bestand nergens plaatsen. De paden binnen config.yaml zijn containerpaden, dus een bron in de configuratie leest /folder, niet /srv/files. Als u dit omdraait, krijgt u een lege bestandslijst zonder foutmelding, omdat de map daadwerkelijk niet aanwezig is.

Het project publiceert latest en stable van ongeveer 60 MB met FFmpeg gebundeld voor videominiaturen, en stable-slim van ongeveer 15 MB met alleen de kern. Dit zijn de cijfers van de installatiepagina in augustus 2026. Pin de tag die u kiest. latest verandert zonder waarschuwing, en een bestandsbeheerder die het configuratieformaat wijzigt terwijl een container draait, zorgt voor een vervelend begin van de dag.

Voor deze taak is het de krachtigste van de kleine tools. Het serveert meerdere bronnen met include- en exclude-regels, zodat één instantie /srv/media en /srv/docs met verschillende scopes kan blootstellen. Shares hebben een verloopdatum en kunnen anoniem zijn of beperkt tot een gebruiker. Authenticatie omvat OIDC (OpenID Connect), LDAP (lightweight directory access protocol), wachtwoord met tweefactorauthenticatie en een proxy header-modus. Die proxy-modus zorgt ervoor dat de tool achter single sign-on (SSO) van een zelfgehoste Authentik-server kan draaien in plaats van dat u een tweede gebruikerslijst hoeft bij te houden.

Filestash: één interface voor opslag die u al heeft

Filestash heeft een andere insteek. Het is een front-end die verbinding maakt met een backend, en de lijst met backends is lang: FTP, SFTP (SSH file transfer protocol), S3, SMB, WebDAV, IPFS en nog ongeveer twintig andere. Het is geschikt wanneer de bestanden zich niet op de server bevinden waarop de interface draait.

mkdir -p /srv/filestash && cd /srv/filestash
curl -O https://downloads.filestash.app/latest/docker-compose.yml
docker compose up -d

De image is machines/filestash:latest. Open http://your_domain:8334 en het eerste scherm stelt het beheerderswachtwoord in. Stel dit onmiddellijk in, want totdat u dat doet, is de beheerconsole toegankelijk voor iedereen die de poort vindt.

Begrijp het identiteitsmodel voordat u hierop voortbouwt. Filestash houdt geen gebruikersdatabase bij in de gebruikelijke zin. Inloggegevens worden in uw browser opgeslagen via cookies die versleuteld, geauthenticeerd en HTTP-only zijn. Er wordt niets aan de serverzijde bewaard, tenzij u de deelfunctie gebruikt; in dat geval bewaart Filestash een persistente, versleutelde versie van uw inloggegevens. De "gebruikers" zijn opslagaccounts: de identiteit bevindt zich in de backend, in het SFTP-account of de S3-sleutel, niet in Filestash.

Dat ontwerp is helder, maar er hangt een prijskaartje aan. De prijspagina vermeldt de gratis self-hosted tier als AGPL v3 (GNU Affero General Public License) voor maximaal 3 gebruikers, en plaatst SSO (SAML, OIDC en LDAP) met op rollen gebaseerde toegangscontrole in de betaalde self-hosted tier vanaf $50 per maand, per augustus 2026. Als het plan was om "Filestash gratis voor bedrijfs-SSO te gebruiken", controleer dan die pagina voordat u uw ontwerp daarop baseert.

SFTPGo: een protocolserver met een webinterface

SFTPGo is de meest capabele software in dit overzicht en wordt vaak om de verkeerde redenen aanbevolen. Het biedt SFTP, HTTP/S, FTP/S en WebDAV aan, waarbij gebruik wordt gemaakt van een lokaal bestandssysteem, een versleuteld lokaal bestandssysteem, S3-compatibele objectopslag, Google Cloud Storage, Azure Blob Storage of een andere SFTP-server.

Binaries, Debian- en Ubuntu-pakketten en een container-image worden allemaal gepubliceerd. De huidige APT-repository-regel en de bijbehorende ondertekeningssleutel zijn te vinden op de installatiepagina in de SFTPGo-documentatie. De container-methode is de snelste manier om het draaiend te krijgen; vervang tag door de gewenste versie:

docker run --name some-sftpgo -p 8080:8080 -p 2022:2022 -d "drakkan/sftpgo:tag"

SFTP luistert op 2022 en de webinterfaces op 8080. Koppel /srv/sftpgo als volume, anders verdwijnen de accounts en hun bestanden wanneer de container opnieuw wordt aangemaakt, aangezien de home-directories van gebruikers standaard op /srv/sftpgo/data/<username> staan.

Er zijn twee webinterfaces, en het verschil daartussen is het aspect dat in de meeste handleidingen onvermeld blijft. WebAdmin, op /web/admin, is voor beheer: hier maakt u gebruikers, groepen, virtuele mappen en event-regels aan, en stelt u quota, bandbreedtelimieten en toegangstijden in. WebClient, op /web/client, is de weergave voor de eindgebruiker; hier kan een persoon door bestanden bladeren, eigen inloggegevens wijzigen, tweefactorauthenticatie instellen en shares aanmaken.

Die shares zijn de beste in deze vergelijking. Een gebruiker kan HTTP/S-links aanmaken om bestanden en mappen te delen, het aantal downloads en uploads beperken, de share beveiligen met een wachtwoord, toegang beperken op basis van bron-IP-adres en een automatische verloopdatum instellen.

Waarom dan de voorzichtigheid? Het zwaartepunt ligt bij het accountmodel en de protocolserver, niet bij de browse-ervaring. Kies voor SFTPGo wanneer andere mensen echte accounts met quota nodig hebben, wanneer uploads via SFTP of FTPS binnenkomen vanaf een systeem dat u niet beheert, of wanneer één bucket in de home-directories van meerdere gebruikers moet verschijnen. Virtuele mappen maken dat laatste mogelijk: een map ondersteund door lokale schijf, S3, GCS, Azure Blob, SFTP of HTTP, gekoppeld aan meerdere accounts, met een apart quotum per gebruiker op een gedeelde map. Als u enkel een browsebare pagina over /srv/files wilde, is dit een aanzienlijke hoeveelheid infrastructuur.

Nog twee feiten die het vermelden waard zijn. De Community-editie is uitsluitend AGPL-3.0 met aanvullende voorwaarden, naast een commercieel gelicentieerde Enterprise-editie. OIDC-login zit in de open-source build en koppelt gebruikers van de identiteitsprovider aan SFTPGo-beheerders en -gebruikers voor beide webinterfaces. U kunt de client-interface ook wereldwijd uitschakelen met enable_web_client in de httpd-configuratie, of per gebruiker door HTTP toe te voegen aan de geweigerde protocollen van die gebruiker, zodat de bestandsbeheerder voor de één wel en voor de ander niet beschikbaar is.

Cloud Commander: twee vensters en een terminal, voor één gebruiker

Cloud Commander is een onder MIT-licentie uitgebrachte Node.js-beheerder in de stijl van twee vensters, voorzien van een ingebouwde editor, een console en een terminal. Installeer het globaal met npm i cloudcmd -g, of draai de gepubliceerde container:

docker run -it --rm -v ~:/root -v /:/mnt/fs -w=/root -p 8000:8000 coderaiser/cloudcmd

Lees dat commando voordat u het uitvoert. -v /:/mnt/fs koppelt het volledige bestandssysteem van de host aan de container, en het voorbeeld ~/.cloudcmd.json levert "root": "/", "auth": false en "console": true mee. Die combinatie betekent dat iedereen die poort 8000 bereikt, toegang krijgt tot uw volledige schijf en een command-console op de server. Dit is een logische standaardinstelling voor een laptop, maar een slechte voor een VPS.

Beperk de reikwijdte. De container leest /root/.cloudcmd.json, wat het gepubliceerde commando aanlevert door uw home-directory te koppelen; behoud dus de configuratie-mount en laat de rest weg:

docker run -d --name cloudcmd \
  -v ~/.cloudcmd.json:/root/.cloudcmd.json \
  -v /srv/files:/srv/files \
  -w=/srv/files \
  -p 127.0.0.1:8000:8000 \
  coderaiser/cloudcmd

Stel in dat configuratiebestand "root" in op /srv/files, "auth" op true met een "username" en "password", en zet "console" en "terminal" op false, tenzij u echt shell-toegang via de browser wilt. Er bestaan ook command-line-equivalenten, waaronder --root, --auth, --username, --password en --prefix.

Wees eerlijk over wat het is. Eén paar inloggegevens, geen reikwijdte per gebruiker, geen quota, geen deellinks. Het is een persoonlijke tool, dus bind deze aan localhost zoals hierboven en bereik het via een tunnel:

ssh -L 8000:127.0.0.1:8000 you@your-vps

Open vervolgens http://127.0.0.1:8000 op uw eigen machine. De bestandsbeheerder wordt nooit publiekelijk blootgesteld en het enige dat naar het internet is gericht, is de SSH-daemon die u reeds op uw VPS heeft beveiligd.

Waarom Nextcloud de verkeerde tool is voor deze specifieke taak

Nextcloud is goede software, maar het is niet de juiste tool voor dit doel. Het is een samenwerkingsplatform: een PHP-applicatie, een database, achtergrondtaken, desktop-synchronisatieclients en een app store. Het draaien van Nextcloud om een webweergave van /srv/files te krijgen, brengt veel bewegende onderdelen met zich mee voor een kleine taak, en er is sprake van een fundamentele mismatch. Nextcloud houdt bestandsmetadata bij in een databasetabel in plaats van bij elk verzoek de map te lezen. Hierdoor kunnen bestanden die via rsync of een cron job zijn geschreven, onzichtbaar blijven in de interface totdat een scan ze oppikt, met sudo -u www-data php occ files:scan --all. Een bestandsbeheerder leest de map uit wanneer u de pagina laadt, waardoor dat gat niet bestaat.

Gebruik Nextcloud waar het goed in is: agenda's, contacten, synchronisatie en het delen van bestanden met gebruikers die een desktopclient verwachten. Nextcloud op een VPS met Docker, TLS en backups behandelt die configuratie. Als u het al draait en alleen een bestaande map wilt inzien, schakel dan de External Storage-app in en laat het daarbij. Een tweede webapplicatie met schrijftoegang tot dezelfde schijf is een extra component die u moet patchen.

Hoe u een applicatie draait zonder de volledige server bloot te stellen

Wijs nooit naar /. Het proces kan alles lezen en schrijven waar het gebruikersaccount toegang toe heeft; een gestolen sessietoken resulteert dus in exact die hoeveelheid toegang tot het bestandssysteem. Serveer één map, /srv/files, en maak deze specifiek voor dit doel aan.

Draai de applicatie als een niet-rootgebruiker en mount alleen wat noodzakelijk is. In Compose gebruikt u hiervoor user: "1000:1000" plus één bind mount per map, met :ro op alles waarvoor geen schrijfrechten nodig zijn:

    volumes:
      - /srv/files:/folder
      - /srv/media:/media:ro

Het gebruikelijke resultaat van deze wijziging is dat browsen werkt, maar uploads falen met permission denied, omdat de gebruikers-ID in de container geen eigenaar is van de map buiten de container. Vergelijk de twee: docker exec filebrowser id toont de containergebruiker, ls -ln /srv/files toont de numerieke eigenaar op de host. Los dit op met sudo chown -R 1000:1000 /srv/files. Dit is hetzelfde eigendomsprobleem dat PUID en PGID in Docker images oplost.

Bind de gepubliceerde poort aan localhost, 127.0.0.1:8080:80 in plaats van 8080:80. Docker schrijft zijn eigen netfilter-regels vóór die van ufw, waardoor een simpel gepubliceerde poort bereikbaar blijft vanaf het internet, zelfs als ufw deny 8080 actief is. Plaats een reverse proxy voor TLS. Via onversleuteld HTTP wordt de sessiecookie in leesbare tekst over het netwerk verstuurd, en die cookie staat gelijk aan toegang tot het bestandssysteem. Als Compose nieuw voor u is, behandelt Docker Compose on a VPS de bestandsstructuur waar deze fragmenten van uitgaan.

Voeg een authenticatielaag toe wanneer de eigen authenticatie van de applicatie beperkt is. HTTP basic auth bij de proxy volstaat voor een instantie met één gebruiker. Zodra er meer dan één persoon bij betrokken is, gebruikt u OIDC of forward auth via een identity provider, zodat het intrekken van één account de toegang overal blokkeert.

Schakel extra functies uit. Elke bestandsbeheerder die een shell, een command runner of een terminal in de browser aanbiedt, biedt remote code execution aan iedereen die een geldige sessie bezit. De richtlijn van FileBrowser is om de command runner uitgeschakeld te laten, en de voorbeeldconfiguratie van Cloud Commander schakelt de console in. Maak bewuste keuzes in plaats van de standaardinstellingen te volgen.

Wat gaat als eerste kapot en welke foutmeldingen ziet u

listen tcp :80: bind: permission denied. Linux reserveert poorten onder 1024 voor bevoorrechte processen. De gedocumenteerde configuratie van FileBrowser Quantum gebruikt poort 80; dit werkt binnen een container, maar faalt zodra u het binaire bestand als een niet-bevoorrechte gebruiker op de host uitvoert. Stel een poort boven 1024 in via config.yaml en laat de proxy poort 443 beheren.

Uploads mislukken terwijl browsen wel werkt. Voor het weergeven van een map is r-x nodig, voor het schrijven naar een map is w nodig. De webinterface geeft een algemene foutmelding, dus controleer eerst het bestandssysteem in plaats van de applicatielogs.

413 Request Entity Too Large. Deze foutmelding is afkomstig van nginx, niet van de bestandsbeheerder. De standaardwaarde voor client_max_body_size is 1 MB, waardoor een grotere upload door de proxy wordt geweigerd voordat de applicatie deze ontvangt. Stel client_max_body_size 4096m; in binnen het server-blok, of gebruik 0 om de controle uit te schakelen.

Geüploade bestanden krijgen de verkeerde groep. Nieuwe bestanden worden eigendom van de gebruiker die het proces uitvoert, ongeacht de instellingen van de bovenliggende map. Dit verstoort een tweede service die dezelfde mappenstructuur leest. Geef beide services een gedeelde groep en stel de setgid-bit in op de map met sudo chmod g+s /srv/files, zodat nieuwe bestanden de groep van de map overerven.

Alles werkt op de poort, maar faalt achter de proxy. Een applicatie die onder een subpad wordt geserveerd, bouwt links op basis van een prefix waarover de applicatie moet worden geïnformeerd. Cloud Commander heeft hiervoor --prefix. Waar een dergelijke optie ontbreekt, geeft u de applicatie een eigen subdomein en proxyt u het root-pad.

Welke self-hosted bestandsbeheerder moet u gebruiken?

  • Eén VPS, één of twee mappen, deel links met een verloopdatum, en wellicht later SSO: FileBrowser Quantum.
  • Bestanden die ergens anders staan, een S3 bucket, een SFTP-host of een NAS via SMB, en u wilt één webweergave voor alles: Filestash, binnen de limieten van de gratis laag.
  • Andere mensen hebben accounts, quota's en uploads via SFTP of FTPS nodig: SFTPGo, waarbij de webclient als een nuttige extra wordt beschouwd in plaats van de reden voor uw keuze.
  • Een persoonlijke tool met een editor en een terminal, bereikbaar via een SSH-tunnel en nooit gepubliceerd: Cloud Commander.
  • Nextcloud draait al en er is een bestaande map die u wilt ontsluiten: de External Storage app, en helemaal geen nieuwe software.

Wat u ook kiest, de implementatie is belangrijker dan de keuze zelf. Eén map, een non-root gebruiker, een poort gebonden aan localhost en authenticatie aan de voorzijde. Een bestandsbeheerder die op die manier is ingericht, is een gemak. Dezelfde software die naar / wijst met een gedeeld wachtwoord, is een remote shell met een mooie interface.

FAQ

Is FileBrowser in 2026 nog veilig om te gebruiken?

De upstream filebrowser/filebrowser README vermeldt dat File Browser op 2026-09-01 is gearchiveerd; er komen geen nieuwe releases, bugfixes of beveiligingsupdates meer. De code werkt nog steeds, maar ongepatchte software met schrijftoegang tot uw bestandssysteem vormt een risico dat in de loop van de tijd toeneemt. Als u het blijft gebruiken, volg dan het advies van het project zelf op: stel het niet direct bloot aan het internet, gebruik een reverse proxy voor TLS en eigen authenticatie, laat de command runner uitgeschakeld en gebruik een container zonder privileges waarbij alleen de betreffende map is gemount. Houd er ook rekening mee dat sessies gebruikmaken van op zichzelf staande JWT's in plaats van server-side identifiers; deze kunnen niet worden ingetrokken en een gewijzigd wachtwoord maakt een uitgegeven token niet ongeldig. Gebruik voor een nieuwe installatie de FileBrowser Quantum fork, gepubliceerd als de gtstef/filebrowser image, waar de ontwikkeling wel doorgaat.

Kan een self-hosted bestandsbeheerder mijn bestaande SSO gebruiken?

FileBrowser Quantum ondersteunt OIDC, LDAP en een proxy header-modus, waardoor het achter een bestaande identiteitsprovider kan draaien zonder een tweede gebruikerslijst. De OpenID Connect-integratie van SFTPGo zit in de open source-build en koppelt gebruikers van de identiteitsprovider aan SFTPGo-beheerders en -gebruikers voor zowel de WebAdmin- als de WebClient-interfaces. Filestash is de uitzondering om in de gaten te houden: de prijspagina plaatst SSO (SAML, OIDC en LDAP) in de betaalde self-hosted laag vanaf $50 per maand per augustus 2026, terwijl de gratis laag wordt vermeld als AGPL v3 met maximaal 3 gebruikers. Wanneer een applicatie helemaal geen SSO-ondersteuning heeft, is de fallback forward authentication bij de reverse proxy; dit beschermt de inlogpagina, maar laat de interne rechten van de applicatie ongemoeid.

SFTPGo heeft de meest volledige implementatie. Een gebruiker maakt een HTTP/S-link aan vanuit de WebClient en kan het aantal downloads en uploads beperken, een wachtwoord instellen, toegang beperken op basis van bron-IP-adres en een automatische verloopdatum instellen. FileBrowser Quantum ondersteunt shares met een verlooptijd, waarbij de toegang anoniem is of beperkt tot een gebruiker, plus rechten per share voor bekijken, bewerken en uploaden. Filestash heeft ook een share-functie, en dit is het enige geval waarbij de server een persistente versleutelde kopie van de opslaggegevens bewaart, omdat de link moet werken wanneer uw browsersessie is beëindigd. Cloud Commander heeft helemaal geen deellinks.

Is het veilig om een bestandsbeheerder naar / te laten wijzen als ik de enige gebruiker ben?

Nee, en het risico heeft niet zozeer te maken met het vertrouwen in uzelf. Het proces heeft lees- en schrijftoegang tot alles wat het gebruikersaccount kan bereiken. Elk pad naar die sessie, een gestolen cookie, een ongepatchte bug in de upload-handler of een hergebruikt wachtwoord resulteert in toegang tot /etc, tot uw SSH-keys en tot de datamappen van elke service. Beperk de mount tot één map: /srv/files in plaats van /. Bij Cloud Commander is dit het gevaarlijkst, omdat het gepubliceerde Docker-commando de root van de host mount op /mnt/fs en de voorbeeldconfiguratie "root": "/" instelt met "auth": false. Wijzig beide voordat die container op iets anders luistert dan localhost.

#file-manager#filebrowser#sftpgo#self-hosting#storage