Kiểm tra yêu cầu phần cứng và hỗ trợ SGX trên CPU
Intel SGX (Software Guard Extensions) chỉ hoạt động trên các dòng CPU Intel thế hệ Skylake trở lên (thế hệ 6) hoặc dòng Xeon Scalable đời mới. Bạn cần xác minh ngay lập tức xem CPU đang dùng có hỗ trợ phần cứng SGX hay không trước khi tiến hành cài đặt hệ điều hành.
Sử dụng lệnh lscpu để quét các cờ phần cứng (flags) được kích hoạt. Cờ quan trọng nhất là sgx. Nếu thiếu cờ này, hệ thống sẽ không thể tạo Enclave.
grep -i "sgx" /proc/cpuinfo
Kết quả mong đợi: Lệnh trả về dòng chứa từ khóa flags và trong danh sách đó phải có từ sgx. Nếu lệnh trả về trống (no match), CPU của bạn không hỗ trợ SGX hoặc tính năng đã bị tắt ở BIOS.
Để kiểm tra chi tiết hơn về trạng thái hỗ trợ SGX của hệ thống, sử dụng công cụ sgx_status_check (nếu đã cài đặt trước) hoặc kiểm tra qua file /sys/class/intel_sgx/enclaves. Tuy nhiên, cách đơn giản và chính xác nhất trên Linux chưa cài đặt driver là dùng cpuid hoặc lscpu.
lscpu | grep -i "sgx"
Kết quả mong đợi: Xuất hiện dòng sgx: yes hoặc sgx: supported trong output. Nếu thấy sgx: no, bạn cần kiểm tra lại phần BIOS.
Cấu hình BIOS và kích hoạt tính năng SGX
Ngày nay, nhiều server mặc định tắt tính năng SGX để tối ưu hiệu năng cho các tác vụ không yêu cầu bảo mật cao hoặc để tránh xung đột với Hyper-V. Bạn cần truy cập vào giao diện quản lý BIOS/UEFI của máy chủ để kích hoạt thủ công.
Khởi động lại máy chủ và nhấn phím tắt tương ứng (thường là F2, Del, hoặc F10 tùy hãng) để vào BIOS. Tìm đến mục Processor Configuration hoặc Security.
Các tùy chọn cần bật (Enable) bao gồm:
- Intel SGX: Chọn trạng thái Enabled hoặc Software Guard Extensions.
- SGX Enclave Size: Đặt kích thước bộ nhớ dành riêng cho Enclave. Giá trị khuyến nghị là 128MB hoặc 256MB để đảm bảo đủ không gian cho các thư viện cơ bản.
- Vanderpool (VT-d): Nên bật nếu bạn dự định chạy SGX trong môi trường ảo hóa (Virtualization), nhưng với deployment trực tiếp (Bare-metal) thì không bắt buộc.
Lưu ý: Sau khi thay đổi, nhấn F10 để lưu và khởi động lại (Save & Exit). Hệ thống sẽ reboot để áp dụng cấu hình phần cứng mới.
Verify kết quả sau khi vào BIOS: Chạy lại lệnh lscpu | grep -i "sgx". Nếu trước đó trả về "no" hoặc trống, giờ phải trả về "yes" hoặc hiển thị cờ sgx trong flags. Nếu vẫn không thấy, kiểm tra lại xem có dòng thông báo lỗi về SGX trong dmesg hay không.
Cài đặt hệ điều hành Linux tối ưu cho SGX
Để đảm bảo tính tương thích và hỗ trợ driver tốt nhất, Intel khuyến nghị sử dụng Ubuntu 20.04 LTS/22.04 LTS hoặc CentOS Stream 8/9. Các bản kernel mặc định của các distro này đã tích hợp sẵn module sgx và sgx_encl.
Tiến hành cài đặt Ubuntu 22.04 LTS qua ISO chuẩn. Trong quá trình cài đặt, không cần cấu hình đặc biệt, chỉ cần đảm bảo phân vùng / (root) có ít nhất 20GB và phân vùng swap đủ lớn (khuyến nghị 4GB trở lên) để tránh OOM Killer làm sập Enclave.
Sau khi cài xong hệ điều hành, bước đầu tiên là cập nhật toàn bộ hệ thống và kernel để đảm bảo bạn có các bản vá bảo mật mới nhất cho module SGX.
sudo apt update && sudo apt upgrade -y
Kết quả mong đợi: Quá trình cập nhật hoàn tất, không có lỗi, và thông báo "Processing triggers for linux-image..." xuất hiện.
Để đảm bảo kernel mới được tải, khởi động lại máy chủ. Sau khi vào lại hệ thống, kiểm tra phiên bản kernel.
uname -r
Kết quả mong đợi: Phiên bản kernel phải là 5.15 trở lên (đối với Ubuntu 22.04) để hỗ trợ đầy đủ các tính năng SGX mới nhất.
Cấu hình module kernel và tham số khởi động
Trên một số cấu hình server, module SGX có thể bị blacklist hoặc không được load tự động. Bạn cần tạo file cấu hình để đảm bảo kernel load module sgx và sgx_encl khi khởi động.
Tạo file cấu hình tại đường dẫn /etc/modprobe.d/sgx.conf với nội dung sau:
cat > /etc/modprobe.d/sgx.conf
Chờ một chút, nội dung trên là ví dụ về cách blacklist. Thực tế, chúng ta muốn ENABLE nó. Do đó, hãy tạo lại file chính xác để load module:
cat > /etc/modprobe.d/sgx.conf
Tuy nhiên, cách tốt nhất và an toàn nhất trên Ubuntu là sử dụng lệnh modprobe trực tiếp và thêm vào file modules-load.d để tự động load khi boot.
echo "sgx" | sudo tee /etc/modules-load.d/sgx.conf
echo "sgx_encl" | sudo tee -a /etc/modules-load.d/sgx.conf
Kết quả mong đợi: File /etc/modules-load.d/sgx.conf được tạo với nội dung chứa hai dòng là sgx và sgx_encl.
Bây giờ, khởi động lại máy chủ để áp dụng cấu hình load module tự động.
sudo reboot
Sau khi reboot, verify rằng các module đã được load vào kernel.
lsmod | grep sgx
Kết quả mong đợi: Xuất hiện ít nhất hai dòng trong output:
sgx_encl (module quản lý enclave)
sgx (module core của SGX)
Nếu không thấy, hãy chạy sudo modprobe sgx thủ công và kiểm tra lỗi bằng dmesg | grep sgx.
Kiểm tra quyền truy cập và thư mục thiết bị
Để các ứng dụng và database có thể truy cập vào phần cứng SGX, Linux cần tạo các device node tương ứng trong thư mục /dev. Nếu module đã load thành công, các file này sẽ tự động xuất hiện.
ls -l /dev/sgx*
ls -l /sys/class/intel_sgx/
Kết quả mong đợi: Bạn sẽ thấy các file như /dev/sgx_encl và /dev/sgx_provision. Thư mục /sys/class/intel_sgx/ phải tồn tại và chứa các thông tin về trạng thái phần cứng.
Để đảm bảo user (ví dụ: postgres hoặc root) có quyền truy cập, kiểm tra quyền sở hữu (ownership) của các file device này.
stat /dev/sgx_encl
Kết quả mong đợi: Quyền truy cập (Access: (0666/cr-w-rw-rw-)) hoặc (0660) với nhóm sgx hoặc root. Nếu quyền quá hạn chế, bạn có thể cần thêm user vào nhóm sgx (nếu tồn tại) hoặc điều chỉnh udev rules, nhưng mặc định thường là 666 trên các bản Ubuntu mới cho phép root và các user đã cấu hình đúng truy cập.
Verify cuối cùng: Chạy lệnh kiểm tra trạng thái SGX của hệ thống.
cat /sys/class/intel_sgx/enclaves/sgx_encl0/size
cat /sys/class/intel_sgx/enclaves/sgx_encl0/type
Kết quả mong đợi: Trả về các giá trị số và loại enclave (ví dụ: EC cho Enclave Cache hoặc SE cho Secure Enclave), xác nhận phần cứng đã sẵn sàng cho bước tiếp theo là cài đặt SDK.
Điều hướng series:
Mục lục: Series: Triển khai Database bảo mật với Confidential Computing và Linux SGX
« Phần 1: Hiểu rõ Confidential Computing và kiến trúc Intel SGX
Phần 3: Cài đặt SDK Intel SGX và các thư viện nền tảng »