KakapoWPKakapoWP
ВходПопробовать
Справочный центр/Security/Настройка наблюдателя за файлами

Настройка наблюдателя за файлами

Относится к: Kakapo Security·5 мин чтения

Первичная фиксация: создать эталон

При первом запуске сравнивать не с чем — вместо этого проход создаёт эталон: к каждому файлу контрольная сумма (sha256, где PHP её приносит с собой, иначе md5), плюс размер, время изменения и раздел. Это идёт порциями, по умолчанию до 400 файлов или 5 секунд на шаг; ты можешь закрыть окно и продолжить позже. Процента при первичной фиксации нет, потому что общего числа ещё никто не знает — показываются прочитанные файлы и открытые каталоги. Важно заранее: сторож запоминает то, что застаёт, и считает это правильным. Если ты не уверен в установке, запусти сначала проверку целостности файлов (ядро против WordPress.org) и сканирование на вредоносный код. После переезда или восстановления «Отбросить эталон» — чистый путь: все контрольные суммы и находки исчезают, следующий проход фиксирует заново. Это необратимо.

Что проверяется — и что нет

Проверяется дерево начиная с каталога WordPress. Если wp-content или каталог плагинов лежит у твоего хостера снаружи, он добавляется как отдельный корень и получает в отображении собственный префикс. Файл wp-config.php, лежащий на уровень выше установки, включается как именованный отдельный файл и проверяется первым в начале каждого прохода — сам родительский каталог намеренно не обходится, у большинства хостеров там лежат чужие установки и резервные копии. По умолчанию исключены каталог загрузок и 15 встроенных шаблонов кеша, временных файлов и протоколов (среди прочего wp-content/cache, wp-content/upgrade, node_modules, .git, *.log); оба переключателя ты можешь отключить, тогда проход длится дольше и каждая загрузка изображения порождает находку. Собственные шаблоны ты добавляешь в список исключений: до 100 записей, каждая не длиннее 200 символов. Шаблон без косой черты попадает в каждый участок пути с этим именем, шаблон с косой чертой закреплён у корня, * действует внутри одного участка. Шаблон, который подходит ко всем примерам путей, отклоняется — он отключил бы наблюдение так, что по списку этого не увидеть. При внесении подсчитывается и показывается, сколько файлов текущего эталона под него попадает. Не читаются файлы сверх предела размера (по умолчанию 16 МБ, настраивается от 1 до 512), нечитаемые файлы и всё, что лежит за символьной ссылкой — эти случаи стоят в результате отдельными числами и заведомо не считаются «отсутствует».

Читать и применять находки

Есть три вида: изменён, новый, отсутствует. На каждый файл в списке стоит не более одной открытой находки, с первой фиксацией, последней фиксацией и счётчиком. Сравнение идёт с последним подтверждённым эталоном, а не с последним проходом — поэтому находка остаётся, пока ты её не применишь. Если содержимое само собой снова совпадает с эталоном (обновление откачено, файл возвращён), находка исчезает; о новом файле, о котором сообщалось и которого снова нет, пишется строка с путём в протокол активности, вместо того чтобы тихо удалить её. «Применить эталон» сначала показывает, что произойдёт, а затем работает блоками по 500: изменённые файлы получают свою новую контрольную сумму, новые добавляются, отсутствующие выпадают. С самими файлами ничего не происходит — но старой контрольной суммы после этого нет, поэтому просмотри всё, чему ты не можешь дать объяснение, прежде чем нажать. Для архива есть экспорт CSV с числом до 2000 открытых находок вместе со старой и новой контрольной суммой. Две границы тебе стоит знать: свыше 3000 открытых находок счёт продолжается, но больше ничего не сохраняется (интерфейс об этом говорит), а из истории остаются 500 самых свежих применённых находок. Прерванный проход не определяет отсутствующие файлы — для этого нужен полный прогон.

Немедленное уведомление при чувствительных файлах

По умолчанию включено. «Чувствительный» означает здесь не «важный», а: тот, кто может изменить этот файл, выполняет собственный код или добирается до учётных данных. Это wp-config.php, конфигурации сервера (.htaccess, .htpasswd, .user.ini, php.ini, web.config), drop-in-файлы (db.php, object-cache.php, advanced-cache.php, sunrise.php и родственные), mu-плагины, а также PHP-файлы в местах, где их быть не должно: в каталоге загрузок, в корне WordPress и в wp-content за пределами plugins и themes. Эти уведомления уходят в конце каждой порции, а не только в конце прохода — на большой установке между ними лежат часы. Минимальный интервал по умолчанию стоит на 15 минутах (настраивается от 0 до 1440); то, что добавляется за это время, собирается и уходит со следующим уведомлением, ничего не теряется. Одно уведомление перечисляет не более 200 записей, остальное называется числом. В конце прохода и при прерывании остаток отправляется без оглядки на интервал. Проверь путь один раз пробным уведомлением: оно прямо скажет тебе, приняла ли wp_mail() сообщение или отклонила — будет ли оно доставлено, решает сервер за ней. Собственные шаблоны ты можешь дополнительно внести как чувствительные; открытые находки при этом сразу классифицируются заново, чтобы список не показывал две правды.

Автоматика и расписание

По умолчанию проход выполняется только тогда, когда ты его запускаешь. Если ты включаешь автоматику, ты выбираешь между «ежечасно», «дважды в день», «ежедневно» (по умолчанию) и «еженедельно». Первый срок намеренно лежит на 5 минут в будущем, чтобы проход не запустился посреди твоей работы в панели управления. Отсчёт идёт от начала последнего прохода, с допуском в 5 минут — иначе длинный проход с каждым разом шёл бы реже. Cron отрабатывает те же самые порции и перепланирует себя каждые 30 секунд, пока что-то остаётся открытым; если ты сейчас едешь сам в браузере, он ждёт 120 секунд и не хватается за руль. Двух водителей на одном задании исключает токен, который передаётся дальше с каждым ответом; блокировка истекает через 60 секунд, чтобы захлопнутый браузер не блокировал задание навсегда. Если в твоей установке задано DISABLE_WP_CRON, сообщение при включении скажет тебе, что проход стартует только тогда, когда wp-cron.php вызывается извне — то есть когда настроено серверное задание cron.

Эта статья оказалась полезной?