بیشتر نفوذهای کامیاب به سرورها نه از راه بهره‌برداری‌های زیرکانه بلکه از راه آسیب‌پذیری‌ای رخ می‌دهند که وصله‌اش ماه‌ها پیش‌تر بیرون آمده بود. علت معمولاً تنبلی نیست: به‌روزرسانی دستی روی سروری که کار می‌کند ترسناک است، چون apt upgrade گاهی چیزهایی را بازراه‌اندازی می‌کند که کسی نخواسته بود. به‌روزرسانی‌های خودکار این پرونده را می‌بندند، اما آوازه بدی دارند — آوازه‌ای که درست به همان اندازه سزاوارش هستند که با شتاب تنظیم شوند.

بیایید چیدمانی را ببینیم که در آن وصله‌های امنیتی خودشان می‌رسند و نسخه PHP یک‌شبه عوض نمی‌شود.

نصب

sudo apt install unattended-upgrades apt-listchanges
sudo dpkg-reconfigure -plow unattended-upgrades

این گفت‌وگو فایل /etc/apt/apt.conf.d/20auto-upgrades را می‌سازد. بررسی کنید از آن چه بیرون آمده است:

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

یک‌ها یعنی «روزانه». و همه اینها را زمان‌سنج systemd می‌گرداند نه cron کلاسیک:

systemctl list-timers | grep apt

مهم‌ترین نکته: تنها امنیت

فایل اصلی /etc/apt/apt.conf.d/50unattended-upgrades است. در آن فهرستی از Allowed-Origins هست (در Debian Origins-Pattern)، و به‌صورت پیش‌فرض تنها مخزن امنیتی آنجا فعال است. همان‌گونه رهایش کنید.

وسوسه برداشتن نشانه توضیح از سطر -updates — «بگذار همه‌چیز به‌روز شود» — نیرومند است. این کار را نکنید: مخزن به‌روزرسانی‌ها نسخه‌های تازه می‌آورد نه تنها اصلاح‌ها، و شگفتی‌های شبانه دقیقاً از همان‌جا می‌آیند. امنیت و تازگی دو کار جداگانه‌اند، و دومی را بهتر است با دست انجام دهید در حالی که پشت صفحه‌کلید هستید.

اگر بسته‌ای نباید خودکار به‌روز شود، فهرست سیاهی برایش هست:

Unattended-Upgrade::Package-Blacklist {
    "mariadb-server";
    "php8.3-fpm";
};

آگاهانه به کارش ببرید: هر سطر اینجا یعنی «این را خودم به‌روز می‌کنم» — و این وعده‌ای است که باید به آن وفا کنید.

بازراه‌اندازی‌ها

سطر کلیدی:

Unattended-Upgrade::Automatic-Reboot "false";

نگه‌داشتن آن روی false برای سروری که سایتی دارد درست است: بازراه‌اندازی نااعلام در ساعت سه بامداد بدتر از وصله‌ای است که یک روز به تعویق افتاده. اما این تصمیم نیمه دومی الزامی دارد، و همان نیمه است که فراموش می‌شود.

وقتی هسته یا libc یا openssl به‌روز می‌شود، سامانه فایل /var/run/reboot-required را می‌سازد. تا وقتی بازراه‌اندازی رخ ندهد، نسخه اصلاح‌شده روی دیسک است و نسخه کهنه در حافظه اجرا می‌شود — یعنی آسیب‌پذیری هیچ‌جا نرفته، هرچند بسته به‌روزشده شمرده می‌شود. صریح بررسی کنید:

ls -l /var/run/reboot-required
cat /var/run/reboot-required.pkgs

فایل دوم دقیقاً برمی‌شمارد چه چیزی بازراه‌اندازی را ضروری کرده است. قاعده ساده است: پرچم را که دیدید، پنجره‌ای در یکی دو روز آینده برنامه‌ریزی کنید، نه «زمانی».

کتابخانه‌ها حالتی جداگانه‌اند. openssl به‌روز می‌شود در حالی که nginx و PHP-FPM با نسخه کهنه در حافظه به کار ادامه می‌دهند، و هیچ پرچم بازراه‌اندازی‌ای پیدا نمی‌شود. اینکه چه کسی به بازراه‌اندازی نیاز دارد را needrestart نشان می‌دهد:

sudo apt install needrestart
sudo needrestart -b

تنها آن را در حالت «گزارش بده، نپرس» بگذارید — وگرنه میان یک نصب غیرتعاملی پرسش‌ها را آغاز می‌کند و آن را معلق می‌گذارد. برای این کار فایلی در /etc/needrestart/conf.d/ با سطر $nrconf{restart} = 'l'; بگذارید.

بررسی کنید که اصلاً کار می‌کند

اجرای آزمایشی بدون نصب:

sudo unattended-upgrade --dry-run --debug

خروجی نشان می‌دهد کدام بسته‌ها با قواعد همخوان‌اند و کدام‌ها و چرا رد شده‌اند. و آنچه واقعاً رخ داده در گزارش‌هاست:

sudo tail -50 /var/log/unattended-upgrades/unattended-upgrades.log

چند به‌روزرسانی هم‌اکنون در انتظارند:

apt list --upgradable 2>/dev/null | grep -i security

این فرمان آخر سودمندترینِ همه است. به‌روزرسانی‌های خودکارِ تنظیم‌شده عادت دارند بی‌صدا خراب شوند: /boot پر شده، مخزنی کلیدش را عوض کرده، زمان‌سنج پس از ویرایشی دستی خاموش شده. از بیرون همه‌چیز خوب است و ماه‌هاست وصله‌ای نصب نشده.

فضای /boot

کلاسیک است: هسته‌های کهنه حذف نمی‌شوند، پارتیشن /boot پر می‌شود، نصب هسته تازه شکست می‌خورد، و به‌روزرسانی‌ها یکسره می‌ایستند. هر چند ماه یک‌بار ارزش نگاهی دارد:

df -h /boot
sudo apt autoremove --purge

یا پاک‌سازی خودکار را در همان 50unattended-upgrades فعال کنید: Remove-Unused-Kernel-Packages "true" و Remove-Unused-Dependencies "true".

چه چیزی برای انسان می‌ماند

به‌روزرسانی‌های خودکار روزمرگی را برمی‌دارند نه پایش را. دو پرسش که باید هر لحظه بتوانید پاسخشان دهید: چند به‌روزرسانی امنیتی در انتظار است، و آیا پرچم بازراه‌اندازی برافراشته شده. هر دو پاسخ یک سطر در یک صفحه‌اند، و تمام معنا آن است که این سطر خودش به چشمتان بیاید نه اینکه به ابتکار خودتان هر سه ماه یک‌بار دنبالش بگردید.