FileBrowser Quantum: el sucesor de File Browser, que fue archivado

Mascote LinuxPro levando uma pasta de arquivos de uma caixa de arquivo morto empoeirada até um monitor com o FileBrowser Quantum, com o cachorro caramelo cyborg sentado ao lado

O File Browser fue, durante una década, la respuesta más sencilla para quien quería acceder a los archivos de un servidor desde el navegador: un binario en Go, una carpeta, un puerto. El 1 de septiembre de 2026 el repositorio filebrowser/filebrowser, con casi 36 mil estrellas, fue archivado. No habrá más versiones, correcciones de errores ni de seguridad. Quien aún ejecuta File Browser en producción necesita un plan, y el candidato natural es FileBrowser Quantum, un fork que ya había seguido su propio camino mucho antes del fin del original. En esta publicación, entenderás por qué acabó el proyecto, qué cambia Quantum y cómo desplegar Quantum con Docker, systemd y Nginx.

Por qué acabó File Browser

File Browser nació como un plugin del servidor web Caddy, escrito por Henrique Dias cuando tenía 15 años, y se convirtió en un proyecto independiente después. En 2020, Henrique ya se había despedido una vez (Goodbye File Browser) y había pasado el mantenimiento a la comunidad. Los mantenedores vinieron y se fueron, y a finales de 2025 el proyecto llevaba aproximadamente un año sin mantenimiento. Él retomó el cargo.

En marzo de 2026, en el texto Update On File Browser, puso el proyecto en modo solo mantenimiento: nada de funciones nuevas, prioridad para errores y seguridad. El problema es que las alertas de seguridad no pararon de llegar. En 28 de julio de 2026, llegó el anuncio definitivo, Goodbye File Browser, for Real This Time. La última versión prevista, la v2.63.23, salió el 27 de julio, y el archivado quedó marcado para el 1 de septiembre.

Los motivos están en el propio texto, y son tres:

  • El código no tiene arreglo con parches. Según el autor, File Browser necesitaría reescribirse desde cero con seguridad y una buena API en mente, cosas que no estaban en la cabeza de un adolescente de 15 años. El ejemplo más claro son las sesiones: los tokens caducados siguen funcionando en algunas situaciones, y el cierre de sesión no invalida el token.
  • Falta de tiempo. Algunas horas la mayoría de los fines de semana, leyendo issues y alertas, no bastaban para mantener la calidad que él quería.
  • Falta de ganas. Era un proyecto de más de diez años atrás, que cumplió su objetivo, y mantener un código que él mismo no considera bueno dejó de dar placer.

Los números confirman el diagnóstico. La página de alertas de seguridad del repositorio lista 62 avisos publicados, 50 de ellos solo en 2026, cuatro clasificados como críticos. Entre ellos hay inyección de comandos antes de la autenticación en el hook de inicio de sesión, usuarios de auto-registro heredando la raíz del servidor como ámbito y enlaces simbólicos que permiten a un usuario leer y escribir fuera de su carpeta.

Lo que quedó sin corregir

El README del proyecto archivado lista dos clases de problema que no se corregirán:

  • Ejecución de comandos, runner y hooks. El recurso acumula vulnerabilidades y necesitaría reescribirse. Viene desactivado por defecto; si alguien lo vuelve a activar con --disable-exec=false, ejecutar comandos por la interfaz equivale a tener shell en el servidor.
  • Sesiones y JWT. Las sesiones son JWTs autocontenidos, sin identificador en el servidor, y por eso no pueden revocarse. Logout, cambio de contraseña y renovación dejan los tokens antiguos válidos hasta que expiren, y el mismo token de renovación puede usarse varias veces. Un token filtrado vale hasta el final de la validez.

La orientación oficial para quien siga usándolo es tratar File Browser como software sin mantenimiento: no exponerlo directamente a internet, colocar un proxy inverso que termine el TLS y haga autenticación propia, mantener el ejecutor de comandos apagado y ejecutarlo sin privilegios, dentro de un contenedor, montando solo la carpeta que necesita ser servida. El propio Henrique dice preferir que los usuarios migren a una alternativa, sin recomendar ninguna específica.

Qué es FileBrowser Quantum

