bitrixdock
bitrixdock copied to clipboard
Добавление опциональной защищенной конфигурации против атак через cron и PHP
Юбилейный 256-й PR!
Проблема безопасности
Решает уязвимости описанные в issue #251, где злоумышленники могут:
- Внедрять вредоносные задания в crontab через PHP функции exec/system
- Получать персистентный доступ к серверу через cron
- Выполнять произвольные команды от имени www-data пользователя
Защита от атак
- Блокировка доступа к cron: Добавление www-data в /etc/cron.deny предотвращает создание/изменение заданий cron
- Отключение опасных PHP функций: disable_functions блокирует exec, system, shell_exec и другие функции выполнения команд
- Изолированный контейнер cron: Отдельный контейнер для легитимных заданий cron с ограниченными правами
- Условная конфигурация: Все функции безопасности опциональны через переменные окружения
Обратная совместимость
- Все функции безопасности отключены по умолчанию
- Существующие установки продолжат работать без изменений
- Поэтапная миграция через .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
Открыл для себя нейросети? 😆
В целом получается очень тяжеловесно, я за то чтобы принять "лёгкий" вариант https://github.com/bitrixdock/bitrixdock/pull/259, он ничего не ломает у имеющихся пользователей, а тут много изменений и требуется миграция.
Слишком много правок, предлагаю разбить на мелкие и обсуждать каждую отдельно