Skip to content
Эта страница создана и переведена с помощью ИИ. Если вы заметили неточности, помогите нам улучшить её. Редактировать на GitHub

Устранение неполадок

На этой странице рассмотрены наиболее распространённые проблемы при работе с PRX-SD, их причины и решения.

Ошибка обновления базы данных сигнатур

Симптомы: sd update завершается с ошибкой сети, таймаутом или несовпадением SHA-256.

Возможные причины:

  • Нет подключения к интернету или брандмауэр блокирует исходящий HTTPS
  • Сервер обновлений временно недоступен
  • Прокси или корпоративный брандмауэр изменяет ответ

Решения:

  1. Проверьте подключение к серверу обновлений:
bash
curl -fsSL https://api.github.com/repos/openprx/prx-sd-signatures/commits?per_page=1
  1. Используйте скрипт офлайн-обновления при сетевых ограничениях:
bash
# На машине с доступом в интернет
./tools/update-signatures.sh

# Скопировать каталог сигнатур на целевую машину
scp -r ~/.prx-sd/signatures user@target:~/.prx-sd/
  1. Принудительно перезагрузите для очистки повреждённого кеша:
bash
sd update --force
  1. Используйте пользовательский сервер обновлений если вы используете частное зеркало:
bash
sd config set update_server_url "https://internal-mirror.example.com/prx-sd/v1"
sd update
  1. Проверьте несовпадение SHA-256 — обычно это означает, что загрузка была повреждена при передаче. Попробуйте ещё раз или загрузите вручную:
bash
sd update --force

TIP

Запустите sd update --check-only для проверки наличия обновлений без загрузки.

Низкая скорость сканирования

Симптомы: Сканирование каталога занимает значительно больше времени, чем ожидается.

Возможные причины:

  • Сканирование файловых систем, подключённых по сети (NFS, CIFS, SSHFS)
  • Правила YARA компилируются при каждом сканировании (нет кешированной компиляции)
  • Слишком много потоков конкурируют за ввод-вывод на вращающихся дисках
  • Рекурсия в архивах с большими вложенными архивами

Решения:

  1. Увеличьте количество потоков для хранилища на базе SSD:
bash
sd config set scan.threads 16
  1. Уменьшите количество потоков для вращающихся дисков (с ограниченным ввод-выводом):
bash
sd config set scan.threads 2
  1. Исключите медленные или неважные пути:
bash
sd config set scan.exclude_paths '["/mnt/nfs", "/proc", "/sys", "/dev", "*.iso"]'
  1. Отключите сканирование архивов если не требуется:
bash
sd config set scan.scan_archives false
  1. Уменьшите глубину архивов для предотвращения глубоко вложенных архивов:
bash
sd config set scan.max_archive_depth 1
  1. Используйте флаг --exclude для разовых сканирований:
bash
sd scan /home --exclude "*.iso" --exclude "node_modules"
  1. Включите debug-логирование для выявления узких мест:
bash
sd --log-level debug scan /path/to/dir 2>&1 | grep -i "slow\|timeout\|skip"

Ошибки прав доступа fanotify

Симптомы: sd monitor --block завершается с ошибкой «Permission denied» или «Operation not permitted».

Возможные причины:

  • Запуск не от имени root
  • Ядро Linux не имеет включённого CONFIG_FANOTIFY_ACCESS_PERMISSIONS
  • AppArmor или SELinux блокирует доступ к fanotify

Решения:

  1. Запустите от имени root:
bash
sudo sd monitor /home /tmp --block
  1. Проверьте конфигурацию ядра:
bash
zgrep FANOTIFY /proc/config.gz
# Должно показать: CONFIG_FANOTIFY=y и CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y
  1. Используйте режим без блокировки как запасной вариант (всё ещё обнаруживает угрозы, но не предотвращает доступ к файлам):
bash
sd monitor /home /tmp

WARNING

Режим блокировки доступен только в Linux с поддержкой fanotify. В macOS (FSEvents) и Windows (ReadDirectoryChangesW) мониторинг в реальном времени работает только в режиме обнаружения.

  1. Проверьте SELinux/AppArmor:
bash
# SELinux: проверить отказы
ausearch -m AVC -ts recent | grep prx-sd

# AppArmor: проверить отказы
dmesg | grep apparmor | grep prx-sd

Ложное срабатывание (легитимный файл определён как угроза)

Симптомы: Заведомо безопасный файл помечается как Подозрительный или Вредоносный.

Решения:

  1. Проверьте, что вызвало обнаружение:
bash
sd scan /path/to/file --json

Посмотрите на поля detection_type и threat_name:

  • HashMatch — хеш файла совпадает с известным хешем вредоносного ПО (маловероятное ложное срабатывание)
  • YaraRule — правило YARA совпало с паттернами в файле
  • Heuristic — эвристический движок оценил файл выше порога
  1. Для ложных срабатываний эвристики повысьте порог:
bash
# По умолчанию 60; повысьте до 70 для меньшего числа ложных срабатываний
sd config set scan.heuristic_threshold 70
  1. Исключите файл или каталог из сканирования:
bash
sd config set scan.exclude_paths '["/path/to/safe-file", "/opt/known-good/"]'
  1. Для ложных срабатываний YARA можно исключить конкретные правила, удалив или закомментировав их в каталоге ~/.prx-sd/yara/.

  2. Белый список через хеш — добавьте SHA-256 файла в локальный список разрешённых (функция в будущем). В качестве обходного решения исключите файл по пути.

