Cài đặt Cập Nhật tự động Máy Chủ Ubuntu 20.04 | Auto update Ubuntu

Auto update Ubuntu

Trong hướng dẫn này, bạn sẽ khám phá một số thực hành tốt nhất để duy trì việc cập nhật toàn bộ hệ thống máy chủ Ubuntu 20.04 của bạn. Cũng giống như việc tăng cường bảo mật mạng, có rất nhiều bước bạn có thể thực hiện để đảm bảo máy chủ của bạn luôn hoạt động một cách an toàn mà không cần can thiệp thêm trong tương lai.

Có rất nhiều công cụ và cấu hình có thể được áp dụng cho hầu hết các máy chủ Ubuntu ngoài những gì đã được cấu hình sẵn tự động. Nếu bạn tự quản trị máy chủ, việc vá lỗi thủ công cho tất cả môi trường có thể gây gián đoạn và dễ dẫn đến lỗi.

Hướng dẫn này sẽ trình bày:

  • Kiểm tra việc khởi động lại mềm mại theo các thực hành tốt nhất về quản lý ứng dụng, nhằm giảm thiểu các rắc rối do cập nhật bảo trì gây ra.
  • Cấu hình cập nhật tự động cho hầu hết các gói và thư viện đang chạy trên máy của bạn.
  • Live kernel patching và các thực hành tốt nhất khác liên quan đến cập nhật kernel.

Yêu Cầu

  • Một máy chủ Ubuntu 20.04 và một tài khoản không phải root có quyền sudo. Bạn có thể tìm hiểu thêm cách thiết lập tài khoản với quyền này trong hướng dẫn “Thiết Lập Máy Chủ Ban Đầu với Ubuntu 20.04” của DataOnline.

Bước 1 – Áp Dụng Các Thực Hành Tốt Nhất cho Quản Lý Ứng Dụng

Một phần cơ bản trong việc cấu hình máy chủ của bạn cho các nâng cấp tự động là đảm bảo rằng tất cả các ứng dụng đang chạy trên máy chủ đều có thể khởi động lại một cách chính xác sau những lần mất điện không lường trước hoặc sau một lần khởi động lại. Các trình quản lý gói của Linux được thiết kế để chạy nền một cách không gây gián đoạn, giúp quá trình bảo trì cần thiết diễn ra mà không kèm theo thêm gánh nặng nào. Tuy nhiên, một trong những lý do phổ biến nhất khiến bạn không có chiến lược cập nhật tốt là do lo ngại về cách máy chủ sẽ hoạt động sau khi khởi động lại.

Ở bất cứ nơi nào có thể, các ứng dụng trong hệ thống của bạn nên được quản lý bởi hệ thống khởi tạo (init) của máy chủ, mà trên hầu hết các bản phân phối Linux hiện đại, bao gồm cả Ubuntu, chính là systemd. Systemd cung cấp lệnh systemctl để tương tác với các dịch vụ đang chạy và tự động khởi động lại chúng khi cần. Gần như tất cả phần mềm được cài đặt qua trình quản lý gói và được thiết kế để chạy nền nên sẽ tự động cung cấp một dịch vụ systemd cùng với một tệp cấu hình đơn vị theo thực hành tốt nhất.

Khi bạn tự phát triển phần mềm của riêng mình, hoặc triển khai phần mềm từ các kho lưu trữ Git, việc tự viết các tệp unit để tích hợp với systemd là một ý kiến hay. Là một lựa chọn nhẹ, bạn cũng có thể sử dụng một công cụ như supervisor. Ngoài ra, bạn có thể sử dụng bộ lập lịch cron của hệ thống với cú pháp @reboot.

Sau khi cấu hình của bạn đã được thiết lập, hãy đảm bảo kiểm tra nó thông qua các lần khởi động lại. Bạn có thể khởi động lại bằng cách chạy sudo shutdown now -r lệnh này sẽ dừng sạch các tiến trình đang chạy và khởi động lại ngay lập tức. Bạn cũng có thể chỉ định một thời gian theo định dạng hh:mm, hoặc số phút từ bây giờ, thay vì sử dụng “now” để lên lịch khởi động lại trong tương lai. Trong các triển khai sản xuất, thông thường bạn sẽ không cần phải can thiệp sau những lần gián đoạn không lường trước, vì tất cả các dịch vụ cần thiết và các endpoint sẽ tự động khởi động lại.

Giờ đây, khi bạn đã đảm bảo rằng môi trường của mình sẽ không gặp rắc rối gì sau những lần khởi động lại bảo trì, bước tiếp theo sẽ hướng dẫn bạn cách lập lịch các cập nhật tự động.

Bước 2 – Cấu Hình Cập Nhật Tự Động Ubuntu 20.04

