Як оновлювати FreeBSD для безпеки
Дізнайтеся, чому в FreeBSD потрібні дві окремі перевірки: freebsd-update виправляє базову систему, а pkg audit знаходить уразливі пакети.
Як FreeBSD обробляє оновлення безпеки
FreeBSD обробляє оновлення безпеки за допомогою двох окремих інструментів, оскільки сервер FreeBSD складається з двох окремих частин. Базову систему, тобто ядро та userland, що постачаються з релізом, оновлюють за допомогою freebsd-update. Усе, що ви встановили поверх неї, є пакетом, і пакети оновлюють за допомогою pkg. Якщо виконати одну команду та пропустити іншу, половина системи залишиться без виправлень, і система не повідомить вам про це.
SSD Nodes не пропонує образи FreeBSD. Наші плани працюють на Linux. Цей матеріал усе одно актуальний, оскільки аудиторія повністю перетинається: користувачі наших серверів Ubuntu та Debian також запускають FreeBSD на firewall або на єдиному успадкованому сервері. Роздільна модель оновлення — це те, що найчастіше вводить в оману адміністратора Linux, тому її варто описати. Кожну команду, формат advisory і дату завершення підтримки нижче перевірено за сторінкою безпеки FreeBSD та сторінками довідки проєкту в August 2026.
Перед командами важливо зазначити одне. FreeBSD не встановлює sudo у базовій системі. Для всіх описаних дій потрібен root. Використовуйте su - або спочатку встановіть sudo чи doas з пакетів.
Базова система та пакети — окремі світи
В Ubuntu apt відповідає за всю систему. Ядро, openssl, nginx і ваші власні інструменти постачаються як .deb-файли з одного джерела, а apt upgrade оновлює їх разом.
FreeBSD розділяє це на дві частини. Базову систему збирають як один компонент і версіюють як один компонент: 15.1-RELEASE-p3 — це єдиний номер для ядра, бібліотеки C, sshd і копії OpenSSL у /usr/lib. Ніщо з цього не надходить із pkg. Усе інше міститься в /usr/local, надходить як бінарний пакет, зібраний із дерева ports, і має власну версію.
Тому в одній системі можуть бути дві копії OpenSSL: базова копія в /usr/lib, яку виправляє лише freebsd-update, і пакетна копія в /usr/local/lib, яку виправляє лише pkg. Яку копію використовує програма, залежить від того, з якою копією її було зв’язано. Програмне забезпечення, встановлене з пакетів, зазвичай використовує пакетну копію. Оновлення однієї копії нічого не змінює в іншій.
Три команди показують поточний стан системи:
freebsd-version -u
freebsd-version -k
uname -rfreebsd-version -u виводить рівень виправлень встановленого userland. freebsd-version -k виводить рівень виправлень встановленого ядра, а freebsd-version(1) чітко пояснює, чому це не те саме, що uname: «якщо нове ядро вже встановлено, але систему ще не перезавантажено, freebsd-version виведе версію та рівень виправлень нового ядра». uname -r виводить ядро, яке працює зараз. Є також freebsd-version -r, яка виводить запущене ядро, але «не залежить від змінних середовища». Це важливо всередині jail, де UNAME_r часто має інше значення.
Повідомлення про безпеку та виправлення
Команда FreeBSD Security Team публікує два типи повідомлень, і вони мають різне призначення.
Security Advisory стосується вразливості системи безпеки в базовій системі. Ідентифікатор має такий вигляд: FreeBSD-SA-26:55.elf: літери SA, дві цифри року, порядковий номер у межах цього року, а потім назва вразливого компонента. FreeBSD-SA-26:52.if_wg і FreeBSD-SA-26:50.kqueue опубліковано 2026-07-29. Повний список наведено на сторінці повідомлень FreeBSD про безпеку.
Errata Notice стосується проблеми з коректністю роботи або стабільністю, яку доцільно виправити у гілці випуску, але яка не має наслідків для безпеки. Формат такий самий, але замість SA використовується EN: FreeBSD-EN-26:19.zfs, FreeBSD-EN-26:18.tzdata. Класичний приклад — оновлення даних часових поясів. Застарілі дані часових поясів не дають зловмиснику змоги атакувати систему, але часові позначки залишатимуться неправильними, доки ви не встановите виправлення. Список виправлень наведено на сторінці повідомлень FreeBSD про виправлення.
Обидва типи повідомлень підписують ключем PGP (pretty good privacy) Security Officer і архівують у security.FreeBSD.org, а на вашу машину їх доставляє freebsd-update.
Ось що часто стає несподіванкою для адміністраторів Linux. Жоден із цих типів повідомлень не стосується пакетів. На сторінці безпеки це чітко зазначено: проблеми у FreeBSD Ports Collection «розглядаються окремо в документі FreeBSD VuXML». Віддалена вразливість у пакеті nginx ніколи не отримає номера SA. Якщо ви моніторите лише стрічку повідомлень про безпеку, ви ніколи про неї не дізнаєтеся.
Як дізнатися про оновлення безпеки FreeBSD?
Приєднайтеся до списку freebsd-security-notifications. Він модерований і має невеликий обсяг повідомлень. У ньому публікують самі рекомендації з безпеки та повідомлення про виправлення. Підписатися можна на lists.freebsd.org.
Список freebsd-announce також модерований. У ньому публікують рекомендації з безпеки разом з оголошеннями про випуски. Він підходить, якщо ви хочете отримувати все в одному списку. freebsd-security — це список для обговорень. Його корисно читати, але саме в ньому не слід шукати повідомлення про необхідність встановити виправлення.
Усі ці списки містять лише новини про базову систему. Інформація про вразливості пакетів електронною поштою не надходить. Її потрібно перевіряти за допомогою команди.
pkg audit і база даних, що лежить в її основі
VuXML, Vulnerabilities and Exposures Markup Language, — це реєстр проекту FreeBSD із записами про проблеми безпеки в портах і пакетах. Кожен запис містить назву вразливого пакета, діапазони версій із вразливістю, ідентифікатори CVE (common vulnerabilities and exposures) і короткий опис. Увесь набір записів можна переглянути в індексі VuXML, відсортованому за пакетом, CVE або датою.
pkg audit — це інструмент, який читає цю базу:
pkg audit -F-F спочатку завантажує свіжу копію бази даних, а потім виконує перевірку. Використовуйте цей прапорець щоразу. Без -F перевірка виконується за тією копією, яка вже є на машині. Вона може бути застарілою на кілька місяців, тому чистий результат нічого не означає. Команда порівнює версію кожного встановленого пакета з кожним записом VuXML, виводить кожен збіг із номерами CVE та посиланням на сторінку VuXML, а потім додає рядок із кількістю знайдених проблем і кількістю перевірених встановлених пакетів.
Варто знати ще два прапорці з pkg-audit(8). pkg audit -r також «виводить пакети, які залежать від вразливих пакетів і тому теж потенційно вразливі». Так можна визначити, що вразлива бібліотека має значення, оскільки її використовують шість встановлених програм. pkg audit -R виводить той самий результат у форматі JSON або іншому машинному форматі. Саме цей результат передають у перевірку системи моніторингу.
Пакет pkg встановлює періодичний скрипт у /usr/local/etc/periodic/security/410.pkg-audit. Він запускається як частина щоденної перевірки безпеки та надсилає результат на root. Переконайтеся, що його ввімкнено, перевіривши рядок у /etc/periodic.conf:
daily_status_security_pkgaudit_enable="YES"Цей щоденний лист — найближчий аналог звички використовувати unattended-upgrades в Ubuntu, і саме в цьому полягає принципова різниця: unattended-upgrades встановлює виправлення, поки ви спите, а pkg audit лише повідомляє, що виправлення потрібне. pkg audit лише формує звіт. Він не встановлює виправлення. Стандартна система FreeBSD не встановлює оновлення безпеки без вашої участі.
Усунення вразливості пакета
pkg update
pkg upgradeУ репозиторіях пакетів FreeBSD немає окремого репозиторію лише для оновлень безпеки. Ubuntu може отримувати пакети лише з noble-security, залишаючи всі інші пакети без змін. У FreeBSD немає еквівалентного механізму, тому виправлення вразливості одного пакета означає встановлення версії, яку наразі пропонує репозиторій, разом із усіма залежностями, що оновилися разом із ним. Плануйте встановлення виправлень для пакетів як окрему зміну, а не як фонове завдання.
Швидкість надходження виправлення залежить від гілки репозиторію, яку ви використовуєте. За замовчуванням використовується quarterly-гілка, яку посібник описує як таку, що забезпечує «передбачуваніший і стабільніший процес», приймаючи лише оновлення без нових функцій. latest-гілка містить найновіші версії всіх пакетів. Тому якщо pkg audit -F повідомляє, що пакет вразливий, а pkg upgrade — що оновлювати нічого, виправлення ще не потрапило до вашої гілки. Саме це спричиняє таку суперечність.
Щоб перевести систему на latest-гілку, скопіюйте файл репозиторію, який постачається із системою, і відредагуйте копію:
mkdir -p /usr/local/etc/pkg/repos
cp /etc/pkg/FreeBSD.conf /usr/local/etc/pkg/repos/FreeBSD.confЗамініть quarterly на latest у рядку url копії, потім виконайте pkg update -f, щоб отримати новий каталог пакетів. Копіюйте файл, а не вводьте назву репозиторію з пам’яті: назва всередині /etc/pkg/FreeBSD.conf — це назва, яку фактично використовує ваша система, а файл у /usr/local/etc/pkg/repos перевизначає лише репозиторій, назва якого збігається з нею точно.
Застосування базових оновлень системи
freebsd-update fetch
freebsd-update installfetch завантажує оновлення для поточного випуску та виводить список файлів, які буде змінено. Якщо оновлювати нічого, команда виводить No updates needed to update system to 15.1-RELEASE-p3. і завершує роботу. Якщо оновлення є, команда завершує роботу вказівкою виконати команду встановлення. Оновлення не застосовуються, доки ви не виконаєте freebsd-update install, тому fetch безпечно запускати будь-коли.
freebsd-update(8) надає бінарні оновлення для версій ALPHA, BETA, RC і RELEASE, але не для PRERELEASE, STABLE або CURRENT. Якщо ви використовуєте stable/15, систему потрібно збирати з вихідного коду, і цей інструмент вам не потрібен.
Автоматизуйте завантаження, але встановлення виконуйте вручну. Рядок з handbook для /etc/crontab:
@daily root freebsd-update cronfreebsd-update cron очікує випадковий проміжок часу від 1 до 3600 секунд, потім завантажує оновлення так само, як fetch, і надсилає root повідомлення, коли оновлення готові до встановлення. Випадкова затримка потрібна, щоб усі FreeBSD-машини в інтернеті не зверталися до дзеркал оновлень в одну й ту саму секунду.
Два моменти у виведенні часто вводять в оману. src component not installed, skipped є нормальним повідомленням на сервері без дерева вихідного коду і не означає помилку. Набір компонентів визначається рядком Components у /etc/freebsd-update.conf. Доступні значення: src, world і kernel.
Якщо встановлення завершилося помилкою, freebsd-update rollback видаляє нещодавно встановлені оновлення. У системі з root на ZFS можна зробити краще: спочатку створити boot environment:
bectl create pre-patch
freebsd-update fetch installЯкщо система після встановлення оновлень не завантажується, виберіть старе boot environment у меню loader і поверніться до попереднього стану. Така можливість відновлення є однією з практичних причин використовувати ZFS як root файлову систему, а місця на диску вона майже не займає, доки два середовища не почнуть відрізнятися.
Чи підтримується ще мій випуск FreeBSD?
Кожен випуск підтримується протягом фіксованого періоду. Цей період опубліковано у вигляді таблиці гілок на сторінці безпеки. Станом на August 2026 таблиця має такий вигляд:
releng/15.1, тобто 15.1-RELEASE, до 31 March 2027releng/15.0, тобто 15.0-RELEASE, до 30 September 2026releng/14.4, тобто 14.4-RELEASE, до 31 December 2026stable/15до 31 December 2029stable/14до 30 November 2028
Для проміжних випусків передбачено короткі періоди підтримки. Термін підтримки 15.0-RELEASE спливає приблизно через сім тижнів після написання цієї статті, оскільки вийшов 15.1 і запустив для нього відлік. Стабільні гілки існують роками. Це гілки вихідного коду, які freebsd-update не обслуговує.
Перевірте свій випуск за допомогою freebsd-version -u і порівняйте результат із таблицею. freebsd-update також виводить попередження. Коли дата наближається, fetch виводить:
WARNING: FreeBSD 15.0-RELEASE is approaching its End-of-Life date.
It is strongly recommended that you upgrade to a newer
release within the next 2 months.Після настання цієї дати попередження змінюється на WARNING: FreeBSD 15.0-RELEASE HAS PASSED ITS END-OF-LIFE DATE. Непідтримуваний випуск продовжує працювати. Він перестає отримувати повідомлення безпеки. Це означає, що наступна вразливість у базовій системі залишиться невиправленою.
Оновлення до нового випуску виконується так: freebsd-update -r 15.1-RELEASE upgrade, потім freebsd-update install, потім перезавантаження, потім freebsd-update install ще раз, потім pkg-static upgrade -f, щоб перевстановити всі пакети з новими бібліотеками, і нарешті freebsd-update install. У handbook зазначено, що замість трьох етапів встановлення може бути лише два. Це залежить від того, чи змінювалися номери версій бібліотек. Заплануйте вікно технічного обслуговування та перед початком прочитайте посібник із налаштування сервера FreeBSD 15.
Перезавантаження чи достатньо перезапустити службу?
FreeBSD дає відповідь за допомогою одного порівняння:
freebsd-version -k
uname -rfreebsd-version -k — це ядро на диску. uname -r — це ядро в пам’яті. Різні рядки означають, що встановлено нове ядро, але система його ще не використовує, тому потрібно перезавантажити сервер. Однакові рядки означають, що патч не змінював ядро, тому перезавантаження нічого не дасть.
Для патчу userland перезапустіть усі процеси, які використовують змінений код. Виправлення базового OpenSSL у /usr/lib нічого не змінить для sshd, запущеного три тижні тому, якщо він досі має стару бібліотеку, відображену у своєму адресному просторі. Файл на диску вже новий. Запущений процес — ні.
service sshd restartЦе саме правило діє і для пакетів. pkg upgrade замінює двійковий файл на диску, але запущений процес продовжує використовувати стару відкриту копію, тому service nginx restart — це крок, який фактично застосовує виправлення.
У базовій системі немає аналога Debian needrestart, тому система не показує запитів і не веде списку. Відстежуйте, які служби підключають змінену бібліотеку, або перезавантажуйте сервер після кожного патчу, що змінює базові бібліотеки. На сервері, конфігурація якого зберігається в системі контролю версій, перезавантаження є штатною операцією. Це значно дешевше, ніж вважати систему оновленою, коли це не так.
Виправлення системи, на якій працюють jail
Jail використовує ядро хоста, тому рекомендація щодо безпеки ядра стосується хоста, а кожен jail на цьому сервері успадковує вразливість. Встановіть виправлення на хост і перезавантажте його — після цього частину, пов’язану з ядром, буде виправлено для всіх jail. Userland усередині кожного jail є окремою інсталяцією зі своїм рівнем оновлень, і freebsd-version -j <jail> повідомляє про нього з хоста. Пакети всередині jail також є окремими, а pkg -j <jail> audit -F перевіряє їх без входу до jail. Такий спільний kernel і окремий userland — це та сама структурна відмінність, яка визначає порівняння jail із Docker-контейнерами.
Переклад для Ubuntu
Кожна звичка у FreeBSD має відповідник, тому цю процедуру можна виконувати в обох системах.
- Виправлення базової системи:
freebsd-update fetch, потімfreebsd-update install. В Ubuntu використовуйтеapt update && apt upgrade, яка одночасно оновлює базову систему та все інше. - Стороннє програмне забезпечення: у FreeBSD —
pkg update && pkg upgrade. В Ubuntu знову використовуйтеapt. - Перевірка відомих вразливостей: у FreeBSD —
pkg audit -F. В Ubuntu 24.04 найближчим відповідником єpro security-status. Вона показує оновлення безпеки для встановлених пакетів, зокрема вміст Expanded Security Maintenance. - Автоматичне встановлення:
unattended-upgradesв Ubuntu автоматично встановлює оновлення безпеки. У FreeBSD немає прямого відповідника, томуfreebsd-update cronзавантажує дані та надсилає їх електронною поштою, а пакети ви встановлюєте вручну. - Стрічка повідомлень безпеки:
freebsd-security-notificationsмістить записи FreeBSD-SA і FreeBSD-EN.ubuntu-security-announceмістить Ubuntu Security Notices. - База даних вразливостей: VuXML для портів і пакетів FreeBSD. Для пакетів Ubuntu — Ubuntu CVE tracker.
- Перевірка потреби в перезавантаженні: у FreeBSD виконайте
freebsd-version -kдля перевіркиuname -r. В Ubuntu перевіряйте наявність/var/run/reboot-required. - Період підтримки: таблиця гілок на сторінці безпеки FreeBSD. В Ubuntu — графік випусків і
pro security-status.
Основна процедура в обох системах однакова: підписатися на стрічку, регулярно запускати аудит, а потім вирішувати, що встановлювати та коли виконувати перезапуск. У FreeBSD другу частину потрібно виконувати явно, оскільки система не робить цього автоматично. У розділі Ширше порівняння Linux і FreeBSD як серверних платформ описано інші зміни, які виникають під час перенесення робочого навантаження між цими системами.
FAQ
Чи виправляє freebsd-update також мої пакети?
Ні. freebsd-update охоплює лише базову систему, тобто ядро та userland, що постачаються з релізом. Програмне забезпечення, встановлене в /usr/local, надходить із пакетів і виправляється за допомогою pkg upgrade. Виконайте pkg audit -F, щоб визначити, які встановлені пакети мають відомі вразливості, оскільки базові повідомлення про безпеку їх ніколи не згадують, а списки розсилки з питань безпеки ніколи не оголошують про них.
Як визначити, чи потребує оновлення FreeBSD перезавантаження?
Порівняйте freebsd-version -k із uname -r. Перша команда виводить ядро, встановлене на диску, зокрема ядро, яке щойно записано, але ще не завантажено. Друга команда виводить ядро, що працює зараз. Різні рядки означають, що потрібно перезавантажити систему. Однакові рядки означають, що виправлення стосувалося лише userland, тому замість цього перезапустіть відповідні сервіси, наприклад service sshd restart, оскільки запущений процес продовжує використовувати стару бібліотеку, відображену в пам’ять, доки його не перезапустити.
У чому різниця між Security Advisory і Errata Notice?
Security Advisory, наприклад FreeBSD-SA-26:55.elf, виправляє вразливість системи безпеки в базовій системі. Errata Notice, наприклад FreeBSD-EN-26:18.tzdata, виправляє проблему коректності або стабільності, яка не має наслідків для безпеки, наприклад застарілі дані часових поясів. Обидва типи повідомлень використовують формат «рік, двокрапка, порядковий номер, компонент». Обидва підписує Security Officer, і їх доставляє freebsd-update; жоден із них не стосується програмного забезпечення, встановленого з ports або пакетів.
Чи є у FreeBSD еквівалент unattended-upgrades?
У базовій системі такого засобу немає. freebsd-update cron завантажує доступні виправлення базової системи й надсилає повідомлення root, але ніколи не встановлює їх. Скрипт periodic, який встановлює pkg, щодня запускає pkg audit і надсилає результат, але ніколи нічого не оновлює. Автоматичне встановлення доведеться самостійно реалізувати за допомогою cron job, а оскільки оновлення пакета FreeBSD встановлює найновішу версію, а не backport лише виправлення безпеки, більшість адміністраторів читають повідомлення та встановлюють оновлення вручну.
Як перевірити, чи мій реліз FreeBSD усе ще підтримується?
Виконайте freebsd-version -u, щоб отримати версію userland, а потім порівняйте її з таблицею підтримуваних гілок на сторінці безпеки FreeBSD. Точкові релізи мають короткі періоди підтримки: станом на August 2026, 15.0-RELEASE завершує підтримку 30 September 2026, а 15.1-RELEASE підтримується до 31 March 2027. freebsd-update fetch попереджає, коли ця дата наближається, а після її настання виводить рядок про те, що реліз HAS PASSED ITS END-OF-LIFE DATE. Після цього подальші повідомлення про безпеку на вас не поширюються.