Tại sao bạn không nên cập nhật server bằng tay?
Nếu bạn chỉ quản lý 1-2 VPS, việc SSH vào rồi gõ sudo apt update && sudo apt upgrade mỗi sáng có vẻ khá thư thả. Tuy nhiên, khi hệ thống mở rộng lên 10 hay 20 server, công việc này sẽ trở thành gánh nặng cực lớn. Chỉ cần bạn quên bẵng đi một tuần, server đã có thể đối mặt với hàng chục lỗ hổng bảo mật mới.
Thực tế cho thấy, các lỗ hổng nghiêm trọng (Critical) thường bị hacker khai thác chỉ trong vòng 24-48 giờ sau khi công bố. Nếu không có cơ chế tự động, bạn đang tạo ra một khoảng trống nguy hiểm cho hệ thống. Đó là lý do mình luôn cài unattended-upgrades ngay khi vừa khởi tạo server. Công cụ này giúp hệ thống tự vá lỗi thầm lặng, giúp bạn ngủ ngon hơn mỗi đêm.
Cơ chế hoạt động của unattended-upgrades
Về bản chất, đây là một script chạy ngầm định kỳ để kiểm tra các gói phần mềm mới từ kho lưu trữ (repository). Điểm giá trị nhất nằm ở khả năng lọc: bạn có thể cấu hình để nó chỉ cài các bản vá bảo mật quan trọng. Những bản cập nhật tính năng lớn (có nguy cơ gây xung đột hoặc lỗi ứng dụng) sẽ bị bỏ qua. Nhờ đó, server của bạn vừa an toàn, vừa duy trì được sự ổn định tuyệt đối.
Hướng dẫn cài đặt chi tiết
Bước 1: Cài đặt các package nền tảng
Hầu hết các bản Ubuntu Server hiện nay đều tích hợp sẵn công cụ này. Tuy nhiên, bạn nên chạy lệnh sau để đảm bảo không thiếu sót các thành phần bổ trợ:
sudo apt update
sudo apt install unattended-upgrades update-notifier-common -y
Gói update-notifier-common rất quan trọng. Nó giúp hệ thống nhận diện và tạo file tín hiệu khi có yêu cầu reboot sau cập nhật.
Bước 2: Cấu hình danh sách gói được phép cập nhật
Mọi thiết lập chính nằm trong file /etc/apt/apt.conf.d/50unattended-upgrades. Đây là nơi bạn ra lệnh cho server được phép tự động cài những gì.
Mở file bằng trình soạn thảo bạn quen dùng:
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
Tìm đến mục Unattended-Upgrade::Allowed-Origins. Với môi trường Production, mình khuyên bạn chỉ nên mở khóa (uncomment) dòng security. Cách làm này giúp giảm thiểu rủi ro lỗi phần mềm ngoài ý muốn:
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
// "${distro_id}:${distro_codename}-updates";
};
Để tối ưu tài nguyên, hãy kích hoạt tính năng tự dọn dẹp các package thừa (giúp giải phóng từ 200MB – 1GB dung lượng sau một thời gian):
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Unattended-Upgrade::Remove-New-Unused-Dependencies "true";
Bước 3: Lập lịch chạy tự động
Sau khi đã chọn xong nội dung cập nhật, bước tiếp theo là xác định tần suất thực hiện. Bạn cần chỉnh sửa file /etc/apt/apt.conf.d/20auto-upgrades:
sudo nano /etc/apt/apt.conf.d/20auto-upgrades
Hãy dán nội dung sau để hệ thống kiểm tra và cập nhật mỗi ngày một lần:
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";
Thiết lập thông báo qua Email
Để server tự làm việc mà không có báo cáo thường mang lại cảm giác bất an. Mình đã áp dụng cấu hình gửi mail cho hơn 50 server tại công ty để theo dõi trạng thái vá lỗi mỗi sáng. Lưu ý: Server của bạn cần cài sẵn một Mail Transfer Agent (MTA) như postfix hoặc msmtp để tính năng này hoạt động.
Trong file 50unattended-upgrades, hãy tìm và điền email của bạn vào dòng sau:
Unattended-Upgrade::Mail "[email protected]";
Để đảm bảo mọi thứ luôn trong tầm kiểm soát, hãy để giá trị sau là false. Bạn sẽ nhận được thông báo ngay cả khi cập nhật thành công, thay vì chỉ nhận mail khi có lỗi:
Unattended-Upgrade::MailOnlyOnError "false";
Xử lý việc Reboot tự động
Các bản vá Kernel thường yêu cầu khởi động lại máy mới có hiệu lực. Bạn có thể thiết lập để server tự reboot vào khung giờ ít người truy cập nhất, ví dụ 3 giờ sáng:
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "03:00";
Cảnh báo: Nếu bạn đang chạy các dịch vụ nhạy cảm như Database Cluster hoặc các app không tự khởi động cùng hệ thống, hãy cân nhắc kỹ trước khi bật tính năng này.
Kiểm tra và theo dõi Log
Để chắc chắn cấu hình không sai sót, bạn hãy chạy lệnh giả lập (dry-run). Lệnh này sẽ mô phỏng quá trình update mà không thực hiện thay đổi thật trên ổ cứng:
sudo unattended-upgrade --dry-run --debug
Nếu muốn kiểm tra lịch sử các gói đã cài, bạn có thể xem trực tiếp file log tại đường dẫn:
tail -f /var/log/unattended-upgrades/unattended-upgrades.log
Lời khuyên từ thực tế triển khai
Qua nhiều năm quản lý hạ tầng Linux, mình đúc kết được 3 lưu ý quan trọng sau:
- Tránh xa Database: Tuyệt đối không bật tự động update cho MySQL, PostgreSQL hay MongoDB. Các bản vá của DB thường thay đổi config hoặc cấu trúc file, rất dễ làm ứng dụng bị treo.
- Luôn thử nghiệm tại Staging: Hãy áp dụng cấu hình này lên môi trường thử nghiệm trong ít nhất 1 tuần trước khi đưa lên Production.
- Giám sát dung lượng /boot: Một số bản kernel cũ có thể làm đầy phân vùng
/boot. Dù đã cóAutoclean, bạn vẫn nên kiểm tra định kỳ bằng lệnhdf -hđể tránh lỗi không thể khởi động.
Việc triển khai unattended-upgrades là một bước đi nhỏ nhưng mang lại hiệu quả bảo mật cực lớn. Chúc các bạn làm chủ hệ thống Ubuntu của mình một cách thông minh hơn!

