UKI trên Fedora: Tự tay ‘đóng gói’ Kernel để bảo mật Secure Boot tuyệt đối

Fedora tutorial - IT technology blog
Fedora tutorial - IT technology blog

Quick start: Chuyển sang UKI trong 5 phút

Bạn muốn máy Fedora tạo file Unified Kernel Image (UKI) tự động thay vì cách truyền thống? Mình đã triển khai thực tế trên Fedora 39 và 40, hệ thống chạy rất ổn định. Chỉ cần vài bước thiết lập là xong.

Đầu tiên, hãy cài đặt ukify và các công cụ bổ trợ:

sudo dnf install systemd-ukify binutils

Tiếp theo, ta cần báo cho kernel-install biết bạn muốn xuất ra file UKI. Hãy mở file /etc/kernel/install.conf:

sudo nano /etc/kernel/install.conf

Thêm dòng cấu hình sau:

layout=uki

Để kiểm tra, hãy thử cài đặt lại kernel hiện tại. Bạn sẽ thấy một file .efi xuất hiện trong phân vùng EFI:

sudo kernel-install add $(uname -r) /lib/modules/$(uname -r)/vmlinuz

Hãy check thư mục /boot/efi/EFI/Linux/. Nếu thấy file đuôi .efi ở đó, chúc mừng bạn đã thành công. Từ giờ, mỗi khi dnf update, Fedora sẽ tự lo phần còn lại.

Tại sao UKI lại là “chân ái” cho bảo mật?

Đã bao giờ bạn đứng hình trước màn hình grub rescue lúc 2 giờ sáng chưa? Mình từng bị sau khi resize phân vùng và hệ thống báo lỗi “Initrd not found”. Đó là lúc mình thấy rõ sự rời rạc của kiến trúc boot Linux cũ.

Thông thường, GRUB phải tải Kernel, sau đó tải Initrd và nạp Command Line. Ba thành phần này nằm riêng biệt. Một kẻ tấn công có quyền root có thể sửa /etc/default/grub, thêm init=/bin/bash để bypass mật khẩu dễ dàng.

UKI (Unified Kernel Image) thay đổi hoàn toàn cuộc chơi. Nó gom Kernel, Initrd, Command Line và logo boot vào một file thực thi EFI (.efi) duy nhất.

Khi tất cả nằm trong một “gói”, bạn có thể dùng Secure Boot để ký số. Chỉ cần sai lệch 1 bit trong command line, chữ ký sẽ mất hiệu lực. Máy tính sẽ từ chối khởi động ngay lập tức, chặn đứng mọi ý đồ can thiệp trái phép.

Cấu hình thực tế: Tránh những “cái bẫy” phổ biến

Dùng Fedora làm máy làm việc chính suốt 2 năm, mình nhận ra có vài chi tiết nhỏ nhưng có thể khiến hệ thống của bạn “ngỏm” nếu không chú ý.

1. Phân vùng EFI: Đừng để hết chỗ

Đây là sai lầm hay gặp nhất. Phân vùng /boot/efi mặc định của Fedora thường chỉ từ 200MB đến 600MB. Trong khi đó, một file UKI thường nặng khoảng 80MB – 120MB (tùy lượng driver).

Nếu bạn lưu 3 phiên bản kernel, dung lượng sẽ cạn kiệt rất nhanh. Lời khuyên của mình là hãy để phân vùng EFI khoảng 1GB. Nếu không thể chia lại ổ cứng, hãy giới hạn số lượng kernel cũ bằng cách sửa installonly_limit=2 trong /etc/dnf/dnf.conf.

2. Tùy biến Command Line

Vì tham số boot đã bị “đóng băng” bên trong file .efi, bạn không thể nhấn phím ‘e’ để sửa tạm thời trong GRUB. Để thêm các tùy chọn như nvidia-drm.modeset=1, bạn cần tạo file cấu hình cho ukify.

Tạo file /etc/kernel/uki-conf.conf:

[UKI]
Cmdline=root=UUID=xxxx-xxxx ro rhgb quiet

Đừng quên thay UUID chuẩn bằng cách chạy lệnh lsblk -f để lấy thông số của phân vùng root.

Nâng cao: Tự ký UKI bằng Key cá nhân

UKI chỉ thực sự mạnh khi đi kèm Secure Boot. Thay vì phụ thuộc vào key của Microsoft, mình chọn cách tự tạo key riêng để nắm toàn quyền kiểm soát phần cứng.

Tạo cặp khóa bảo mật (Private/Public key):

openssl req -new -x509 -newkey rsa:2048 -nodes -days 3650 -outform DER -keyout MOK.key -out MOK.der

Sau đó, cấu hình /etc/kernel/install.conf để tự động ký mỗi khi build:

layout=uki
uki_generator=ukify

Cài đặt sbsigntools để thực hiện thao tác ký:

sudo dnf install sbsigntools

Cuối cùng, hãy nạp key vào BIOS thông qua mokutil:

sudo mokutil --import MOK.der

Sau khi khởi động lại, máy sẽ hiện màn hình xanh (MOK Manager). Bạn chọn “Enroll MOK”, nhập mật khẩu đã tạo và từ đó hệ thống chỉ tin tưởng những Kernel do chính tay bạn ký.

Kinh nghiệm xử lý sự cố

Trong quá trình hỗ trợ team dev triển khai UKI, mình đúc kết được vài lưu ý quan trọng:

  • Ưu tiên systemd-boot: UKI hoạt động tốt nhất với systemd-boot. Nếu dùng GRUB, hãy dùng lệnh chainloader để trỏ trực tiếp vào file .efi thay vì dùng lệnh linux truyền thống.
  • Tối ưu Initrd: Nếu file UKI vượt quá 150MB, hãy bật chế độ hostonly trong dracut. Việc này giúp loại bỏ các driver thừa thãi, chỉ giữ lại những gì máy bạn thực sự cần.
  • Gỡ lỗi: Nếu boot thất bại, hãy xóa tham số quiet khi build UKI. Những dòng log chạy trên màn hình lúc đó giá trị hơn bất cứ tài liệu hướng dẫn nào.

Chuyển sang UKI không đơn thuần là đuổi theo công nghệ mới. Đây là cách tư duy hiện đại: biến Kernel thành một khối thống nhất, dễ quản lý và cực khó bị xâm nhập. Với những ai dùng Fedora trên laptop chứa dữ liệu nhạy cảm, UKI là rào dập bảo mật không thể thiếu.

Share: