Cấu hình Kernel Module và Cài đặt Driver Intel SGX
Thêm Repository Intel cho Driver SGX
Bạn cần thêm repository chính thức của Intel để lấy gói driver sgx-driver phù hợp với Ubuntu 24.04 (Noble). Gói này chứa kernel module cần thiết để giao tiếp phần cứng SGX.
Thực hiện lệnh để thêm GPG key và nguồn repository:
sudo apt-key adv --keyserver keys.openpgp.com --recv-keys CC238E40548B6FBC
sudo add-apt-repository "deb [arch=amd64] https://download.01.org/intel-sgx/sgx-dp/2.13/linux/ubuntu/noble/sgx-driver ./"
Kết quả: Repository được thêm vào danh sách nguồn của apt, sẵn sàng để tải gói driver.
Cài đặt gói sgx-driver
Cài đặt gói driver chính thức. Gói này sẽ tự động tải và cài đặt kernel module `sgx` vào hệ thống.
sudo apt update
sudo apt install intel-sgx-driver
Kết quả: Hệ thống thông báo đã cài đặt thành công gói `intel-sgx-driver` và các phụ thuộc. Kernel module SGX sẽ được load ngay lập tức.
Cài đặt và Kích hoạt SGX Driver Daemon (sgx_dhsm)
Install gói SGX Driver Daemon
Daemon `sgx_dhsm` (Direct Hardware Security Manager) đóng vai trò quản lý tài nguyên SGX, cấp phát enclave và xử lý yêu cầu attestation. Bạn cần cài đặt gói này riêng biệt.
sudo apt install intel-sgx-driver-dhsm
Kết quả: Gói `intel-sgx-driver-dhsm` được cài đặt, file cấu hình và script khởi động được tạo.
Thiết lập file cấu hình dhsm
File cấu hình mặc định cần được chỉnh sửa để đảm bảo daemon hoạt động đúng với phiên bản driver hiện tại. Bạn cần xác định đường dẫn đến file cấu hình và kiểm tra tham số quan trọng.
Đường dẫn file cấu hình: /etc/sgx/dhsm.conf
Khởi tạo hoặc chỉnh sửa file cấu hình với nội dung sau để đảm bảo daemon chạy đúng mode:
sudo nano /etc/sgx/dhsm.conf
Sao chép nội dung hoàn chỉnh vào file:
[General]
# Enable the daemon
Enable=true
# Path to the SGX driver device node
DevicePath=/dev/sgx_enclave
# Log level (Debug, Info, Warning, Error)
LogLevel=Info
# Maximum number of enclaves allowed
MaxEnclaves=1024
# Path to the socket file for IPC
SocketPath=/var/run/sgx/dhsm.sock
Kết quả: File cấu hình được lưu, daemon sẽ đọc các tham số này khi khởi động.
Kích hoạt và khởi động lại dịch vụ
Để daemon hoạt động ngay lập tức và tự động khởi động khi server reboot, bạn cần enable và start service thông qua systemd.
sudo systemctl daemon-reload
sudo systemctl enable sgx-dhsm
sudo systemctl start sgx-dhsm
Kết quả: Dịch vụ `sgx-dhsm` chuyển sang trạng thái `active (running)`.
Kiểm tra Trạng thái Hoạt động của Driver
Sử dụng công cụ sgx_status
Công cụ `sgx_status` (thuộc gói sgx-dcap-qa hoặc sgx-driver-dev) giúp kiểm tra nhanh xem driver đã được load, phần cứng SGX có được nhận diện và daemon có đang chạy hay không.
sudo sgx_status
Kết quả mong đợi: Xuất hiện thông báo `SGX Driver is loaded` và `SGX DHSM is running`. Nếu có lỗi, bạn sẽ thấy thông báo `SGX Driver is not loaded` hoặc `DHSM is not running`.
Verify trạng thái dịch vụ systemd
Kiểm tra chi tiết trạng thái của daemon để đảm bảo không có lỗi runtime nào bị ẩn.
systemctl status sgx-dhsm
Kết quả mong đợi: Dòng đầu tiên hiển thị `● sgx-dhsm.service - SGX Driver Daemon` với trạng thái màu xanh lá cây `Active: active (running)`.
Cấu hình Quyền truy cập Thiết bị SGX cho User không Root
Thiết lập nhóm (group) sgx_prv
Để phát triển hoặc vận hành ứng dụng SGX mà không cần chạy bằng root, bạn cần cấp quyền truy cập vào thiết bị `/dev/sgx_enclave` và `/dev/sgx_provision` cho user thường. Intel SGX sử dụng nhóm `sgx_prv` để quản lý quyền này.
sudo groupadd -f sgx_prv
Kết quả: Nhóm `sgx_prv` được tạo (nếu chưa tồn tại).
Thêm user vào nhóm sgx_prv
Thêm user hiện tại (hoặc user cụ thể như `developer` hoặc `mysql`) vào nhóm `sgx_prv` để họ có thể tạo enclave.
sudo usermod -aG sgx_prv $USER
Kết quả: User được thêm vào nhóm. Lưu ý: Bạn cần đăng xuất và đăng nhập lại (logout/login) hoặc chạy `newgrp sgx_prv` để nhóm (có hiệu lực).
Đảm bảo quyền truy cập thiết bị
Trong một số trường hợp, udev rules cần được refresh để đảm bảo node thiết bị `/dev/sgx_enclave` có quyền ghi đúng cho nhóm `sgx_prv`. Kiểm tra quyền hiện tại của thiết bị:
ls -l /dev/sgx_enclave
Kết quả mong đợi: Dòng đầu của output hiển thị `crw-rw---- 1 root sgx_prv ... /dev/sgx_enclave`. Nếu quyền không đúng, cần chạy lệnh sau để áp dụng lại rule:
sudo udevadm trigger --subsystem-match=sgx
Xác nhận Driver đã Load thành công
Liệt kê module kernel bằng lsmod
Bước cuối cùng để xác minh kỹ thuật là kiểm tra xem kernel module `sgx` đã được nạp vào kernel hay chưa. Đây là bằng chứng chắc chắn nhất rằng phần cứng đã được driver nhận diện.
lsmod | grep sgx
Kết quả mong đợi: Xuất hiện dòng chứa tên module `sgx` cùng với kích thước và số lượng module phụ thuộc, ví dụ: `sgx 163840 0`.
Verify thiết bị trong sysfs
Kiểm tra thêm trong hệ thống file `/sys` để đảm bảo thiết bị SGX vật lý đã được nhận diện bởi kernel.
ls /sys/class/sgx
Kết quả mong đợi: Thư mục `/sys/class/sgx` tồn tại và chứa các file như `epc0`, `enclave`, `provision`.
Điều hướng series:
Mục lục: Series: Triển khai Database Confidential Computing với Intel SGX trên Ubuntu 24.04
« Phần 1: Kiến trúc Intel SGX và yêu cầu hệ thống trên Ubuntu 24.04
Phần 3: Thiết lập môi trường phát triển với Intel SGX SDK và DCAT »