Trong hướng dẫn này, Vietnix sẽ hướng dẫn một số phương pháp để bạn luôn có cách cập nhật máy chủ Ubuntu 20.04 của mình liên tục. Cũng như việc tăng cường bảo mật mạng, bạn có thể thực hiện nhiều bước để đảm bảo máy chủ của mình sẽ tiếp tục hoạt động an toàn mà không cần can thiệp sau này. Việc này cũng giúp tránh tình trạng lỗi do các bản vá gây ra.
Điều kiện để có thể hướng dẫn cách cập nhật máy chủ Ubuntu 20.04
- Máy chủ Ubuntu 20.04. Bạn có thể tham khảo các gói dịch vụ VPS tốc độ cao tại Vietnix. Các gói VPS tại đây có cấu hình đa dạng, chi phí hợp lý, hỗ trợ nhiều hệ điều hành, cho bạn toàn quyền cài đặt và sử dụng theo mục đích riêng.
- Tài khoản người dùng của bạn không phải root và có quyền sudo.
Bước 1: Sử dụng các phương pháp quản lý ứng dụng
Việc thực hiện các phương pháp quản lý ứng dụng mục đích cơ bản là để việc cấu hình máy chủ của bạn có thể cập nhật tự động và đảm bảo rằng tất cả các ứng dụng đang chạy trên máy chủ đều có khả năng được khởi chạy lại bình thường sau khi cập nhật.
Khi bạn cài đặt các ứng dụng trên máy chủ Ubuntu, hầu hết các ứng dụng này sẽ được quản lý bởi hệ thống systemd
. Systemd
sẽ giúp bạn tương tác với các dịch vụ và tự động khởi động lại chúng khi cần. Nếu bạn tự phát triển ứng dụng hoặc triển khai từ Git, bạn có thể viết các tệp của riêng mình để tích hợp với systemd
. Nếu bạn muốn sử dụng một công cụ nhẹ hơn, bạn có thể sử dụng Supervisor
.
Ngoài ra, Nếu bạn muốn chạy một tác vụ nào đó mỗi khi khởi động lại máy chủ, bạn có thể sử dụng lịch trình cron với cú pháp @reboot
. Bạn cũng có thể khởi động lại máy chủ bằng cách chạy lệnh:
sudo shutdown now -r
Lệnh này sẽ dừng các tiến trình đang chạy và khởi động lại máy chủ ngay lập tức. Sau khi khởi động lại, hãy kiểm tra xem các dịch vụ và chức năng của hệ thống có hoạt động bình thường hay không.
Bước 2: Cấu hình cập nhật tự động không giám sát (Unattended Upgrades)
Bạn có thể hiểu đơn giản cấu hình cập nhật tự động không giám sát là một tính năng cho phép bạn cài đặt và cập nhật các bản vá bảo mật cho máy chủ của bạn một cách tự động và không cần sự can thiệp của người dùng.
Máy chủ Ubuntu có một công cụ gọi là apt
để quản lý các gói trên máy chủ. Để nâng cấp toàn bộ máy chủ, bạn cần chạy 2 lệnh:
sudo apt update
Lệnh trên dùng để cập nhật danh sách các gói và lệnh dưới đây sẽ nâng cấp các gói đó:
sudo apt upgrade
Tuy nhiên, nếu bạn có các gói của bên thứ ba hoặc muốn giữ lại một số gói không được nâng cấp, thì quy trình sẽ có một số khác biệt.
Để tự động cài đặt các bản vá bảo mật và các nâng cấp cần thiết khác cho máy chủ của bạn, Ubuntu có cung cấp công cụ gọi là unattended-upgrades
.
Công cụ này thường được cài đặt sẵn trên hầu hết các máy chủ Ubuntu, nhưng nếu chưa có, bạn có thể cài đặt nó bằng các lệnh đơn giản sau đây:
sudo apt update
sudo apt install unattended-upgrades
Sau khi cài đặt, bạn có thể kiểm tra để đảm bảo rằng dịch vụ nâng cấp không giám sát đang chạy trong systemctl
bằng lệnh:
sudo systemctl status unattended-upgrades.service
Bạn sẽ nhận được output như bên dưới:
Output
● unattended-upgrades.service - Unattended Upgrades Shutdown
Loaded: loaded (/lib/systemd/system/unattended-upgrades.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2022-02-14 17:51:49 UTC; 3h 4min ago
Docs: man:unattended-upgrade(8)
Main PID: 829 (unattended-upgr)
Tasks: 2 (limit: 1137)
Memory: 10.6M
CGroup: /system.slice/unattended-upgrades.service
Dịch vụ unattended-upgrades
sẽ tự động tải và cài đặt các bản vá lỗi và bảo mật cho hầu hết các gói trong kho lưu trữ Ubuntu.
Tuy nhiên, nếu bạn sử dụng các phiên bản cũ của một số gói hoặc sử dụng kho lưu trữ gói (repositories) từ bên thứ ba, bạn cần cấu hình cho dịch vụ này. Để làm điều này, bạn chỉ cần sửa tệp cấu hình bằng lệnh:
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
Tệp cấu hình sẽ có dạng như thế này:
// Automatically upgrade packages from these (origin:archive) pairs
//
// Note that in Ubuntu security updates may pull in new dependencies
// from non-security sources (e.g. chromium). By allowing the release
// pocket these get automatically pulled in.
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";
};
…
Tệp này được chú thích rất rõ ràng về chức năng của từng phần. Phần cấu hình đầu tiên xác định các gói sẽ được cập nhật tự động. Theo mặc định, các tệp trong kho lưu trữ chính và kho lưu trữ -security
sẽ được cập nhật, nhưng các dòng lệnh chứa kho lưu trữ -updates
, -proposed
và -backports
hiện đang ở chế độ chú thích (lệnh sẽ không thực thi).
Những kho lưu trữ này bị tắt mặc định vì đôi lúc chứa các thay đổi có thể làm hỏng các gói đã cài đặt trên máy chủ của bạn. Tuy nhiên, bạn có thể kích hoạt chúng bằng cách xóa các ký tự chú thích //
trên các dòng này.
Bên dưới tệp cấu hình sẽ có phần toggles lựa chọn true/false
, ví dụ như Automatic-reboot
, … Tuy nhiên hãy chắc chắn rằng việc thực hiện này không gây ảnh hưởng luồng công việc vì điều này có thể dẫn đến tình trạng không thể sử dụng ở những khoảng thời gian ngẫu nhiên sau mỗi đợt cập nhật.
...
//Unattended-Upgrade::Automatic-Reboot "false";
...
Sau khi bạn đã thực hiện các thay đổi cấu hình, lưu và đóng tệp bằng cách nhấn Ctrl + X
, sau đó nhấn Y
rồi Enter
.
Để dịch vụ unattended-upgrades
có thể hoạt động như mong muốn sau khi bạn sửa tệp cấu hình thì hãy tiến hành khởi động lại dịch vụ bằng lệnh:
sudo systemctl reload unattended-upgrades.service
Qua một số bước trên, bạn đã có các giải pháp để đảm bảo rằng tất cả các gói trên máy chủ của bạn đều nhận được các cập nhật bảo mật cần thiết mà không cần thêm bất kỳ sự can thiệp bổ sung nào khác.
Bước 3: Cập nhật và cài đặt các bản vá Kernel bằng Livepatching
Đôi khi bạn sẽ cần cập nhật Kernel của hệ thống. Kernel Linux chứa (gần như) tất cả các trình điều khiển phần cứng và chịu trách nhiệm cho hầu hết các tương tác hệ thống cấp thấp. Cập nhật Kernel thường chỉ cần thiết nếu có lỗ hổng cần phải giải quyết hoặc nếu bạn cần sử dụng một tính năng Kernel mới được công bố hoặc nếu Kernel của bạn đã quá cũ, có rủi ro tích tụ các lỗi và lỗ hổng mà bạn có thể không biết được.
Trong quá trình cập nhật, máy chủ phải ngừng hoạt động, vì vậy không có cách nào để chạy các dịch vụ từ máy chủ nữa. Vì vậy để tránh tình trạng này, bạn cần dùng Livepatching.
Tính năng này cho phép thực hiện nâng cấp Kernel mà không cần phải khởi động lại hệ thống. Hiện có hai nhà cung cấp chính cho các bản vá kernel LivePatching đó là Canonical và KernelCare chuyên cung cấp dịch vụ Livepatch cho Ubuntu.
Bạn có thể đăng ký một Livepatch key
tại trang chủ của Canonical. Sau khi đăng ký, tiến hành cài đặt gói snap canonical-livepatch
bằng lệnh:
sudo snap install canonical-livepatch
Snap là một trình quản lý gói Ubuntu chạy song song với apt
, tiến hành kích hoạt canonical-livepatch
với một dòng lệnh và sử dụng key mà bạn đã đăng ký:
sudo canonical-livepatch enable your-key
Thay thế your-key bằng key mà bạn đã đăng ký trên Canonical. Kết quả sẽ chứa thông báo Successfully enabled device
có nghĩa là đã thành công. Dịch vụ sẽ chạy trong nền từ bây giờ trở đi và bạn có thể kiểm tra trạng thái của nó bằng lệnh:
sudo canonical-livepatch status
Chỉ một vài bước như vậy, bạn đã cấu hình cập nhật Kernel tự động cho máy chủ của mình, điều này có nghĩa là bây giờ bạn không cần khởi động lại máy chủ để cập nhật nữa.
Ngoài ra, bạn cũng có thể tham khảo thêm cách thiết lập Redis làm cache cho MySQL bằng PHP trên Ubuntu 20.04 để có thể tối ưu hóa hiệu suất MySQL và cải thiện ứng dụng web của bạn.
Lời kết
Trong bài hướng dẫn cách cập nhật máy chủ Ubuntu 20.04 luôn được cập nhật một cách an toàn này, bạn đã khám phá nhiều chiến lược để tự động cập nhật các máy chủ Ubuntu của mình. Ngoài ra, bạn cũng đã hiểu sâu hơn về kho lưu trữ gói (repositories), cập nhật Kernel và cách xử lý khởi động lại máy chủ. Những kiến thức cơ bản này là rất quan trọng đối với DevOps và làm việc với máy chủ. Nếu bạn nắm vững được những khái niệm này, bạn có thể dễ dàng xây dựng cũng như quản lý các quá trình cập nhật cho máy chủ của mình.