O FileBrowser Quantum es un fork mantenido por Graham Steffaniak. El repositorio existe desde junio de 2023, mucho antes del final del original, y hoy tiene cerca de 8,4 mil estrellas. La licencia sigue siendo la misma, Apache 2.0, y el código también es Go, con la interfaz web incrustada en el binario.

El README describe Quantum como un “fork masivo”: cambió la forma de configurar, de autenticar, de buscar y de compartir. En la práctica, lo que cambia para quien viene del original:

  • Varias fuentes de archivos (sourcesal mismo tiempo, cada una con reglas de inclusión y exclusión.
  • Autenticación por contraseña con 2FA, OIDC (SSO), LDAP, JWT y proxy.
  • Configuración en un único config.yaml, en lugar de flags de línea de comando y ajustes guardados en la base de datos.
  • Búsqueda indexada, con resultados mientras escribes y filtros por tamaño, incluido el de carpetas.
  • Miniaturas de vídeo, documentos ofimáticos, carátulas de álbum y modelos 3D, además de tamaño de carpetas en el listado.
  • WebDAV para montar los archivos como unidad de red.
  • Comparticiones configurables: validez, usuarios permitidos (incluidos los anónimos), tema y permiso para ver, editar o enviar archivos.
  • API con tokens de larga duración y documentación Swagger en /swagger.
  • Control de acceso por usuario o grupo y por ruta dentro de cada fuente.

Y, tan importante como lo que entró, lo que salió: la terminal y la ejecución de comandos fueron eliminados, y el README dice que no van a volver. Es precisamente el área que el autor original declaró imposible de arreglar.

¿Stable o beta: qué versión usar?

Quantum tiene dos canales, y la documentación de versiones explica bien la diferencia:

  • stable (v1.5.x): la versión recomendada para quienes están empezando y para producción. Se actualiza cada uno a tres meses. En la fecha de este post, la más reciente es la v1.5.6-stable, de 4 de septiembre de 2026. Usa el banco de datos heredado database.db.
  • beta (v2.0.0): se actualiza cada una a tres semanas y sustituye el almacén clave-valor por SQLite (filebrowser.sqlite), con capa de estado en memoria, registro de actividades y permisos por fuente (ver, descargar, modificar, crear y eliminar). Requiere una migración única de la base de datos y de la configuración.

Esta guía utiliza la stable. Las imágenes están en Docker Hub (gtstef/filebrowser) y en GitHub Container Registry (ghcr.io/gtsteffaniak/filebrowser). La etiqueta stable incluye FFmpeg y previsualización de documentos; la stable-slim solo contiene el servicio y también se ejecuta en ARM 32 bits, como las Raspberry Pi antiguas. En producción, la documentación sugiere fijar la serie, por ejemplo 1.5-stable, para recibir correcciones sin saltar de versión principal.

Arquitectura de la guía

El montaje que vamos a hacer es el más común en servidor: Quantum se ejecuta en un contenedor, publicado solo en 127.0.0.1, y Nginx se sitúa delante con TLS. Las carpetas de archivos entran como volúmenes (las sources), y la configuración, la base de datos y la caché van juntos en el directorio data, que es lo que necesitas copiar en la copia de seguridad.

Diagrama: usuários e links públicos passam pelo Nginx com TLS até o contêiner do FileBrowser Quantum, que lê as fontes de arquivos e guarda config.yaml e banco no volume data

Prueba rápida con Docker

Para ver la interfaz antes de configurar nada, sin persistencia:

docker run --rm -p 127.0.0.1:8080:80 -v "$PWD:/srv" gtstef/filebrowser:stable

Abre http://127.0.0.1:8080 y entra con admin / admin. La carpeta actual aparece como fuente. Cuando cierres el contenedor, todo lo que se haya configurado desaparece.

Instalación con Docker Compose

Crea la estructura. En el contenedor, el archivo de configuración por defecto se encuentra en /home/filebrowser/data/config.yaml, por eso la configuración, la base de datos y la caché van todos a ./data:

mkdir -p filebrowser/data && cd filebrowser

Cree data/config.yaml con dos fuentes, una carpeta de archivos generales y otra del equipo:

server:
  cacheDir: /home/filebrowser/data/tmp
  externalUrl: "https://arquivos.exemplo.com.br"
  sources:
    - path: /arquivos
      name: "Arquivos"
      config:
        defaultEnabled: true
    - path: /equipe
      name: "Equipe"

auth:
  adminUsername: admin

Las rutas en sources son las de dentro del contenedor. defaultEnabled: true da acceso a la fuente para todos los usuarios; la fuente Equipe, sin esa opción, el administrador debe conceder acceso a cada usuario. externalUrl es la dirección pública utilizada en los enlaces de compartición. La documentación advierte: nunca use la raíz / como fuente, ni una carpeta que incluya /var.

Ahora el compose.yaml:

services:
  filebrowser:
    image: gtstef/filebrowser:1.5-stable
    restart: unless-stopped
    environment:
      FILEBROWSER_ADMIN_PASSWORD: "${FB_ADMIN_PASSWORD}"
    volumes:
      - /srv/arquivos:/arquivos
      - /srv/equipe:/equipe
      - ./data:/home/filebrowser/data
    ports:
      - "127.0.0.1:8080:80"

La contraseña del administrador se obtiene de una variable de entorno, no del YAML. Guárdela en un .env con permiso restringido y arranque el servicio:

printf 'FB_ADMIN_PASSWORD=%s\n' "$(openssl rand -base64 24)" > .env
chmod 600 .env
docker compose up -d
docker compose ps
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8080/health

La imagen ya incluye un HEALTHCHECK que consulta /health en el puerto 80. Si cambia server.port no config.yaml, sobrescriba el healthcheck en Compose con el nuevo puerto. Los cambios en config.yaml requieren reiniciar el contenedor con docker compose restart.

Si Docker aún es una novedad para ti, vale la pena leer la historia de Docker para entender de dónde vienen los volúmenes, las imágenes y Compose.

Sin Docker: binario con systemd

Quantum también se distribuye como binario para Linux en amd64, arm64, armv6 e armv7. Las previsualizaciones de vídeo dependen de FFmpeg instalado en el sistema:

VERSION=v1.5.6-stable
ARCH=amd64    # ou arm64, armv7, armv6

sudo apt install -y ffmpeg
curl -fL -o /tmp/filebrowser \
  "https://github.com/gtsteffaniak/filebrowser/releases/download/${VERSION}/linux-${ARCH}-filebrowser"
sudo install -m 0755 /tmp/filebrowser /usr/local/bin/filebrowser

sudo useradd --system --shell /usr/sbin/nologin --home-dir /opt/filebrowser filebrowser
sudo install -d -o filebrowser -g filebrowser -m 0750 /opt/filebrowser

Cree /opt/filebrowser/config.yaml, ahora con las rutas reales del servidor y escuchando en el puerto 8080 (los puertos por debajo de 1024 requerirían root):

server:
  port: 8080
  externalUrl: "https://arquivos.exemplo.com.br"
  sources:
    - path: /srv/arquivos
      name: "Arquivos"
      config:
        defaultEnabled: true

auth:
  adminUsername: admin

El usuario filebrowser necesita tener permiso de lectura y escritura en las carpetas de las fuentes. Después, la unit /etc/systemd/system/filebrowser.service, basada en la de la documentación de instalación en Linux:

[Unit]
Description=FileBrowser Quantum
After=network.target

[Service]
Type=simple
User=filebrowser
WorkingDirectory=/opt/filebrowser
EnvironmentFile=/opt/filebrowser/filebrowser.env
ExecStart=/usr/local/bin/filebrowser -c /opt/filebrowser/config.yaml
Restart=on-failure

[Install]
WantedBy=multi-user.target
sudo chown filebrowser:filebrowser /opt/filebrowser/config.yaml
printf 'FILEBROWSER_ADMIN_PASSWORD=%s\n' "$(openssl rand -base64 24)" | sudo tee /opt/filebrowser/filebrowser.env >/dev/null
sudo chmod 600 /opt/filebrowser/filebrowser.env
sudo systemctl daemon-reload
sudo systemctl enable --now filebrowser
journalctl -u filebrowser -f

Para ir más allá de enable e journalctl, consulta la guía de comandos esenciales de systemd.

Detrás de Nginx con HTTPS

Quantum utiliza cookies para la sesión y eventos en tiempo real (SSE) para actualizar la interfaz, por lo que el proxy debe reenviar el Host y no puede almacenar en búfer la respuesta. Las cargas de archivos grandes también exigen aumentar el límite de cuerpo de Nginx:

server {
    listen 443 ssl;
    server_name arquivos.exemplo.com.br;

    ssl_certificate     /etc/letsencrypt/live/arquivos.exemplo.com.br/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/arquivos.exemplo.com.br/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_buffering off;
        client_max_body_size 10G;
    }
}

