پرش به محتوا

نصب خودکار وصله‌های امنیتی در Debian با unattended-upgrades

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

Debian 13سطح: مقدماتیبرای: Debian 13، Debian 12به‌روزرسانی: ۱۷ آبان ۱۴۰۵

۱. نصب و فعال‌سازی

bash
sudo apt install -y unattended-upgrades apt-listchanges needrestart
sudo dpkg-reconfigure -plow unattended-upgrades
cat /etc/apt/apt.conf.d/20auto-upgrades

خروجی باید این دو خط باشد:

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

۲. چه چیزی نصب شود

در /etc/apt/apt.conf.d/50unattended-upgrades بخش Origins-Pattern به‌طور پیش‌فرض مخزن امنیتی و به‌روزرسانی‌های نقطه‌ای را دارد. روی سرورهای حساس فقط مخزن امنیتی را نگه دارید و بقیه را comment کنید:

Unattended-Upgrade::Origins-Pattern {
        "origin=Debian,codename=${distro_codename},label=Debian-Security";
        "origin=Debian,codename=${distro_codename}-security,label=Debian-Security";
//      "origin=Debian,codename=${distro_codename}-updates";
};

بسته‌هایی که نباید خودکار به‌روز شوند (مثلاً پایگاه داده‌ای که ارتقایش برنامه‌ریزی می‌خواهد):

Unattended-Upgrade::Package-Blacklist {
    "postgresql-";
    "mariadb-server";
};

۳. راه‌اندازی مجدد و پاک‌سازی

وصله‌ی هسته فقط بعد از راه‌اندازی مجدد اعمال می‌شود. یک پنجره‌ی زمانی آرام انتخاب کنید:

Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-WithUsers "false";
Unattended-Upgrade::Automatic-Reboot-Time "04:00";

روی سرورهای خوشه‌ای، زمان راه‌اندازی مجدد اعضا را متفاوت بگذارید تا همه با هم خاموش نشوند.

۴. گزارش ایمیلی

اگر سرور ایمیل ارسال می‌کند (مثلاً با Postfix به‌صورت relay):

Unattended-Upgrade::Mail "ops@sahor.ir";
Unattended-Upgrade::MailReport "on-change";

۵. آزمایش

bash
sudo unattended-upgrade --dry-run --debug 2>&1 | tail -30
systemctl list-timers 'apt-daily*'

۶. پیگیری

bash
less /var/log/unattended-upgrades/unattended-upgrades.log
ls /var/run/reboot-required 2>/dev/null && cat /var/run/reboot-required.pkgs
sudo needrestart -r l      # list services that still run old libraries

needrestart سرویس‌هایی را که هنوز کتابخانه‌ی قدیمی و آسیب‌پذیر را در حافظه دارند پیدا می‌کند. حتی بدون راه‌اندازی مجدد کل سرور، این سرویس‌ها را باید یک بار restart کرد.