Trình quản lý gói của Ubuntu, apt, có một quy trình làm việc ổn định để thực hiện nâng cấp toàn hệ thống. Đầu tiên, bạn chạy apt update với mục đích làm mới danh sách các gói, và sau đó chạy apt upgrade để nâng cấp tất cả các gói trên hệ thống (không cần chỉ định gói cụ thể). Quy trình này có thể thay đổi đôi chút nếu bạn có xung đột phiên bản từ các gói của bên thứ ba hoặc nếu bạn cố ý giữ một số gói không được cập nhật, nhưng các lệnh cốt lõi vẫn như nhau.

Ubuntu cung cấp một công cụ độc đáo có tên là unattended-upgrades để tự động tải về và cài đặt các bản vá bảo mật và các cập nhật quan trọng khác cho máy chủ của bạn. Hầu hết các máy chủ Ubuntu đã được cài đặt và cấu hình sẵn công cụ này, nhưng bạn có thể cài đặt nó bằng các lệnh sau:

sudo apt update
sudo apt install unattended-upgrades

Sau khi cài đặt, bạn có thể kiểm tra xem dịch vụ unattended-upgrades có đang chạy không bằng lệnh:

sudo systemctl status unattended-upgrades.service

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

Cấu hình mặc định của unattended-upgrades sẽ tự động tải về các bản cập nhật vá lỗi và bảo mật cho hầu hết các gói có trong kho Ubuntu. Tuy nhiên, nếu bạn đang sử dụng phiên bản cũ của một số gói để tránh thay đổi từ upstream, hoặc nếu máy chủ của bạn sử dụng kho gói của bên thứ ba bên cạnh của Ubuntu, bạn có thể cấu hình thêm cho dịch vụ unattended-upgrades.

Tệp cấu hình của nó được lưu tại /etc/apt/apt.conf.d/50unattended-upgrades. Mở tệp này bằng nano hoặc trình soạn thảo yêu thích của bạn:

sudo nano /etc/apt/apt.conf.d/50unattended-upgrades

Tệp này có nhiều chú thích giải thích chức năng (các dòng bắt đầu bằng //). Khối cấu hình đầu tiên chỉ định các gói sẽ được cập nhật tự động, dựa theo mẫu tên kho gói của Ubuntu. Các tệp trong kho cốt lõi và kho -security sẽ được cập nhật theo mặc định, trong khi các dòng chứa kho -updates-proposed và -backports bị comment (vô hiệu) theo mặc định.

Những kho này được vô hiệu hóa vì chúng có khả năng chứa các thay đổi phá vỡ ứng dụng đã cài đặt. Để kích hoạt chúng cho các cập nhật tự động, bạn có thể xóa dấu // ở đầu các dòng đó.

Ví dụ, tệp sẽ có nội dung như sau:

/etc/apt/apt.conf.d/50unattended-upgrades

// 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";
};
…

Phía dưới của tệp có nhiều tuỳ chọn với các giá trị cấu hình true/false. Ví dụ, có một tuỳ chọn để tự động khởi động lại sau khi cài đặt các gói cần khởi động lại để có hiệu lực. Bạn có thể kích hoạt tuỳ chọn này bằng cách xóa dấu // và thay false thành true. Tuy nhiên, việc này có thể làm cho máy chủ không khả dụng vào những thời điểm không lường trước được. Nếu bật tuỳ chọn này, hãy chắc chắn rằng ứng dụng hoặc người dùng của bạn có thể chấp nhận được thời gian gián đoạn.

/etc/apt/apt.conf.d/50unattended-upgrades

// Automatically reboot *WITHOUT CONFIRMATION* if
//  the file /var/run/reboot-required is found after the upgrade
//Unattended-Upgrade::Automatic-Reboot "false";

Lưu và đóng tệp khi hoàn tất chỉnh sửa (với nano, nhấn Ctrl+X, sau đó Y và Enter).

Nếu bạn thay đổi cấu hình, hãy tải lại dịch vụ unattended-upgrades để các thay đổi có hiệu lực:

sudo systemctl reload unattended-upgrades.service

Giờ đây, bạn đã có giải pháp để đảm bảo tất cả các gói trên máy chủ được cập nhật bảo mật thiết yếu mà không cần can thiệp thêm. Trong bước cuối, bạn sẽ học cách giữ kernel được cập nhật và cách xử lý khởi động lại máy chủ khi cần thiết.

Auto update Ubuntu 2

Bước 3 – Cập Nhật và Livepatch Kernel trên Ubuntu 20.04

Ít khi cần cập nhật kernel của hệ thống so với các gói phần mềm khác. Kernel Linux chứa (gần như) tất cả các driver phần cứng đang hoạt động và chịu trách nhiệm cho hầu hết các tương tác cấp thấp của hệ thống. Các bản cập nhật kernel thường chỉ cần thiết khi có lỗ hổng bảo mật quan trọng cần được khắc phục, khi bạn cần sử dụng một tính năng kernel mới được công bố, hoặc khi kernel của bạn đã quá cũ đến mức có nguy cơ tích lũy nhiều lỗi và lỗ hổng mà bạn có thể không nhận ra.