El certificado puede emitirse con certbot --nginx -d arquivos.exemplo.com.br. Si quieres servir Quantum en una subruta, como https://exemplo.com.br/files/, ajusta server.baseURL no config.yaml y el location en Nginx. La guía de proxy inverso tiene ejemplos también para Traefik y Caddy.

Un detalle útil: las rutas de compartición quedan separadas en /public/. Si pones autenticación en el proxy (un auth_request, por ejemplo), puedes dejar /public/ fuera, y los enlaces compartidos siguen funcionando sin inicio de sesión en el proxy, protegidos por el propio hash y por la contraseña de la compartición. Rutas como /api/, /dav/ e /swagger/ siempre exigen usuario autenticado.

Migrando desde el File Browser original

No es un cambio de imagen: el formato de configuración ha cambiado. Quantum lo lee todo de un config.yaml, mientras que el original usaba flags de línea de comandos y ajustes guardados en la base de datos. La guía de migración de configuración comienza con el levantamiento de lo que usas hoy:

ps aux | grep filebrowser        # flags em uso: --port, --address, --baseurl, --root...
systemctl cat filebrowser        # ou o compose.yaml: veja as flags e a pasta do banco

Y la correspondencia entre los flags antiguos y las claves nuevas:

  • --portserver.port
  • --addressserver.address
  • --baseurlserver.baseURL
  • --rootserver.sources[0].path
  • --database → ruta de la base de datos en server.database (o variable de entorno)

