Trashbox — Минималистичный CGI-файловый сервер
Легковесный файлообменник на чистом C для Linux/Debian. Работает через связку Nginx (Reverse Proxy) + BusyBox httpd (CGI Backend).
Примечания:
1) Nginx опционален, нужен только если необходимен Reverse Proxy, например, для SSL.
2) Зачем? Хотелось что-то легковесного, но сам я не погромист, потому был применён вайбкод подход, делал вместе с DeepSeek. Вдохновленно этим проектом, но там есть нюанс, сурсы закрыты, а что-то такое от рута пускать такое себе.
3) Здесь можно потыкать и посмотреть как работает.
4) Нейрокод вряд-ли качественный, да и конечно же без багов никуда, есть issue, PR, кому это инетерсно, конечно.
5) Активно (не очень) какаю в репу в своем GitLab, а тут скорее просто результат.
Скриншоты:
Главная страница (светлая тема)
Тёмная тема
Мобильная версия
Форма пароля
Полный список возможностей
Авторизация и безопасность
| № | Особенность | Примечание |
|---|---|---|
| 1 | Пароль на папки | Защита отдельных директорий через .htpasswd. |
| 2 | POST-форма авторизации | Безопасная передача пароля. |
| 3 | Токены сессий | Уникальные токены для доступа к защищённым разделам. |
| 4 | Токен в localStorage | Сохранение авторизации в браузере между переходами. |
| 5 | Время жизни сессии | Токен валиден 1 час, после чего автоматически удаляется на сервере. |
| 6 | Защита от брутфорса | Лимит в 5 неудачных попыток ввода пароля. |
| 7 | Временный бан | Блокировка доступа на 15 минут при превышении лимита попыток. |
Навигация и работа с файлами
| № | Особенность | Примечание |
|---|---|---|
| 1 | Навигация | Удобная (вроде) навигационная цепочка. |
| 2 | Просмотр директорий | Наглядное отображение полного содержимого папок. |
| 3 | Гибкая сортировка | Сортировка по имени, размеру и дате. |
| 4 | Поиск файлов | Рекурсивный поиск по имени внутри текущей директории. |
| 5 | Скачивание файлов | Прямая выдача файлов. |
| 6 | Предпросмотр | Модальное окно для просмотра картинок, видео, аудио, PDF и текста. |
| 7 | Копирование ссылок | Быстрое копирование чистой прямой ссылки на файл или папку. |
| 8 | Иконки типов файлов | Наглядные эмодзи-иконки для разграничения форматов. |
| 9 | Подсчет размера папок | Рекурсивный расчет и отображение общего объема папки. |
| 10 | Сводная статистика | Подсчет количества файлов, папок и их суммарного размера. |
Интерфейс и UX
| № | Особенность | Примечание |
|---|---|---|
| 1 | Адаптивный дизайн | Полная оптимизация под ПК, планшеты и смартфоны. |
| 2 | Тёмная / Светлая тема | Переключение оформления с сохранением выбора. |
| 3 | Сохранение контекста | Навигация по хлебным крошкам без потери авторизации. |
| 4 | Единая высота тулбара | Одинаковый размер и стиль для элементов поиска и сортировки. |
| 5 | Увеличенный UI на мобильных устройствах | Крупные кнопки и элементы для удобного нажатия пальцами. |
| 6 | Кнопка «Наверх» | Быстрая прокрутка к началу страницы. |
| 7 | Фиксированная сетка | Фиксированная ширина иконок без «прыжков» верстки. |
| 8 | Папки жирным шрифтом | Визуальное отличие папок от файлов. |
| 9 | Модальная авторизация | Красивое окно запроса пароля при входе в закрытую папку. |
Мониторинг и логи
| № | Особенность | Примечание |
|---|---|---|
| 1 | Статус сервера | Показывает память BusyBox/Nginx и нагрузку CPU. |
| 2 | Асинхронные метрики | Подгрузка статистики без блокировки основного UI и сессии. |
Технические особенности
| № | Особенность | Примечание |
|---|---|---|
| 1 | Чистый C | Без PHP/Python/Node.js, максимум производительности при минимуме зависимостей. |
| 2 | Универсальный CGI | Работает через CGI на любом веб-сервере. |
| 3 | Оптимизация под BusyBox | Идеально подходит для встраиваемых систем и домашних серверов. |
| 4 | ~2 МБ RAM | Минимальное потребление оперативной памяти. |
| 5 | Хранение токенов в /tmp |
Автоматическая очистка сессий при перезагрузке системы. |
| 6 | Конфигурация config.ini |
Гибкая настройка путей и параметров без пересборки. |
Оптимизация для мобильных устройств
| № | Особенность | Примечание |
|---|---|---|
| 1 | Крупные кнопки | Размер тач-зон 38–44px для удобства клика пальцем. |
| 2 | Скрытие даты | На маленьких экранах дата скрыта, отображается только размер. |
| 3 | Увеличенные иконки | Значки 32px вместо мелких 20px. |
Установка зависимостей
sudo apt update
sudo apt install nginx busybox gcc make
Настройка структуры и загрузка
mkdir -p /patch/to/www/cgi-bin
cd /patch/to/www/cgi-bin
git clone https://git.mashup.su/RomkaZVO/Trashbox.git .
Структура
cgi-bin/
├── Makefile
├── config.ini
├── template.html
├── style.css
├── .htpasswd # Файл с паролями для защищенных папок
├── src/
│ ├── main.c # Точка входа главного CGI-скрипта
│ ├── config.c / .h # Парсинг конфигурации (config.ini)
│ ├── auth.c / .h # Авторизация, сессии и защита от брутфорса
│ ├── fs.c / .h # Навигация по файловой системе и операции
│ ├── render.c / .h # Шаблонизатор и генерация HTML
│ ├── utils.c / .h # Вспомогательные функции (URL encoding, escape, форматирование)
│ ├── style.c # Выдача и кэширование CSS
│ └── status.c # Мониторинг системных ресурсов
├── index.cgi # Бинарник списка файлов / навигации
├── style.cgi # Бинарник отдачи стилей
└── status.cgi # Бинарник системной статистики
Примечание: Кастомные страницы ошибок 403.html и 404.html опционально размещаются на уровень выше cgi-bin - в /patch/to/www/.
Компиляция и установка
cd src
make
sudo make install
Конфигурация Nginx
Создайте файл конфигурации /etc/nginx/sites-available/service.
Образец конфигурации доступен по ссылке:
Конфигурация BusyBox + Nginx
Активация виртуального хоста:
sudo ln -s /etc/nginx/sites-available/service /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
Запуск BusyBox
Запуск фонового CGI-сервера:
busybox httpd -p 127.0.0.1:8050 -h /patch/to/www
Настройка папок с паролями (.htpasswd)
Папка создается обычным образом в файловой системе. Чтобы задать для нее пароль, добавьте запись в файл .htpasswd:
cat >> /patch/to/www/cgi-bin/.htpasswd << EOF
secret_folder:mysecretpassword
EOF
Лицензия
Ну это даже не смешно, это вайбкод проект, делайте что хотите, а если по нормальному, то GPLv3, но не обижусь если что-то и проприектарное будет.



