bitrixdock icon indicating copy to clipboard operation
bitrixdock copied to clipboard

Добавление опциональной защищенной конфигурации против атак через cron и PHP

Open paskal opened this issue 8 months ago • 2 comments

Юбилейный 256-й PR!

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

Решает уязвимости описанные в issue #251, где злоумышленники могут:

  • Внедрять вредоносные задания в crontab через PHP функции exec/system
  • Получать персистентный доступ к серверу через cron
  • Выполнять произвольные команды от имени www-data пользователя

Защита от атак

  1. Блокировка доступа к cron: Добавление www-data в /etc/cron.deny предотвращает создание/изменение заданий cron
  2. Отключение опасных PHP функций: disable_functions блокирует exec, system, shell_exec и другие функции выполнения команд
  3. Изолированный контейнер cron: Отдельный контейнер для легитимных заданий cron с ограниченными правами
  4. Условная конфигурация: Все функции безопасности опциональны через переменные окружения

Обратная совместимость

  • Все функции безопасности отключены по умолчанию
  • Существующие установки продолжат работать без изменений
  • Поэтапная миграция через .env переменные
  • Отдельные файлы конфигурации (docker-compose.secure.yml)

Поддержка версий PHP

Добавлена поддержка усиленной безопасности для версий PHP:

  • ✅ PHP 5.6, 7.1, 7.3, 7.4, 8.1, 8.2, 8.3, 8.4
  • PHP 8.0 - сборка не работает, конфигурация безопасности удалена

Для каждой поддерживаемой версии:

  • Версионно-специфичные пути и конфигурации
  • Динамическая настройка контейнера cron под любую версию PHP

Новые возможности

  • Скрипт проверки безопасности (security-check.sh)
  • Защищенный шаблон окружения (.env_template.secure)
  • Подробное руководство по миграции (SECURITY_MIGRATION.md)
  • Автоматическое определение docker-compose/docker compose команды
  • Русская локализация всех сообщений и документации

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

Быстрый старт с безопасностью:

# Скопировать защищенный шаблон
cp .env_template.secure .env

# Настроить безопасность в .env
SECURITY_HARDENING=true
DISABLE_DANGEROUS_FUNCTIONS=true
BLOCK_CRON_ACCESS=true
DEVELOPMENT_MODE=false

# Запустить с защищенной конфигурацией (включая cron)
docker compose -f docker-compose.secure.yml --profile cron up -d

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

./security-check.sh

Файлы

  • .env_template.secure: Шаблон с параметрами безопасности
  • docker-compose.secure.yml: Защищенная конфигурация Docker Compose
  • cron/: Отдельный контейнер для безопасного выполнения cron заданий
  • php/phpXX/: Улучшенная конфигурация PHP для поддерживаемых версий с опциональной защитой
  • SECURITY_MIGRATION.md: Руководство по безопасной миграции
  • security-check.sh: Скрипт аудита безопасности

Исправления по отзывам

  • Исправлен путь к cron_events.php на стандартный Битрикс путь
  • Добавлены пояснения к кастомным cron скриптам как к примерам
  • Убран лимит времени выполнения для cron задач
  • Удалена неиспользуемая переменная ENABLE_CRON (используются Docker Compose профили)

Исправляет #251

paskal avatar Jun 15 '25 14:06 paskal

Открыл для себя нейросети? 😆

Elnadrion avatar Jun 15 '25 15:06 Elnadrion

В целом получается очень тяжеловесно, я за то чтобы принять "лёгкий" вариант https://github.com/bitrixdock/bitrixdock/pull/259, он ничего не ломает у имеющихся пользователей, а тут много изменений и требуется миграция.

paskal avatar Jun 15 '25 16:06 paskal

Слишком много правок, предлагаю разбить на мелкие и обсуждать каждую отдельно

vmpartner avatar Nov 13 '25 07:11 vmpartner