Cách tránh khởi động lại máy chủ với Ubuntu Livepatch

Nếu bạn quản trị (các) máy chủ của riêng mình, thì sớm hay muộn bạn cũng gặp phải vấn đề này. Bạn phải khởi động lại hệ điều hành, nhưng máy đang cung cấp một service quan trọng không thể bị gián đoạn.

Nhưng tại sao lại phải khởi động lại máy chủ? Mọi thứ dường như đang hoạt động tốt sau lệnh apt-get upgrade. Tuy nhiên, sự thật không phải lúc nào cũng giống như vẻ ngoài. Mặc dù hệ thống vẫn tiếp tục chạy sau mỗi lần nâng cấp và không bắt buộc phải khởi động lại như Windows, nhưng có thể bạn vẫn cần thực hiện việc này.

Ví dụ, khi một lỗ hổng trong lõi của hệ thống (kernel) được phát hiện, nó sẽ được vá và đẩy đến máy chủ của bạn dưới dạng một gói mới. Sau khi bạn cài đặt kernel đã vá, một số file được ghi vào ổ đĩa, nhưng nó vẫn là kernel cũ, vì nó là file được load vào bộ nhớ (RAM).

Điều này có nghĩa là máy chủ của bạn vẫn dễ bị tổn thương trước các lỗ hổng bảo mật được phát hiện trước đó. Các tiến trình, daemon và service khác có thể được load lại mà không cần khởi động lại hệ điều hành. Tuy nhiên, kernel nằm ở trung tâm của hệ thống và chỉ có thể được load lại ở lần khởi động tiếp theo.

Ubuntu Livepatch giải quyết điều này bằng cách cho phép bạn đóng các lỗ hổng bảo mật kernel mà không cần khởi động lại. Bằng cách này, bạn có thể tránh hoặc trì hoãn việc khởi động lại trong nhiều tuần hoặc nhiều tháng mà không ảnh hưởng đến bảo mật.

Ý tưởng cốt lõi đằng sau tính năng Live Patching rất đơn giản: Khi một hàm dễ bị “tổn thương”, hãy viết lại nó, loại bỏ lỗ hổng và load hàm mới ở đâu đó vào bộ nhớ. Khi hàm được gọi, thay vì chạy code trong kernel, hãy chuyển hướng để sử dụng code được viết lại.

Viết lại hàm rồi load lại vào bộ nhớ

Nhưng, như với hầu hết mọi thứ, việc thực hiện và các chi tiết kỹ thuật không đơn giản như vậy.

Cách thiết lập Livepatch trên Ubuntu

Chuyển đến trang này và tạo tài khoản Ubuntu One (hoặc chỉ cần đăng nhập nếu bạn đã có sẵn tài khoản). Kiểm tra email của bạn và nhấp vào liên kết xác nhận tài khoản sau đó. Tiếp theo, hãy truy cập trang Canonical Livepatch Service. Chọn tùy chọn cho biết bạn là “Ubuntu user” và nhấp vào nút để tạo mã token. Trang tiếp theo sẽ hiển thị cho bạn các lệnh chính xác bạn phải nhập trên máy chủ của mình. Sau lệnh đầu tiên, nhập:

sudo snap install canonical-livepatch

Đợi vài giây cho đến khi gói snap được cài đặt đầy đủ. Khi thực hiện xong, bạn sẽ nhận được một kết quả tương tự như những gì có trong hình sau.

Cách thiết lập Livepatch trên Ubuntu

Cuối cùng, với lệnh sau từ trang của Canonical sudo canonical-livepatch enable #PASTE_YOUR_TOKEN_HERE, service sẽ hoạt động và tự động áp dụng các bản vá bảo mật cho kernel, bất cứ khi nào cần thiết, không có yêu cầu đầu vào từ phía người dùng.

Cài đặt snap daemon nếu cần thiết

Trong một số trường hợp hiếm hoi, lệnh đầu tiên trong phần trước có thể không thành công, với thông báo lỗi sau: -bash: /usr/bin/snap: No such file or directory. Trong trường hợp này, điều đó có nghĩa là nhà cung cấp máy chủ của bạn có image hệ điều hành Ubuntu không bao gồm service snap daemon theo mặc định. Cài đặt nó với lệnh:

sudo apt update && sudo apt install snapd

Bây giờ chạy lại hai lệnh từ phần trước một lần nữa.

Giữ máy chủ của bạn luôn được cập nhật

Livepatch sẽ áp dụng tất cả các cập nhật bảo mật cần thiết cho kernel của bạn. Tuy nhiên, bạn vẫn nên nâng cấp phần còn lại của hệ thống một cách thường xuyên bằng một lệnh như:

sudo apt update && sudo apt upgrade

Bạn nên làm điều này hàng tuần, hoặc thậm chí thường xuyên hơn, nếu bạn có thể. Các gói hệ thống quan trọng có thể nhắc bạn rằng chúng cần được khởi động lại để áp dụng các bản sửa lỗi bảo mật mới nhất.

Giữ máy chủ của bạn luôn được cập nhật

Những thao tác khởi động lại này không phá vỡ bất kỳ service nào trong tiến trình. Ví dụ, trong trường hợp này, daemon SSH đã được khởi động lại mà không làm gián đoạn phiên SSH đang hoạt động.

Trong các tình huống khác, bạn có thể tự khởi động lại các service để đảm bảo rằng code mới, đã vá được load lại và các bản sửa lỗi bảo mật được áp dụng. Ví dụ, nếu bạn nhận thấy gói nginx đã được nâng cấp, bạn có thể chạy: systemctl restart nginx.service để load lại nginx daemon vào bộ nhớ.

Mặt khác, mặc dù một gói được nâng cấp, nó vẫn có thể chạy với code cũ, dễ gặp vấn đề, khiến máy chủ của bạn có nguy cơ bị tấn công. Một số nâng cấp gói thực hiện điều này cho bạn, nhưng một số nâng cấp khác thì không. Đó là lý do tại sao việc chú ý đến những gì mà “apt upgrade” thực hiện và khởi động lại một số service, nếu cần thiết, là một thói quen tốt. Bạn cũng có thể nhìn vào nhật ký để xem điều này đã được thực hiện tự động chưa.

Như bạn có thể thấy, Canonical đã làm cho việc tránh khởi động lại trên máy chủ khá dễ dàng. Về phần kernel, có một phần không cần bảo trì. Điều duy nhất bạn có thể làm là chạy lệnh: canonical-livepatch status để kiểm tra mọi thứ.

Chúc bạn thực hiện thành công!

Thứ Ba, 13/08/2019 11:32
31 👨 327