Vì sao cần Auto update security patch ngay?
Quản trị máy chủ VPS đòi hỏi bạn phải liên tục theo dõi các lỗ hổng bảo mật (CVE) mới nhất. Việc quên hoặc chậm trễ cập nhật các bản vá (security patch) có thể khiến hệ thống của bạn trở thành mục tiêu béo bở cho hacker. Nếu bạn đang quản lý hàng chục VPS, việc SSH vào từng máy để gõ lệnh update mỗi ngày là một cơn ác mộng.
Sử dụng unattended-upgrades giúp bạn tự động hóa hoàn toàn quy trình này. Hệ thống sẽ tự động tải và cài đặt các bản vá bảo mật ngay khi chúng được phát hành.
- 🚨 Ngăn chặn Zero-day exploit: Giảm thiểu tối đa “cửa sổ thời gian” từ lúc lỗ hổng được công bố đến khi máy chủ được vá.
- ⏳ Tiết kiệm thời gian: Không còn phải thức đêm canh me lịch bảo trì để chạy lệnh
apt upgradethủ công. - 🎯 Độ chính xác cao: Chỉ cập nhật các gói bảo mật quan trọng, không tự ý nâng cấp các phần mềm khác gây lỗi hệ thống.
- 📊 Dễ dàng theo dõi: Tự động gửi email thông báo hoặc ghi log chi tiết sau mỗi lần cập nhật thành công.
1. Cài đặt và kích hoạt dịch vụ cốt lõi
Tóm gọn: Bạn cần cài đặt gói unattended-upgrades và cấu hình tần suất chạy tự động thông qua file hệ thống của APT.
Cài đặt package trên Ubuntu 22.04/24.04
Mặc định, trên các phiên bản Ubuntu Server mới, gói này thường đã được cài sẵn. Tuy nhiên, bạn vẫn nên chạy lệnh sau để đảm bảo hệ thống có đầy đủ các công cụ cần thiết. Chúng ta sẽ cài thêm apt-listchanges để xem chi tiết những thay đổi trong bản vá.
sudo apt update
sudo apt install unattended-upgrades apt-listchanges -y
unattended-upgrades: Package chính chịu trách nhiệm thực thi việc cập nhật ngầm.apt-listchanges: Công cụ hỗ trợ so sánh và hiển thị các thay đổi (changelog) trước khi cài đặt.-y: Tự động đồng ý với các prompt trong quá trình cài đặt.
Kích hoạt bằng dpkg-reconfigure
Sau khi cài đặt, bạn cần bật tính năng này lên một cách chính thức. Lệnh dpkg-reconfigure sẽ tạo ra các file cấu hình cron tự động cho APT.
sudo dpkg-reconfigure -plow unattended-upgrades
Màn hình terminal sẽ hiển thị một giao diện màu hồng/xanh đặc trưng của Debian/Ubuntu. Bạn hãy chọn Yes (Có) và nhấn Enter.
Creating config file /etc/apt/apt.conf.d/20auto-upgrades with new version
Kiểm tra file cấu hình tần suất
Hệ thống vừa tự động tạo ra file 20auto-upgrades. Bạn có thể kiểm tra nội dung file này để xem tần suất hoạt động.
cat /etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
Update-Package-Lists "1": Tự động chạy lệnhapt updatemỗi 1 ngày.Unattended-Upgrade "1": Tự động chạy tiến trình kiểm tra và cài đặt bản vá mỗi 1 ngày.
💡 Mẹo: Nếu bạn muốn hệ thống kiểm tra cập nhật 2 lần một ngày (mỗi 12 tiếng), bạn không thể chỉnh số “1” thành “0.5”. Thay vào đó, bạn phải can thiệp vào systemd timer của
apt-daily.timer. Đối với mức độ Intermediate, giữ nguyên “1” (1 ngày/lần) là cấu hình tối ưu và an toàn nhất.
2. Cấu hình Repository chỉ nhận Security Patch
Tóm gọn: Cấu hình mặc định có thể vô tình cập nhật cả những phần mềm không liên quan đến bảo mật, do đó bạn phải giới hạn nguồn cập nhật (Origin/Suite) một cách nghiêm ngặt.
Chỉnh sửa file 50unattended-upgrades
Toàn bộ “bộ não” của quá trình tự động cập nhật nằm trong file 50unattended-upgrades. Bạn cần mở file này bằng trình soạn thảo nano hoặc vim.
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
Tìm đến block Unattended-Upgrade::Allowed-Origins. Đây là nơi khai báo các kho phần mềm (repository) được phép tự động cài đặt.
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}";
"${distro_id}:${distro_codename}-security";
// Extended Security Maintenance; doesn't necessarily exist for
// every release and this system may not have it installed, but if
// available, the policy for updates is such that unattended-upgrades
// should also install from here by default.
"${distro_id}ESMApps:${distro_codename}-apps-security";
"${distro_id}ESM:${distro_codename}-infra-security";
// "${distro_id}:${distro_codename}-updates";
// "${distro_id}:${distro_codename}-proposed";
// "${distro_id}:${distro_codename}-backports";
};
${distro_id}: Biến đại diện cho tên HĐH (ví dụ: Ubuntu).${distro_codename}: Biến đại diện cho phiên bản (ví dụ: jammy cho 22.04, noble cho 24.04).-security: Hậu tố chỉ định đây là kho chứa các bản vá lỗi bảo mật khẩn cấp.//: Dấu comment (bỏ qua dòng lệnh).
⚠️ Cảnh báo: Tuyệt đối không bỏ comment (xóa dấu
//) ở dòng có chứa-updateshoặc-backportsnếu bạn đang chạy các service nhạy cảm với phiên bản như Database hay Web Server. Việc tự động nâng cấp tính năng (feature update) có thể làm sập ứng dụng của bạn ngay trong đêm.
3. Loại trừ các package quan trọng (Blacklisting)
Tóm gọn: Dùng tính năng Package-Blacklist để ngăn chặn việc tự động nâng cấp các dịch vụ cốt lõi như NGINX, Docker hay MySQL, tránh nguy cơ downtime ngoài ý muốn.
Cấu hình Unattended-Upgrade::Package-Blacklist
Ngay bên dưới phần Allowed-Origins trong file 50unattended-upgrades, bạn sẽ thấy một block tên là Package-Blacklist. Hãy bỏ comment và thêm các package bạn muốn “đóng băng” phiên bản.
Unattended-Upgrade::Package-Blacklist {
"nginx";
"docker-ce";
"docker-ce-cli";
"mysql-server";
"mysql-client";
"redis*";
"libc6";
"libc6-dev";
};
"nginx": Chặn cập nhật chính xác package có tên là nginx."redis*": Sử dụng dấu sao (*) như một wildcard để chặn mọi package bắt đầu bằng chữ redis."libc6": Chặn cập nhật thư viện C cốt lõi của hệ thống, vì nâng cấp thư viện này thường yêu cầu khởi động lại rất nhiều dịch vụ liên quan.
Áp dụng Regex nâng cao
Nếu bạn quản lý môi trường phức tạp với nhiều phiên bản PHP khác nhau, bạn có thể dùng Regular Expression (Regex) để chặn toàn bộ. Ubuntu hỗ trợ cú pháp regex chuẩn trong block này.
Unattended-Upgrade::Package-Blacklist {
"php8\.[0-9]-.*";
"python3\.[0-9]+";
};
"php8\.[0-9]-.*": Sẽ chặn tự động cập nhật mọi package như php8.1-fpm, php8.3-cli, v.v."python3\.[0-9]+": Chặn cập nhật các phiên bản Python 3.x cốt lõi.
💡 Mẹo: Đừng lạm dụng Blacklist. Chỉ đưa vào danh sách đen những dịch vụ trực tiếp phục vụ người dùng (như Web, DB). Các package hệ thống như
openssh-serverhaysudonên được để tự động vá lỗi bảo mật.
4. Thiết lập tự động Reboot an toàn (Automatic Reboot)
Tóm gọn: Một số bản vá bảo mật (đặc biệt là Kernel update) bắt buộc phải khởi động lại máy chủ mới có hiệu lực. Bạn có thể hẹn giờ reboot vào khung giờ thấp điểm.
Bật tính năng Automatic-Reboot
Mặc định, khi cài xong Kernel mới, Ubuntu sẽ tạo ra một file cờ hiệu tại /var/run/reboot-required. unattended-upgrades có thể đọc file này và tự động ra lệnh reboot nếu được cấu hình.
Mở lại file /etc/apt/apt.conf.d/50unattended-upgrades, tìm và sửa các dòng sau:
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-WithUsers "false";
Unattended-Upgrade::Automatic-Reboot-Time "03:00";
Automatic-Reboot "true": Cho phép hệ thống tự động khởi động lại nếu có yêu cầu từ bản vá.Automatic-Reboot-WithUsers "false": Không khởi động lại nếu đang có người dùng đăng nhập qua SSH (tránh làm mất việc đang làm dở).Automatic-Reboot-Time "03:00": Chỉ thực hiện lệnh reboot vào đúng 3 giờ sáng (giờ local của server).
Xử lý các package cũ sau khi cập nhật
Khi cài Kernel mới, các file Kernel cũ vẫn nằm lại trong ổ cứng, lâu ngày sẽ làm đầy phân vùng /boot. Bạn nên bật tính năng tự động dọn dẹp.
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
Unattended-Upgrade::Remove-New-Unused-Dependencies "true";
Remove-Unused-Kernel-Packages: Tự động gỡ bỏ các phiên bản Kernel cũ không còn sử dụng.Remove-New-Unused-Dependencies: Hoạt động tương tự lệnhapt autoremove, dọn dẹp các thư viện rác.
⚠️ Cảnh báo: Hãy đảm bảo múi giờ (timezone) của VPS đã được cấu hình đúng chuẩn (ví dụ: Asia/Ho_Chi_Minh). Nếu VPS đang chạy giờ UTC, thời điểm “03:00” có thể rơi vào 10 giờ sáng giờ Việt Nam — lúc cao điểm truy cập.
5. Cấu hình thông báo qua Email khi có bản vá
Tóm gọn: Để không bị “mù thông tin”, bạn cần cấu hình hệ thống tự động gửi email báo cáo chi tiết những package nào đã được nâng cấp hoặc bị lỗi.
Cài đặt Postfix làm SMTP Relay
Để server gửi được email ra ngoài (tới Gmail, Outlook), bạn cần cài đặt một Mail Transfer Agent (MTA). Postfix là lựa chọn phổ biến và ổn định nhất.
sudo apt install mailutils postfix -y
Trong quá trình cài đặt, chọn Internet Site và nhập tên miền của server (ví dụ: server01.yourdomain.com).
Khai báo Email nhận cảnh báo
Quay lại file cấu hình /etc/apt/apt.conf.d/50unattended-upgrades, tìm đến dòng Unattended-Upgrade::Mail.
Unattended-Upgrade::Mail "[email protected]";
Unattended-Upgrade::MailReport "on-change";
Mail "[email protected]": Địa chỉ email sẽ nhận báo cáo.MailReport "on-change": Chỉ gửi email khi thực sự có package được cập nhật hoặc có lỗi xảy ra. Nếu để “always”, bạn sẽ bị spam email mỗi ngày kể cả khi không có update.
💡 Mẹo: Email gửi trực tiếp từ VPS thường bị rơi vào thư mục Spam do thiếu bản ghi SPF/DKIM. Ở mức độ Intermediate, bạn nên cấu hình Postfix sử dụng tính năng
relayhostthông qua các dịch vụ như SendGrid, Mailgun hoặc Amazon SES để đảm bảo email vào thẳng Inbox.
6. Kiểm tra và theo dõi log (Dry-run & Logging)
Tóm gọn: Trước khi để hệ thống tự chạy ngầm, bạn phải chạy thử nghiệm (dry-run) để đảm bảo không có lỗi cấu hình và biết cách đọc file log hệ thống.
Chạy thử nghiệm (Dry-run)
Lệnh dry-run sẽ giả lập toàn bộ quá trình cập nhật, kiểm tra các rule blacklist, origin mà không thực sự thay đổi bất kỳ file nào trên ổ cứng.
sudo unattended-upgrades --dry-run --debug
Kết quả trả về sẽ cho bạn thấy chính xác hệ thống đang “suy nghĩ” như thế nào:
Initial blacklisted packages: nginx, docker-ce, mysql-server
Initial whitelisted packages:
Starting unattended upgrades script
Allowed origins are: o=Ubuntu,a=jammy, o=Ubuntu,a=jammy-security, o=UbuntuESMApps,a=jammy-apps-security
Checking: curl ([<Origin component:'main' archive:'jammy-security' origin:'Ubuntu' label:'Ubuntu' site:'archive.ubuntu.com' isTrusted:True>])
pkgs that look like they should be upgraded: curl
Fetched 0 B in 0s (0 B/s)
fetch.run() result: 0
Packages blacklisted and not upgraded:
Packages whitelisted and upgraded:
InstCount=0 DelCount=0 BrokenCount=0
--dry-run: Cờ giả lập, không ghi đè dữ liệu thật.--debug: Hiển thị log chi tiết từng bước ra màn hình terminal.Allowed origins are: Xác nhận lại các kho lưu trữ đã được cấu hình đúng.
Đọc log hệ thống thực tế
Khi tiến trình chạy ngầm thực sự diễn ra (thường do cronjob kích hoạt), mọi hoạt động sẽ được ghi lại trong thư mục /var/log/unattended-upgrades/.
sudo tail -f /var/log/unattended-upgrades/unattended-upgrades.log
2023-10-25 06:25:11,540 INFO Starting unattended upgrades script
2023-10-25 06:25:11,541 INFO Allowed origins are: o=Ubuntu,a=jammy, o=Ubuntu,a=jammy-security
2023-10-25 06:25:15,120 INFO Packages that will be upgraded: libssl3 openssl
2023-10-25 06:25:15,121 INFO Writing dpkg log to /var/log/unattended-upgrades/unattended-upgrades-dpkg.log
2023-10-25 06:25:20,890 INFO All upgrades installed
unattended-upgrades.log: Chứa thông tin tổng quan về quá trình kiểm tra và các package được chọn.unattended-upgrades-dpkg.log: Chứa log chi tiết của tiến trìnhdpkg(giống như khi bạn gõ lệnhapt upgradebằng tay).
Pitfalls & lỗi thường gặp
Dưới đây là các sự cố phổ biến khi vận hành unattended-upgrades và cách khắc phục nhanh chóng.
- Lỗi “Could not get lock /var/lib/dpkg/lock-frontend”
- Nguyên nhân: Tiến trình auto update đang chạy ngầm đúng lúc bạn SSH vào và gõ lệnh
apt installthủ công. Hai tiến trình tranh chấp quyền khóa APT. - Cách fix: Tuyệt đối không dùng lệnh
rmđể xóa file lock vì có thể gây hỏng database APT. Hãy dùng lệnhsystemctl status apt-daily.serviceđể kiểm tra. Chờ 2-3 phút cho tiến trình ngầm chạy xong, hệ thống sẽ tự nhả lock.
- Nguyên nhân: Tiến trình auto update đang chạy ngầm đúng lúc bạn SSH vào và gõ lệnh
- Lỗi Server tự động Reboot giữa ban ngày
- Nguyên nhân: Bạn đã bật
Automatic-Rebootnhưng quên cấu hìnhAutomatic-Reboot-Time, hoặc VPS đang bị sai múi giờ (Timezone). - Cách fix: Chạy lệnh
timedatectl set-timezone Asia/Ho_Chi_Minhđể chuẩn hóa giờ server. Sau đó kiểm tra lại file50unattended-upgradesđể đảm bảo thời gian reboot là giờ thấp điểm.
- Nguyên nhân: Bạn đã bật
- Lỗi thiếu Dependency (Gói phụ thuộc bị hỏng)
- Nguyên nhân: Đôi khi bản vá bảo mật yêu cầu một thư viện mới, nhưng kho lưu trữ bị gián đoạn lúc tải về khiến tiến trình bị treo giữa chừng.
- Cách fix: Chạy lệnh
sudo apt --fix-broken installđể hệ thống tự động tải bù các gói còn thiếu, sau đó chạy lạisudo dpkg --configure -a.
- Không nhận được Email cảnh báo
- Nguyên nhân: Cổng 25 (SMTP) thường bị các nhà cung cấp Cloud chặn mặc định để chống spam. Postfix không thể kết nối ra ngoài.
- Cách fix: Cấu hình Postfix sử dụng SMTP Relay (ví dụ qua cổng 587 của Gmail hoặc SendGrid). Chỉnh sửa file
/etc/postfix/main.cf, thêm dòngrelayhost = [smtp.sendgrid.net]:587và khai báo xác thực SASL.
Key takeaways
- Bảo mật chủ động:
unattended-upgradeslà lớp phòng thủ đầu tiên và quan trọng nhất chống lại các lỗ hổng Zero-day trên Linux. - Chỉ chọn Security: Luôn đảm bảo file cấu hình chỉ cho phép Origin chứa hậu tố
-security, tuyệt đối không bật-updatesbừa bãi. - Sử dụng Blacklist: Bảo vệ các dịch vụ cốt lõi (Web, Database, Docker) bằng cách đưa chúng vào danh sách
Package-Blacklist. - Kiểm soát Reboot: Luôn hẹn giờ
Automatic-Reboot-Timevào ban đêm và bật tính năng dọn dẹp Kernel cũ để tránh đầy ổ cứng. - Theo dõi liên tục: Cấu hình nhận báo cáo qua Email (
on-change) và thường xuyên kiểm tra thư mục log/var/log/unattended-upgrades/.
FAQ
Có nên bật auto update cho mọi package không?
Không. Đối với môi trường Production, bạn chỉ nên bật tự động cập nhật cho các bản vá bảo mật (Security Patch). Việc tự động nâng cấp tính năng (Feature Update) cho các phần mềm như NGINX hay MySQL có thể làm thay đổi file cấu hình và gây sập website.
Làm sao để biết máy chủ đang yêu cầu reboot?
Bạn có thể kiểm tra xem file /var/run/reboot-required có tồn tại hay không bằng lệnh cat /var/run/reboot-required. Nếu file này xuất hiện, nghĩa là một bản cập nhật (thường là Kernel hoặc glibc) đang chờ bạn khởi động lại máy.
Unattended-upgrades có làm gián đoạn service đang chạy?
Đa số các bản vá bảo mật (như curl, openssl, sudo) sẽ không làm gián đoạn dịch vụ. Tuy nhiên, nếu bản vá liên quan trực tiếp đến một service đang chạy (ví dụ php-fpm), tiến trình APT có thể tự động reload lại service đó trong vài mili-giây.
Tôi có cần cấu hình cronjob thủ công không?
Không cần thiết. Từ Ubuntu 16.04 trở đi, hệ thống sử dụng systemd timers (apt-daily.timer và apt-daily-upgrade.timer) để quản lý lịch trình thay cho cronjob truyền thống. Việc dùng dpkg-reconfigure đã tự động thiết lập các timer này cho bạn.
Làm sao để dừng hoàn toàn việc tự động cập nhật?
Nếu bạn muốn tạm ngưng, hãy mở file /etc/apt/apt.conf.d/20auto-upgrades và đổi tất cả các giá trị "1" thành "0". Hệ thống sẽ ngừng kiểm tra và tải về các bản vá ngầm.
Cần VPS chạy Auto update security patch (unattended-upgrades)?
Một hệ thống bảo mật tốt cần bắt đầu từ một hạ tầng Cloud mạnh mẽ và ổn định. Nếu bạn đang tìm kiếm máy chủ ảo tốc độ cao, toàn quyền Root để thoải mái tối ưu bảo mật Linux, hãy tham khảo ngay các gói dịch vụ tại VSIS.
👉 Đăng ký VPS hiệu năng cao tại vsis.net/vps ngay hôm nay! Hệ thống mạng lưới mạnh mẽ, hỗ trợ kỹ thuật 24/7 sẵn sàng đồng hành cùng bạn.