TIP

Если вы считаете, что обнаружение является подлинным ложным срабатыванием, пожалуйста, сообщите об этом на github.com/openprx/prx-sd/issues с хешем файла (не самим файлом) и названием правила.

Демон не может запуститься

Симптомы: sd daemon немедленно завершается или sd status показывает «stopped».

Возможные причины:

  • Другой экземпляр уже запущен (существует файл PID)
  • Каталог данных недоступен или повреждён
  • База данных сигнатур отсутствует

Решения:

  1. Проверьте наличие устаревшего файла PID:
bash
cat ~/.prx-sd/prx-sd.pid
# Если указанный PID не запущен, удалите файл
rm ~/.prx-sd/prx-sd.pid
  1. Проверьте статус демона:
bash
sd status
  1. Запустите на переднем плане с debug-логированием для просмотра ошибок запуска:
bash
sd --log-level debug daemon /home /tmp
  1. Убедитесь, что сигнатуры существуют:
bash
sd info
# Если hash_count равен 0, выполните:
sd update
  1. Проверьте права доступа к каталогам:
bash
ls -la ~/.prx-sd/
# Все каталоги должны принадлежать вашему пользователю и быть доступны для записи
  1. Повторно инициализируйте если каталог данных повреждён:
bash
# Создать резервную копию существующих данных
mv ~/.prx-sd ~/.prx-sd.bak

# Повторно запустить любую команду для инициализации первого запуска
sd info

# Повторно загрузить сигнатуры
sd update

Настройка уровня журналирования

Проблема: Вам нужна более подробная диагностическая информация для отладки проблемы.

PRX-SD поддерживает пять уровней журналирования, от наиболее к наименее подробному:

УровеньОписание
traceВсё, включая детали сопоставления YARA для каждого файла
debugПодробные операции движка, загрузка плагинов, поиск хешей
infoПрогресс сканирования, обновления сигнатур, регистрация плагинов
warnПредупреждения и не критические ошибки (по умолчанию)
errorТолько критические ошибки
bash
# Максимальная детализация
sd --log-level trace scan /tmp

# Debug-уровень для устранения неполадок
sd --log-level debug monitor /home

# Перенаправить журналы в файл для анализа
sd --log-level debug scan /home 2> /tmp/prx-sd-debug.log

TIP

Флаг --log-level является глобальным и должен указываться перед подкомандой:

bash
# Правильно
sd --log-level debug scan /tmp

# Неправильно (флаг после подкоманды)
sd scan /tmp --log-level debug

Высокое использование памяти

Симптомы: Процесс sd потребляет больше памяти, чем ожидается, особенно при сканировании больших каталогов.

Возможные причины:

  • Сканирование очень большого числа файлов со многими потоками
  • Правила YARA компилируются в память (38 800+ правил занимают значительную память)
  • Сканирование архивов распаковывает большие сжатые файлы в память
  • WASM-плагины с высокими лимитами max_memory_mb

Решения:

  1. Уменьшите количество потоков (каждый поток загружает собственный YARA-контекст):
bash
sd config set scan.threads 2
  1. Ограничьте максимальный размер файла для пропуска очень больших файлов:
bash
# Ограничить до 50 МиБ
sd config set scan.max_file_size 52428800
  1. Отключите сканирование архивов для систем с ограниченной памятью:
bash
sd config set scan.scan_archives false
  1. Уменьшите глубину архивов:
bash
sd config set scan.max_archive_depth 1
  1. Проверьте лимиты памяти WASM-плагинов — просмотрите ~/.prx-sd/plugins/*/plugin.json на наличие плагинов с высокими значениями max_memory_mb и уменьшите их.

  2. Мониторинг памяти во время сканирований:

bash
# В другом терминале
watch -n 1 'ps aux | grep sd | grep -v grep'
  1. Для демона следите за использованием памяти со временем:
bash
sd status
# Показывает PID; используйте top/htop для отслеживания памяти

Другие распространённые проблемы

Предупреждение «No YARA rules found»

Каталог правил YARA пуст. Повторно запустите начальную настройку или загрузите правила:

bash
sd update
# Или вручную инициируйте настройку, удалив каталог yara:
rm -rf ~/.prx-sd/yara
sd info  # запускает начальную настройку со встроенными правилами

Ошибка «Failed to open signature database»

База данных сигнатур LMDB может быть повреждена:

bash
rm -rf ~/.prx-sd/signatures
sd update

Adblock: «insufficient privileges»

Команды включения/отключения adblock изменяют системный файл hosts и требуют права root:

bash
sudo sd adblock enable
sudo sd adblock disable

Сканирование пропускает файлы с ошибкой «timeout»

Таймауты отдельных файлов по умолчанию составляют 30 секунд. Увеличьте для сложных файлов:

bash
sd config set scan.timeout_per_file_ms 60000

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

Если ни одно из приведённых выше решений не устраняет вашу проблему:

  1. Проверьте существующие issues: github.com/openprx/prx-sd/issues
  2. Создайте новый issue с:
    • Версией PRX-SD (sd info)
    • Операционной системой и версией ядра
    • Выводом debug-журнала (sd --log-level debug ...)
    • Шагами для воспроизведения

Следующие шаги

Released under the Apache-2.0 License.