Skip to content

Latest commit

 

History

History
185 lines (137 loc) · 12 KB

File metadata and controls

185 lines (137 loc) · 12 KB

Простой FTP сервер на Python для устройств сканирования

Легкий и настраиваемый FTP сервер, предназначенный для получения отсканированных документов с МФУ устройств. Поддерживает работу в фоновом режиме и интерактивном консольном режиме с интерактивной конфигурацией.

⚠️ Текущий статус: Стабильная бета-версия

Основная функциональность готова к промышленному использованию и протестирована с МФУ устройствами. Сервер стабилен для повседневного использования, но имеет технические проблемы, которые требуют устранения.

✨ Возможности

  • Два режима работы: Запуск в качестве фонового процесса или интерактивного консольного приложения
  • Автоматическая конфигурация: Самосоздающийся конфигурационный файл с безопасными случайными учетными данными
  • Управление пользователями: Множественные учетные записи с настраиваемыми правами доступа
  • Режимы передачи: Настраиваемые пассивный и активный режимы передачи данных
  • Анонимный доступ: Опциональный анонимный доступ с ограниченными правами
  • Кроссплатформенность: Работает на Windows, Linux и macOS. Основное тестирование проводилось на Windows 10 (для других ОС требуется дополнительное тестирование)

🚀 Начало работы

Предварительные требования

  • Python 3.7 или выше
  • Менеджер пакетов pip

Установка

  1. Клонируйте репозиторий:
git clone https://github.com/your-username/python-ftp-server.git
cd python-ftp-server
  1. Установите зависимости:
pip install -r requirements.txt
  1. Запустите сервер в первый раз (автоматически создаст конфиг):
python src/ftp_server.py

Конфигурация

Сервер автоматически создает конфигурационный файл при первом запуске с:

  • Безопасными случайными учетными данными администратора (отображаются в консоли)
  • Порт по умолчанию 2121
  • Диапазон пассивных портов 60000-60100
  • Безопасные права доступа по умолчанию

Отредактируйте конфигурационный файл для настройки:

  • Сетевых настроек сервера (IP, порты)
  • Учетных записей пользователей и прав доступа
  • Предпочтений режима работы

Сборка исполняемого файла

Создайте самостоятельный исполняемый файл для Windows:

pyinstaller --onefile --console src/ftp_server.py

📖 Использование

Консольный режим (Интерактивный)

python src/ftp_server.py --console

Фоновый режим

# Запуск в качестве фонового процесса
python src/ftp_server.py --service-start

# Остановка работающего фонового процесса
python src/ftp_server.py --service-stop

Параметры командной строки

  • --console: Принудительный запуск в интерактивном консольном режиме
  • --service-start: Запуск в качестве фонового процесса
  • --service-stop: Остановка работающего фонового процесса
  • --service-worker: Внутренний параметр для рабочего процесса

🔧 Управление конфигурацией

Интерактивная консоль предоставляет реальное управление для:

  • Сетевых настроек сервера и конфигурации портов
  • Управления учетными записями пользователей (создание, изменение, удаление)
  • Контроля прав доступа и ограничений
  • Настроек режима работы

📝 Поддерживаемые FTP функции

  • Реализация стандартного FTP протокола
  • Оба режима передачи: активный и пассивный
  • Аутентификация пользователей
  • Листинг директорий и файловые операции
  • Настраиваемые диапазоны портов данных

🐛 Известные технические проблемы и ограничения

Архитектурные проблемы

  • Нарушение принципов SOLID - классы берут на себя слишком много ответственности
  • Смешение ответственности - бизнес-логика перемешана с управлением конфигурацией

Проблемы безопасности

  • Неполная реализация хеширования паролей - требуется правильное добавление соли и хранение
  • Пароли в открытом виде хранятся даже при настроенном хешировании
  • Отсутствие проверки ввода в интерактивном режиме

Проблемы специфичные для Windows

  • Не настоящая Служба Windows - фоновый режим использует только процесс-демон
  • Состояния гонки PID файлов - потенциальные проблемы в управлении службой
  • Ненадежное определение PID на Windows системах
  • Проблемы с обработкой путей с обратными слешами в некоторых сценариях

Проблемы производительности

  • Накладные расходы парсинга конфигурации - многократный повторный парсинг без кэширования
  • Блокирующие операции в основном потоке влияют на отзывчивость
  • Отсутствие пула соединений для множественных одновременных подключений

Проблемы качества кода

  • Дублирование кода между модулями
  • Магические числа без должной документации
  • Жестко закодированные значения для таймаутов и лимитов перезапусков
  • Управление ресурсами - потенциальные утечки памяти
  • Проблемы с кодировками возможны на разных платформах

🗺️ План разработки

Высокоприоритетные исправления

  • Исправить выявленные критические проблемы тикужей версии
  • Завершить реализацию хеширования паролей с добавлением соли
  • Добавить проверку ввода для интерактивного режима
  • Исправить состояния гонки PID файлов и определение процессов Windows

Среднеприоритетные улучшения

  • Рефакторинг классов для следования принципам SOLID
  • Разделение бизнес-логики и управления конфигурацией
  • Добавить правильную обработку ошибок и повсеместное логирование
  • Реализовать логику повторных попыток для критических операций
  • Исправить проблемы с потоками и добавить правильные таймауты

Улучшения качества кода

  • Добавить правильную обработку сигналов для разных режимов
  • Исправить проблемы с кодировками для кроссплатформенной совместимости
  • Нет ротации логов - Файлы логов могут расти бесконечно. Нужно добавить ротацию и соотвествующие настройки через файл конфигурации
  • Нет механизма "health-check"

🤝 Участие в разработке

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

  1. Сделайте форк проекта
  2. Создайте ветку для вашей функции (git checkout -b feature/AmazingFeature)
  3. Зафиксируйте изменения (git commit -m 'Add some AmazingFeature')
  4. Отправьте в ветку (git push origin feature/AmazingFeature)
  5. Откройте Pull Request

🆘 Решение проблем

Частые проблемы

  • Порт уже используется: Измените порт по умолчанию в конфигурации
  • Доступ запрещен: Проверьте права доступа к директориям
  • Таймаут соединения: Проверьте настройки фаервола и диапазоны пассивных портов

Получение помощи

  • Проверьте существующие Issues для похожих проблем
  • Создайте новый Issue с подробным описанием вашей проблемы
  • Включите логи сервера и детали конфигурации (без паролей)

📜 Лицензия

Этот проект лицензирован под MIT License - подробности см. в файле LICENSE.md.

🙏 Благодарности

  • Построен на pyftpdlib - очень быстрая и масштабируемая библиотека FTP сервера на Python
  • Вдохновлен реальными процессами управления документами

Примечание: Данное программное обеспечение стабильно для промышленного использования с МФУ устройствами, но имеет технические проблемы, которые планируется устранить в будущих версиях.

Пароли хранятся в открытом виде - защитите конфигурационный файл.