Руководство 11 мин чтения 2026-10-06

Автономный файловый менеджер Filebrowser в Docker Compose: легкий веб-доступ к файлам VDS, шаринг ссылок и замена FTP

Как получить удобный доступ к файлам сервера через браузер без тяжеловесного Nextcloud и небезопасного FTP: развертываем легковесный Filebrowser на Go в Docker Compose с Nginx Reverse Proxy, потоковой загрузкой больших файлов и защитой сессий.

Инженерная редакция SysKit Проверено инженерами SysKit.ru

Перед каждым администратором сервера, вебмастером или владельцем небольшого проекта рано или поздно встает тривиальная задача: как быстро и безопасно загрузить на VDS файлы сайта, скачать свежий дамп базы данных или передать архив клиенту. Классический рефлекс из 2000-х годов — поднять FTP-сервер (vsftpd или ProFTPD). Однако в 2026 году этот подход создает сплошные проблемы с безопасностью и удобством.

В этой практической инструкции мы разберем современную и легковесную альтернативу — Filebrowser. Мы развернем его в Docker Compose за 5 минут, настроим безопасный Nginx Reverse Proxy с авто-SSL, снимем ограничения на размер загружаемых файлов и организуем удобный шеринг ссылок с защитой паролем.

1. Почему протокол FTP устарел и в чем проблема SFTP для клиентов

Протокол FTP (File Transfer Protocol) был разработан еще в 1971 году (RFC 114) — в эпоху, когда об информационной безопасности не думали. Эксплуатация FTP на современном VDS сопряжена с критическими недостатками:

  • Передача паролей открытым текстом: Аутентификация в классическом FTP не шифруется. Любой перехват трафика между вашим компьютером и сервером раскрывает учетные данные. FTPS решает эту проблему лишь частично, создавая хаос с самоподписанными сертификатами.
  • Кошмар с портами и NAT (Active/Passive mode): Для передачи данных FTP открывает случайный диапазон портов (PASV ports). Это заставляет сисадмина дырявить фаервол UFW/iptables диапазоном из сотен портов (например, 40000–50000), что ломает работу за корпоративными NAT и роутерами.
  • Необходимость специального ПО: Чтобы зайти на FTP, пользователю нужно установить и настроить FileZilla, Total Commander или WinSCP. Передать файл клиенту или контент-менеджеру со смартфона становится неразрешимой задачей.

Многие администраторы переходят на SFTP (SSH File Transfer Protocol). С точки зрения шифрования это безупречно, но возникает другая фундаментальная проблема: «Каждый пользователь SFTP — это системный аккаунт Linux». Чтобы дать дизайнеру или копирайтеру доступ к папке с картинками, вам приходится создавать пользователя в /etc/passwd, настраивать сложный изолированный Chroot Jail в sshd_config и следить, чтобы он случайно не получил доступ к командной оболочке Bash.

⚠️ Чем опасен SFTP для сторонних пользователей

Малейшая ошибка в конфигурации ChrootDirectory в SSH позволяет непривилегированному пользователю обойти ограничения и прочитать конфигурационные файлы других проектов на сервере (например, .env или wp-config.php с паролями к базам данных).

2. Архитектура Filebrowser: почему 15 МБ RAM эффективнее Nextcloud

Когда сисадмины устают от FTP, первой мыслью часто бывает установка Nextcloud или ownCloud. Но Nextcloud — это тяжеловесный корпоративный комбайн:

  • Стек требует PHP-FPM, СУБД (PostgreSQL или MariaDB), кэширование Redis, демоны очередей и планировщик cron.
  • Потребление оперативной памяти стартует от 1.5–2 ГБ RAM, создавая постоянную фоновую нагрузку на процессор.
  • На скромном VDS за 300–400 ₽ такой комбайн оставляет мало ресурсов для боевых сайтов и баз данных.

