發布帶有 UKI(統一核心映像)支援的 systemd 系統管理器 252

經過五個月的開發,系統管理器systemd 252發布了,新版本的關鍵變化是集成了對現代化引導過程的支持,它不僅允許您驗證內核和引導程序,還可以驗證組件使用數位簽名的基本系統環境。

所提出的方法涉及在載入時使用統一的核心映像UKI(統一核心映像),它結合了從UEFI(UEFI引導存根)載入核心的處理程序、Linux核心映像和載入到記憶體中的initrd系統環境,使用用於掛載根FS 之前階段的初始初始化。 UKI 映像檔被打包為 PE 格式的單一可執行文件,可以使用傳統開機載入程式載入或直接從 UEFI 韌體呼叫。 從 UEFI 呼叫時,不僅可以驗證核心數位簽章的完整性和可靠性,還可以驗證 initrd 內容的完整性和可靠性。

為了計算用於監控完整性並產生 UKI 映像數位簽章的 TPM PCR(可信任平台模組平台配置暫存器)暫存器的參數,包含了一個新的實用程式 systemd-measure。 簽名中使用的公鑰和附帶的 PCR 資訊可以直接嵌入到 UKI 啟動映像中(密鑰和簽名保存在 PE 檔案中的“.pcrsig”和“.pcrkey”欄位中)並由外部從中提取或內部實用程式.

特別是,systemd-cryptsetup、systemd-cryptenroll 和systemd-creds 實用程式已適應使用此信息,透過這些訊息,您可以確保加密的磁碟分割區綁定到數位簽章的核心(在這種情況下,可以存取加密的分區)僅當 UKI 映像已通過基於 TPM 中參數的數位簽章驗證時才提供)。

此外,還包含 systemd-pcrphase 實用程序,它允許您控制各種啟動階段與支援 TPM 2.0 規範的加密處理器記憶體中的參數的綁定(例如,您可以使 LUKS2 分區解密金鑰僅在initrd 映像並在稍後階段下載阻止對其的存取)。

