170 lines
11 KiB
Markdown
170 lines
11 KiB
Markdown
# Trashbox — Минималистичный CGI-файловый сервер
|
||
|
||
Легковесный файлообменник на чистом C для GNU/Linux. Работает через связку **Nginx (Reverse Proxy)** + **BusyBox `httpd` (CGI Backend)**.
|
||
> **Примечания:**<br> 1) Nginx опционален, нужен только если необходимен Reverse Proxy, например, для SSL.<br>
|
||
> 2) Зачем? Хотелось что-то легковесного, но сам я не погромист, потому был применён вайбкод подход, делал вместе с DeepSeek. Вдохновленно [этим](https://github.com/metalx1000/Directory-Index-for-httpd) проектом, но там есть нюанс, сурсы закрыты, а что-то такое от рута пускать такое себе.<br>
|
||
> 3) [Здесь](https://home.mashup.su) можно потыкать и посмотреть как работает.<br>
|
||
> 4) Нейрокод вряд-ли качественный, да и конечно же без багов никуда, есть issue, PR, кому это инетерсно, конечно.<br>
|
||
> 5) Активно (не очень) какаю в репу в своем [Gitea](https://git.mashup.su/RomkaZVO/Trashbox), а тут скорее просто результат.
|
||
|
||
## Скриншоты:
|
||
### Главная страница (светлая тема)
|
||

|
||
|
||
### Тёмная тема
|
||

|
||
|
||
### Мобильная версия
|
||

|
||
|
||
### Форма пароля
|
||

|
||
## Полный список возможностей
|
||
|
||
### Авторизация и безопасность
|
||
| № | Особенность| Примечание |
|
||
| :-: | :--- | :--- |
|
||
| **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. |
|
||
---
|
||
|
||
## Установка зависимостей
|
||
|
||
``` bash
|
||
sudo apt update
|
||
sudo apt install nginx busybox gcc make
|
||
```
|
||
---
|
||
|
||
## Настройка структуры и загрузка
|
||
|
||
``` bash
|
||
mkdir -p /patch/to/www/cgi-bin
|
||
cd /patch/to/www/cgi-bin
|
||
git clone https://git.mashup.su/RomkaZVO/Trashbox.git .
|
||
```
|
||
---
|
||
|
||
## Структура
|
||
|
||
``` bash
|
||
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/.
|
||
|
||
---
|
||
|
||
## Компиляция и установка
|
||
``` bash
|
||
cd src
|
||
make
|
||
sudo make install
|
||
```
|
||
---
|
||
|
||
## Конфигурация Nginx
|
||
|
||
Создайте файл конфигурации /etc/nginx/sites-available/service.
|
||
Образец конфигурации доступен по ссылке:
|
||
[Конфигурация BusyBox + Nginx](https://git.mashup.su/RomkaZVO/Trashbox/src/branch/main/busybox_nginx_reverse.txt)
|
||
|
||
Активация виртуального хоста:
|
||
``` bash
|
||
sudo ln -s /etc/nginx/sites-available/service /etc/nginx/sites-enabled/
|
||
sudo nginx -t && sudo systemctl reload nginx
|
||
```
|
||
---
|
||
|
||
## Запуск BusyBox
|
||
|
||
Запуск фонового CGI-сервера:
|
||
``` bash
|
||
busybox httpd -p 127.0.0.1:8050 -h /patch/to/www
|
||
```
|
||
---
|
||
|
||
## Настройка папок с паролями (.htpasswd)
|
||
|
||
Папка создается обычным образом в файловой системе. Чтобы задать для нее пароль, добавьте запись в файл .htpasswd:
|
||
``` bash
|
||
cat >> /patch/to/www/cgi-bin/.htpasswd << EOF
|
||
secret_folder:mysecretpassword
|
||
EOF
|
||
```
|
||
---
|
||
|
||
### Лицензия
|
||
Ну это даже не смешно, это вайбкод проект, делайте что хотите, а если по нормальному, то GPLv3, но не обижусь если что-то и проприетарное будет.
|