Filebrowser решает задачу изящно:

  • Один бинарник на языке Go: Никаких интерпретаторов, внешних рантаймов и зависимостей.
  • Микропотребление ресурсов: В режиме ожидания контейнер Filebrowser потребляет всего 15–20 МБ оперативной памяти и 0% CPU.
  • Встроенная база SQLite: Все пользователи, хеши паролей и публичные ссылки хранятся в одном компактном файле filebrowser.db размером в пару мегабайт.
  • Современный веб-интерфейс: Drag-and-drop загрузка папок целиком, встроенный редактор кода с подсветкой синтаксиса, встроенный просмотр изображений, аудио, видео и PDF прямо во вкладке браузера.

💡 Концепция «Окно в файловую систему»

В отличие от облачных хранилищ, Filebrowser не требует импорта или переиндексации файлов в закрытые хранилища. Он монтирует любую существующую директорию вашего VDS (например, /var/www или /backups) и работает с ней напрямую. Если скрипт на сервере создал файл, он мгновенно виден в веб-панели без ручной синхронизации.

3. Развертывание в Docker Compose с лимитами и привязкой к 127.0.0.1

Для развертывания создадим отдельную изолированную директорию /opt/filebrowser на сервере.

Подготовка структуры каталогов

Перед запуском контейнера выполните подготовительные команды в терминале:

sudo mkdir -p /opt/filebrowser/data
cd /opt/filebrowser

# КРИТИЧЕСКИ ВАЖНО: создать пустой файл базы данных заранее!
# Если не выполнить touch, Docker создаст директорию filebrowser.db, и контейнер упадет с ошибкой.
touch filebrowser.db

Манифест docker-compose.yml

Создайте конфигурационный файл docker-compose.yml со строгими ограничениями ресурсов и безопасной привязкой порта:

services:
  filebrowser:
    image: filebrowser/filebrowser:latest
    container_name: filebrowser
    restart: unless-stopped
    # Привязка СТРОГО к 127.0.0.1 для исключения прямого доступа в обход фаервола
    ports:
      - "127.0.0.1:8080:80"
    volumes:
      # Папка, файлами которой вы хотите управлять (окно в файловую систему)
      - /opt/filebrowser/data:/srv
      # База данных SQLite с пользователями и настройками
      - ./filebrowser.db:/database/filebrowser.db
    environment:
      - PUID=1000
      - PGID=1000
    # Лимиты ресурсов на верхнем уровне для защиты VDS от OOM Killer
    mem_limit: 256m
    cpus: 0.50

Запустите контейнер в фоновом режиме:

docker compose up -d

Убедитесь, что служба успешно запустилась и слушает локальный сокет:

docker compose ps
curl -I http://127.0.0.1:8080

4. Регламент безопасности: анализ незакрытых CVE и жесткий харденинг

31 августа 2026 года основной репозиторий Filebrowser был официально переведен в архивный режим с фиксацией версии v2.63.23 («There will be no further releases, bug fixes, or security fixes»). Это не означает, что инструмент нельзя использовать, но требует от сисадмина нулевого доверия и глубокого понимания незакрытых уязвимостей.

Матрица известных уязвимостей Filebrowser (≤ v2.63.23)

Идентификатор CVE Вектор атаки Последствия уязвимости Метод митигации
CVE-2025-52904 Command Execution (Shell) Обход ограничений Scope при включенном командном раннере и чтение любых системных файлов хоста. Флаг --disable-exec=true
CVE-2026-82235 Denial of Service (DoS) Блокирующие системные вызовы при распаковке архивов с именованными каналами (FIFO/named pipes). Лимиты ресурсов Compose
GHSA-7w29-q235-57m9 Symlink Traversal Символические ссылки позволяют обойти правила фильтрации путей (path deny rules). Изолированный том /srv/data
GO-2026-6026 JWT Session Replay Токены авторизации не отзываются на сервере при смене пароля и остаются активными до истечения срока. Перезапуск контейнера при утечке