Tres recursos del original no existen en Quantum: el terminal, los runners (comandos disparados por eventos) y la gestión de usuarios desde la línea de comandos, que pasa a realizarse mediante el archivo de configuración o la API. Si dependías de hooks para ejecutar scripts después de una subida, planifica una alternativa fuera de la herramienta, como un servicio que observe la carpeta.

La guía cubre la configuración. Planifica recrear usuarios y comparticiones en Quantum, o aprovecha la migración para conectar LDAP u OIDC y dejar de mantener contraseñas locales. Levanta Quantum en paralelo, apuntando a las mismas carpetas, valida con algunos usuarios y solo entonces apaga el original.

Precauciones antes de exponerlo

  • Cambia la contraseña predeterminada. La prueba rápida entra con admin/admin; en producción, define FILEBROWSER_ADMIN_PASSWORD y activa 2FA para el administrador.
  • Publica solo en 127.0.0.1 y deja que Nginx se encargue de TLS. Un bloqueo de fuerza bruta con fail2ban delante no cuesta nada.
  • Monta solo lo que necesita ser servido. Nada de fuente en la raíz del sistema; cada volumen es una carpeta específica.
  • Fija la versión (1.5-stable) y lea las notas de la versión antes de actualizar, sobre todo cuando la v2.0.0 llegue al canal stable, porque requiere migración de la base de datos.
  • Realice una copia de seguridad de ./data: ahí es donde se guardan la configuración, los usuarios y los recursos compartidos.

Para enterarse cuando el servicio caiga, se puede monitorizar el endpoint /health con el Go Uptime, y Quantum combina muy bien con otros servicios self-hosted que ya han pasado por aquí, como Vaultwarden y el Gitea.

Si sus archivos no están todos en un disco local, sino repartidos entre SFTP, S3, SMB y WebDAV, vale la pena conocer Filestash, que compara las tres opciones lado a lado.

Conclusión

El fin de File Browser es un ejemplo honesto de cómo un proyecto personal puede crecer más allá de lo que el autor puede mantener. Henrique Dias prefirió archivarlo a mantener un código que él mismo no considera seguro, y dejó las vulnerabilidades conocidas documentadas. Para quien necesita un administrador de archivos web ligero, FileBrowser Quantum preserva la idea original (un binario, una carpeta, el navegador) y añade lo que faltaba: SSO, búsqueda indexada, comparticiones con control y ninguna ejecución de comandos desde la interfaz. La documentación completa está en filebrowserquantum.com.