其他一些變化:

  • 確保預設區域設定為 C.UTF-8,除非在設定中指定了不同的區域設定。
  • 現在可以在首次引導期間執行完整的服務預設操作(“systemctl預設”)。 在啟動時啟用預設需要使用“-Dfirst-boot-full-preset”選項進行構建,但計劃在未來版本中預設為啟用。
  • 使用者管理單元涉及CPU資源控制器,這使得可以確保CPUWeight設定應用於用於將系統分割成多個部分(app.slice、background.slice、session.slice)的所有切片單元,以隔離之間的資源不同的用戶服務,競爭CPU資源。 CPUWeight也支援「空閒」值來啟動適當的資源配置模式。
  • 在臨時(“瞬態”)單元和 systemd-repart 實用程式中,可以透過在 /etc/systemd/system/name.d/ 目錄中建立嵌入式檔案來覆蓋設定。
  • 對於系統映像,設定了支援結束標誌,根據 /etc/os-release 檔案中新參數「SUPPORT_END=」的值確定這一事實。
  • 新增了「ConditionCredential=」和「AssertCredential=」設置,如果系統中不存在某些憑證,則這些設定可用於忽略或崩潰單元。
  • 在 system.conf 和 user.conf 中新增了「DefaultSmackProcessLabel=」和「DefaultDeviceTimeoutSec=」設置,以定義預設 SMACK 安全等級和單元啟動逾時。
  • 在“ConditionFirmware=”和“AssertFirmware=”設定中,新增了指定各個 SMBIOS 欄位的功能,例如,僅當 /sys/class/dmi/id/board_name 欄位包含值“Custom”時才啟動單元Board”,您可以指定“ConditionFirmware=smbios” -field(board_name = "Custom Board")"。
  • 在初始化過程(PID 1) 期間,除了透過qemu_fwcfg 進行定義之外,還添加了從SMBIOS 欄位(類型11,「OEM 供應商字串」)導入憑證的功能,這簡化了向虛擬機器提供憑證並消除了需要第三方工具,例如cloud-init和ignition。
  • 在關閉期間,卸載虛擬檔案系統(proc、sys)的邏輯已更改,有關阻止卸載檔案系統的進程的資訊將保存在日誌中。
  • 系統呼叫過濾器(SystemCallFilter)預設允許存取 riscv_flush_icache 系統呼叫。
  • sd-boot 開機載入程式增加了在混合模式下引導的功能,其中 64 位元 Linux 核心從 32 位元 UEFI 韌體運行。 新增了自動應用 ESP(EFI 系統分區)中檔案中的 SecureBoot 金鑰的實驗功能。
  • bootctl 公用程式中新增了新選項:「—all-architectures」用於為所有支援的EFI 架構安裝二進位文件,「—root=」和「—image=」用於處理目錄或磁碟映像,「—install -source” =”用於定義安裝來源,“-efi-boot-option-description=”用於控制啟動項目名稱。
  • 「list-automounts」命令已新增至 systemctl 公用程式中,以顯示自動安裝的目錄列表,並新增「--image=」選項來執行與指定磁碟映像相關的命令。 在“show”和“status”命令中新增了“--state=”和“--type=”選項。
  • systemd-networkd 新增​​了選項「TCPCongestionControlAlgorithm=」用於選擇TCP 擁塞控制演算法,「KeepFileDescriptor=」用於保存TUN/TAP 介面的檔案描述符,「NetLabel=」用於設定NetLabels,「RapidCommit=」用於透過DHCPv6 加速配置(RFC 3315)。 “RouteTable=”參數允許指定路由表的名稱。
  • systemd-nspawn 允許在「--bind=」和「--overlay=」選項中使用相對檔案路徑。 在「--bind=」選項中新增了對「rootidmap」參數的支持,以將容器中的root使用者ID綁定到主機端掛載目錄的擁有者。
  • systemd-resolved 預設使用 OpenSSL 作為其加密後端(保留 gnutls 支援作為選項)。 不支援的 DNSSEC 演算法現在被視為不安全,而不是傳回錯誤 (SERVFAIL)。
  • systemd-sysusers、systemd-tmpfiles 和 systemd-sysctl 實現了透過憑證儲存機制傳輸設定的功能。
  • 在 systemd-analyze 中加入了「compare-versions」指令,以將字串與版本號進行比較(類似於「rpmdev-vercmp」和「dpkg --compare-versions」)。 在「systemd-analyze dump」指令中新增了按掩碼過濾單元的功能。
  • 當選擇多階段睡眠模式(掛起-然後休眠)時,現在根據剩餘電池壽命的預測來選擇待機模式所花費的時間。 當電池剩餘電量低於 5% 時,會立即轉換為睡眠模式。
  • 'journalctl' 中新增了新的輸出模式“-o Short-delta”,顯示日誌中不同訊息之間的時間差。
  • systemd-repart 新增了使用 Squashfs 檔案系統建立分割區和 dm-verity 分割區的支持,包括數位簽章。
  • 在 systemd-logind 新增了「StopIdleSessionSec=」設置,以在指定逾時後結束非活動會話。
  • Systemd-cryptenroll 新增了一個「--unlock-key-file=」選項,用於從檔案中提取解密金鑰,而不是提示使用者。
  • 現在可以在沒有 udev 的環境中執行 systemd-growfs 實用程式。
  • systemd-backlight 改善了對具有多個顯示卡的系統的支援。
  • 文件中提供的程式碼範例的授權已從 CC0 變更為 MIT-0。

破壞相容性的變更:

  • 使用 ConditionKernelVersion 指令檢查內核版本號時,現在在「=」和「!=」運算子中使用簡單的字串比較,如果根本未指定比較運算符,則可以使用 glob-mask 匹配來使用人物'*' , '?' 和 '[', ']'。 若要比較 stverscmp() 樣式版本,請使用「<」、「>」、「<=」和「>=」運算子。
  • 用於檢查單元檔案存取權限的 SELinux 標記現在在檔案載入時讀取,而不是在存取檢查時讀取。
  • 現在,「ConditionFirstBoot」條件僅在系統首次啟動時直接在啟動階段觸發,並在啟動完成後呼叫單元時傳回「false」。
  • 2024 年,systemd 計劃停止支援 cgroup v1 資源限制機制,該機制在 systemd 版本 248 中已棄用。建議管理員在將基於 cgroup v2 的服務移轉到 cgroup v1 之前小心謹慎。 cgroups v2 和 v1 之間的主要區別在於,對所有類型的資源使用通用的 cgroups 層次結構,而不是使用單獨的層次結構來分配 CPU 資源、調節記憶體消耗和 I/O。 單獨的層次結構會導致組織處理程序之間的互動變得困難,並且在為不同層次結構中引用的程序應用規則時會導致額外的核心資源成本。
  • 在 2023 年下半年,我們計劃結束對分割目錄層次結構的支持,其中 /usr 與根目錄分開安裝,或 /bin 和 /usr/bin、/lib 和 /usr/lib 分開。

來源: opennet.ru

添加評論