Инженерные правила защиты архивного стека:

  1. Проверка флага disable-exec: В новых установках он выключен, но при обновлении старых баз или конфигов убедитесь, что параметр --disable-exec=true активен. Никогда не давайте пользователям веб-панели доступ к системной оболочке.
  2. Монтирование строго выделенной папки: Никогда не пробрасывайте в контейнер корень сервера /:/srv. Монтируйте исключительно целевую пользовательскую папку (например, /opt/filebrowser/data:/srv).
  3. Альтернативы для высоких требований ИБ: Если корпоративная политика запрещает использование архивного ПО без регулярных патчей безопасности, рассмотрите форк с активной поддержкой Filebrowser Quantum либо разверните приватное объектное хранилище MinIO с гранулярными IAM-политиками и аудитом действий.

В сентябре 2026 года команда проекта объявила об архивации основного репозитория Filebrowser в связи со стабильностью ядра. Программа полностью пригодна к эксплуатации, однако сисадмину необходимо строго соблюдать три правила харденинга:

  1. Категорический запрет встроенного раннера команд (disable-exec): В Filebrowser исторически присутствовала функция выполнения шелл-команд из интерфейса (Runner / Hooks). По умолчанию она отключена (--disable-exec=true). Ни в коем случае не включайте флаг --disable-exec=false. Веб-панель должна служить только для операций с файлами, а не превращаться в веб-терминал с правами выполнения кода.
  2. Особенности сессий на базе JWT: Аутентификация в Filebrowser построена на stateless JWT-токенах. Это означает, что при смене пароля ранее выданные сессионные токены продолжают жить до момента истечения своего тайм-аута. Если вы подозреваете утечку сессии, перезапустите контейнер либо удалите файл сессий в базе.
  3. Изоляция прав доступа к файлам (PUID / PGID): По умолчанию файлы, загружаемые через интерфейс, получают владельца внутри контейнера. Переменные PUID=1000 и PGID=1000 гарантируют, что файлы на диске VDS будут принадлежать вашему обычному системному пользователю, исключая конфликты прав с веб-сервером Nginx.

⚠️ Никогда не публикуйте порт 8080 наружу через 0.0.0.0:8080:80

Docker создает правила в цепочке PREROUTING iptables в обход стандартного фаервола UFW. Если написать 8080:80 вместо 127.0.0.1:8080:80, порт станет доступен любому боту во всем интернете без HTTPS-шифрования. Всегда проксируйте трафик через Nginx с валидным SSL-сертификатом!

5. Настройка Nginx Reverse Proxy: снятие лимита body_size и потоковая передача

Для удобного доступа по доменному имени (например, files.domain.ru) и защиты HTTPS-шифрованием настроим Nginx в качестве обратного прокси-сервера.

Особенности проксирования файловых менеджеров

Если использовать типовой конфиг Nginx, вы столкнетесь с двумя неприятными проблемами:

  • Ошибка 413 Request Entity Too Large: По умолчанию Nginx запрещает передачу файлов крупнее 1 МБ.
  • Зависание при загрузке тяжелых файлов: По умолчанию Nginx включает буферизацию (proxy_request_buffering on) — он сначала полностью сохраняет 10-гигабайтный файл во временную папку /var/lib/nginx/body на диск сервера, и только потом начинает передавать его в контейнер. Диск сервера изнашивается двойной записью, а прогресс-бар в браузере замирает.

Эталонный конфигурационный файл Nginx

Для защиты от DoS-атак Slowloris (когда злоумышленник пытается исчерпать воркеры Nginx, передавая файл по 1 байту в секунду при отключенной буферизации), добавим зону лимитов limit_conn_zone $binary_remote_addr zone=addr:10m; в /etc/nginx/nginx.conf (в секцию http), а в виртуальном хосте настроим строгий client_body_timeout:

# В /etc/nginx/nginx.conf внутри блока http:
limit_conn_zone $binary_remote_addr zone=addr:10m;

Затем создайте виртуальный хост в /etc/nginx/sites-available/filebrowser.conf:

server {
    listen 80;
    server_name files.domain.ru;

    # 1. Отключаем лимит на размер тела запроса (0 = без ограничений)
    client_max_body_size 0;

    # 2. Отключаем буферизацию для потоковой передачи больших файлов
    proxy_request_buffering off;
    proxy_buffering off;

    # 3. Защита от Slowloris DoS: жесткий лимит времени на передачу тела запроса
    # Если клиент перестает передавать байты более 30 секунд — соединение сбрасывается
    client_body_timeout 30s;
    client_header_timeout 30s;

    # 4. Ограничение количества одновременных подключений с одного IP
    limit_conn addr 15;

    # 5. Таймауты ожидания ответа от бэкенда
    proxy_connect_timeout 60s;
    proxy_send_timeout 600s;
    proxy_read_timeout 600s;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # Поддержка WebSocket для интерактивного интерфейса
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

Активируйте сайт и проверьте конфигурацию:

sudo ln -s /etc/nginx/sites-available/filebrowser.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Выпуск бесплатного SSL-сертификата Let's Encrypt

Запустите Certbot для автоматической настройки HTTPS и HTTP/2:

sudo certbot --nginx -d files.domain.ru --redirect

После настройки Nginx откройте адрес https://files.domain.ru в браузере.

Первый вход и немедленная смена пароля

Стандартные учетные данные при первом запуске:

  • Логин: admin
  • Пароль: admin

⚠️ Смените пароль admin сразу после первого входа!

Пароль по умолчанию знают все автоматические боты. Сразу перейдите в меню Settings → Profile Settings, введите надежный пароль длиной от 14 символов и сохраните изменения.

Создание изолированных пользователей (Scope)

Если вам нужно выдать доступ коллеге, дизайнеру или клиенту:

  1. Перейдите в раздел Settings → User Management → New.
  2. Укажите логин и пароль.
  3. В поле Scope укажите относительный путь к изолированной папке (например, /uploads/client1). Пользователь не сможет выйти за пределы указанной папки.
  4. Настройте матрицу разрешений (Permissions):
    • Allow creation — разрешение создавать файлы и папки.
    • Allow deletion — разрешение удалять (снимите галочку для клиентов, чтобы они случайно не стерли данные).
    • Allow modify — редактирование и переименование.
    • Allow share — право делиться ссылками с внешними людьми.

Генерация публичных ссылок на скачивание

Чтобы отправить файл человеку, у которого нет учетной записи на вашем сервере:

  1. Наведите курсор на нужный файл или папку и нажмите кнопку Поделиться (Share).
  2. Выберите срок действия ссылки (1 час, 1 день, 1 неделя или бессрочно).
  3. При необходимости задайте отдельный защитный пароль.
  4. Скопируйте сгенерированную короткую ссылку и отправьте адресату. Получатель сможет скачать файл в один клик без авторизации.

7. Сравнение Filebrowser, SFTP, Nextcloud и MinIO

Выбирая инструмент для работы с файлами на сервере, важно понимать архитектурное предназначение каждого решения:

Критерий Filebrowser SFTP (SSH) Nextcloud MinIO (S3)
Потребление RAM 15–20 МБ 5–10 МБ 1.5–2 ГБ+ 150–300 МБ
Интерфейс доступа Веб-браузер (любое устройство) Только FTP-клиент (FileZilla) Веб, Desktop, Мобильное приложение Веб-консоль, S3 API / CLI
Публичные ссылки Да (с паролем и таймером) Нет Да (расширенные возможности) Да (Presigned URLs)
Безопасность клиентов Изоляция в папке (Scope) Риск доступа к шеллу сервера Изолированные пользователи IAM-политики корзин
Идеальный сценарий Управление файлами сайта и передача данных Личный доступ сисадмина Корпоративный офис и документы Бэкапы и медиа-хранилище по API

8. Регламент обслуживания и резервное копирование базы filebrowser.db

Поскольку Filebrowser хранит все пользовательские настройки и ссылки в единой базе SQLite, резервное копирование сводится к сохранению одного файла.

Горячий бэкап базы данных без остановки контейнера

Не копируйте файл базы обычной командой cp в момент активной работы, чтобы не получить поврежденный снимок. Используйте встроенную команду SQLite:

sqlite3 /opt/filebrowser/filebrowser.db ".backup '/opt/filebrowser/filebrowser_backup_$(date +%F).db'"

Проверка сетевой безопасности

После развертывания обязательно убедитесь, что порт контейнера 8080 не торчит наружу в интернет:

  • Проверьте открытые порты с помощью утилиты Сканер портов онлайн от SysKit. Введите внешний IP вашего VDS и проверьте порт 8080. Статус обязан быть «Порт закрыт».
  • Проверьте валидность HTTPS-сертификата с помощью SSL Checker.
  • Если вы создаете новых пользователей, сгенерируйте для них криптостойкие пароли в нашем Генераторе паролей онлайн.

🎯 Ищете быстрый VDS для файлового хранилища?

Разверните свой файловый сервер на скоростных NVMe VDS с неограниченным трафиком и защитой от сетевых атак у ведущих провайдеров.

Выбрать скоростной VDS для файлов

Рекомендуемые VDS-провайдеры

Отказоустойчивые сервера с быстрыми NVMe и каналом до 1 Гбит/с

Выбор редакции
⚡

Timeweb Cloud — Скоростные NVMe VDS

Быстрые NVMe-диски и гигабитный канал связи для моментальной отдачи и загрузки тяжелых файлов любого объема.

Конфигурация
1 vCPU 3.3 ГГц • 1 ГБ RAM • 15 ГБ NVMe • Трафик без лимита
Премиум Tier III
🔷

Selectel — Корпоративная инфраструктура

Надежные серверы уровня Tier III с возможностью подключения объемных сетевых дисков для масштабных файловых архивов.

Конфигурация
1 vCPU • 2 ГБ RAM • 30 ГБ NVMe • 100 Мбит/с
Идеально для CMS и файлов
🟠

Beget — Простота и отказоустойчивость

Быстрое развертывание Docker в 1 клик, удобный мониторинг дискового пространства и бесплатные снимки системы.

Конфигурация
1 vCPU • 1 ГБ RAM • 20 ГБ NVMe • Трафик без лимита

Инструменты SysKit по теме статьи

Бесплатные утилиты для проверки и диагностики вашего сервера

Вопросы и ответы (FAQ)

Популярные вопросы вебмастеров и сисадминов по данной теме

Чем Filebrowser принципиально лучше классического FTP и SFTP?
FTP передает логины и пароли в открытом виде без шифрования и блокируется многими фаерволами. SFTP требует создания системного пользователя Linux с доступом к SSH-оболочке, что небезопасно для сторонних сотрудников. Filebrowser работает через защищенный HTTPS-протокол в любом веб-браузере, поддерживает drag-and-drop, разграничение прав и генерацию временных ссылок без установки клиентского софта.
Почему Filebrowser предпочтительнее Nextcloud или OwnCloud на скромных VDS?
Nextcloud — это тяжелая платформа коллективной работы (PHP, Redis, СУБД MariaDB/PostgreSQL), требующая от 1.5–2 ГБ RAM и создающая высокую фоновую нагрузку на процессор. Filebrowser написан на языке Go, скомпилирован в единый бинарник, использует встроенную базу SQLite и потребляет всего 15–20 МБ оперативной памяти, что делает его идеальным решением для VDS с 1–2 ГБ RAM.
Как обойти ошибку 413 при загрузке файлов размером больше 1 ГБ в Nginx?
Директивы client_max_body_size 0; и proxy_request_buffering off; снимают лимит на размер и отправляют поток данных в контейнер без промежуточного сохранения на диск Nginx. Чтобы избежать DoS-атак типа Slowloris, обязательно настройте жесткий client_body_timeout 30s; и ограничьте количество параллельных коннектов через директиву limit_conn.
Безопасно ли использовать Filebrowser после объявления об архивации проекта?
Да, при соблюдении 3 инженерных правил харденинга: не выставлять порт контейнера напрямую в интернет (привязка строго к 127.0.0.1 за Nginx с SSL), держать отключенным встроенный раннер шелл-команд (флаг --disable-exec, включенный по умолчанию) и использовать сложные пароли администратора.

Читайте также в блоге SysKit

Смежные руководства и полезные технические статьи