Hiện không có phương pháp chung nào để tự động lập lịch cập nhật kernel Linux, bởi vì các bản cập nhật kernel trong quá khứ thường yêu cầu phải khởi động lại toàn hệ thống, và việc lên lịch khởi động lại là điều không thể nếu không dựa trên những giả định về môi trường của bạn. Nhiều máy chủ được kỳ vọng hoạt động liên tục 24/7, trong khi một lần khởi động lại có thể mất một khoảng thời gian không xác định hoặc thậm chí cần can thiệp thủ công.

Nếu bạn có thể chấp nhận một khoảng thời gian gián đoạn, việc cập nhật kernel trở nên khá đơn giản: các bản cập nhật apt tự động có thể được cấu hình để cài đặt và chuẩn bị kernel mới cùng với các gói khác, và sau khi khởi động lại, máy chủ của bạn sẽ tự động sử dụng kernel mới. Tuy nhiên, hầu hết các triển khai sản xuất yêu cầu có thêm các biện pháp phức tạp xung quanh việc khởi động lại như thế này để đảm bảo tính liên tục của dịch vụ. Ví dụ, bạn có thể sử dụng bộ cân bằng tải để tự động chuyển hướng lưu lượng truy cập sang những máy chủ có chức năng tương đương trong một môi trường mở rộng theo chiều ngang, trong khi từng máy chủ được khởi động lại tuần tự, nhằm tránh gây ra thời gian gián đoạn hiển thị.

Kích Hoạt Livepatch Để Đảm Bảo Thời Gian Hoạt Động Trong Quá Trình Cập Nhật Kernel

Để tránh gián đoạn trong quá trình nâng cấp kernel, bạn có thể sử dụng một tính năng của kernel Linux được gọi là live patching. Tính năng này cho phép áp dụng các bản vá kernel mà không cần khởi động lại hệ thống. Hiện có hai nhà duy trì chính cho các bản live patch của kernel: Canonical, cung cấp Dịch vụ Livepatch riêng cho Ubuntu, và KernelCare, hỗ trợ Ubuntu cũng như hầu hết các bản phân phối Linux lớn khác. Cả hai đều yêu cầu đăng ký sử dụng, và chỉ có dịch vụ của Canonical là miễn phí cho người dùng cá nhân.

Bạn có thể đăng ký một khóa Livepatch tại https://auth.livepatch.canonical.com/. Sau khi đăng ký, bạn có thể cài đặt gói snap canonical-livepatch. Snap là một trình quản lý gói khác của Ubuntu hoạt động song song với apt.

sudo snap install canonical-livepatch

Bạn có thể kích hoạt canonical-livepatch với một lệnh duy nhất sử dụng khóa mà bạn nhận được từ website:

sudo canonical-livepatch enable your-key

Output của lệnh này sẽ chứa thông báo “Successfully enabled device”. Từ nay, dịch vụ sẽ chạy ngầm trong nền mà không cần bất kỳ can thiệp nào thêm, và bạn có thể kiểm tra trạng thái của nó bằng lệnh:

sudo canonical-livepatch status

Output

last check: 55 seconds ago
kernel: 5.4.0-26.30-generic
server check-in: succeeded
patch state: ✓ all applicable livepatch modules inserted
patch version: 84.1
tier: updates (Free usage; This machine beta tests new patches.)
machine id: d56589e7fa994005a266d4caf9b9dcf7

Bạn đã cấu hình các bản cập nhật kernel tự động cho máy chủ của mình, có nghĩa là bạn không còn cần phải khởi động lại hệ thống để duy trì một môi trường an toàn và được cập nhật nữa.

Kết Luận Auto update Ubuntu

Trong hướng dẫn này, bạn đã khám phá nhiều chiến lược để giữ cho máy chủ Ubuntu của mình được cập nhật tự động. Bạn cũng đã tìm hiểu được một số điểm tinh tế liên quan đến kho gói, cập nhật kernel, và cách xử lý việc khởi động lại máy chủ. Đây đều là những nền tảng quan trọng của DevOps và công việc quản trị máy chủ nói chung, và hầu hết các cấu hình sản xuất đều dựa trên những khái niệm cốt lõi này.

Tiếp theo, bạn có thể tìm hiểu thêm về Quản Lý Gói trên Ubuntu. Nếu bạn muốn tìm hiểu thêm về định dạng gói Snap, hãy truy cập hướng dẫn “Cách đóng gói và xuất bản ứng dụng Snap trên Ubuntu 18.04

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *