Навіщо
Коли серверів більше трьох, питання «ми оновилися?» перестає мати однозначну відповідь. Один сервер пропустили, на іншому PHP-FPM не перезапустили, на третьому PHP у контейнері. Нижче — перевірка, яка відповідає на це питання списком.
Головна пастка: номер версії бреше
В Ubuntu, Debian, AlmaLinux виправлення переносять у стару версію, не змінюючи номер. На виправленому сервері php -v покаже 8.3.6 — ту саму цифру, що й на вразливому. Порівнювати номери версій марно: потрібен журнал змін пакета.
Скрипт перевірки
Покладіть список серверів у файл hosts.txt, по одному на рядок, і запустіть:
#!/usr/bin/env bash
set -uo pipefail
while read -r host; do
[ -z "$host" ] && continue
printf '%-28s ' "$host"
ssh -o ConnectTimeout=5 -o BatchMode=yes "$host" '
php_v=$(php -v 2>/dev/null | head -1 | awk "{print \$2}")
ngx_v=$(nginx -v 2>&1 | grep -oE "[0-9]+\.[0-9]+\.[0-9]+")
fixed=ні
if zgrep -lq "CVE-2026-109618" /usr/share/doc/php*/changelog.Debian.gz 2>/dev/null; then
fixed=так
elif rpm -q --changelog php-cli 2>/dev/null | grep -q "CVE-2026-109618"; then
fixed=так
fi
fpm_start=$(ps -eo lstart,cmd 2>/dev/null | grep -m1 "php-fpm: master" | cut -c1-24)
echo "php=${php_v:-ні} латка=$fixed nginx=${ngx_v:-ні} fpm_з=${fpm_start:-ні}"
' 2>/dev/null || echo 'недоступний'
done < hosts.txtЯк читати вивід
| Поле | Що означає |
|---|---|
латка=так | у журналі пакета знайдено номери вразливостей — виправлення встановлено |
латка=ні | або не оновлювалися, або PHP зібрано вручну чи встановлено зі стороннього джерела |
fpm_з | час запуску головного процесу PHP-FPM; якщо він раніший за оновлення, старий код ще в пам'яті |
nginx | 1.30.6 і новіша в стабільній гілці — жовтневий набір закрито |
Що робити з результатом
- Спершу сервери з
латка=ніі відкритим назовні портом 80 або 443. - Потім ті, де латка є, але PHP-FPM запущено раніше за оновлення — їм достатньо перезапуску.
- Окремо — контейнери: скрипт їх не бачить, перевіряйте через
docker exec.
Щоб не повторювалося
Поставте перевірку в cron раз на добу й надсилайте вивід собі. Мовчазний сервер і оновлений сервер виглядають однаково, поки їх не запитати.
Часті запитання
Чому не порівнювати просто номери версій?
Тому що при бекпорті номер не змінюється. Порівняння номерів дасть хибну тривогу на виправлених серверах і хибний спокій там, де PHP зібрано вручну.
Чи потрібен скрипту root?
Ні, читання журналів змін доступне звичайному користувачу.