การเปิดตัว systemd system manager 252 พร้อมการสนับสนุน UKI (Unified Kernel Image)

หลังจากห้าเดือนของการพัฒนาก็มีการนำเสนอการเปิดตัวตัวจัดการระบบ systemd 252 การเปลี่ยนแปลงที่สำคัญในเวอร์ชันใหม่คือการรวมการสนับสนุนสำหรับกระบวนการบูตที่ทันสมัยซึ่งช่วยให้คุณสามารถตรวจสอบไม่เพียง แต่เคอร์เนลและ bootloader เท่านั้น แต่ยังรวมถึงส่วนประกอบด้วย ของสภาพแวดล้อมระบบพื้นฐานโดยใช้ลายเซ็นดิจิทัล

วิธีการที่นำเสนอเกี่ยวข้องกับการใช้อิมเมจเคอร์เนลแบบรวม UKI (Unified Kernel Image) เมื่อโหลด ซึ่งรวมตัวจัดการสำหรับการโหลดเคอร์เนลจาก UEFI (UEFI boot stub) อิมเมจเคอร์เนล Linux และสภาพแวดล้อมระบบ initrd ที่โหลดลงในหน่วยความจำที่ใช้ สำหรับการเริ่มต้นเบื้องต้นในขั้นตอนก่อนที่จะติดตั้งรูท FS อิมเมจ UKI ได้รับการบรรจุเป็นไฟล์ปฏิบัติการไฟล์เดียวในรูปแบบ PE ซึ่งสามารถโหลดได้โดยใช้โปรแกรมโหลดบูตแบบเดิมหรือเรียกโดยตรงจากเฟิร์มแวร์ UEFI เมื่อเรียกจาก UEFI คุณสามารถตรวจสอบความสมบูรณ์และความน่าเชื่อถือของลายเซ็นดิจิทัลไม่เพียงแต่เคอร์เนลเท่านั้น แต่ยังรวมถึงเนื้อหาของ initrd ด้วย

ในการคำนวณพารามิเตอร์ของการลงทะเบียน TPM PCR (Trusted Platform Module Platform Configuration Register) ที่ใช้ในการตรวจสอบความสมบูรณ์และสร้างลายเซ็นดิจิทัลของอิมเมจ UKI จะมีการรวมยูทิลิตี้ systemd-measure ใหม่ไว้ด้วย รหัสสาธารณะและข้อมูล PCR ที่มากับลายเซ็นสามารถฝังลงในอิมเมจสำหรับบูต UKI ได้โดยตรง (คีย์และลายเซ็นจะถูกบันทึกในไฟล์ PE ในช่อง '.pcrsig' และ '.pcrkey') และดึงข้อมูลมาจากภายนอก หรือสาธารณูปโภคภายใน

โดยเฉพาะอย่างยิ่งยูทิลิตี้ systemd-cryptsetup, systemd-cryptenroll และ systemd-creds ได้รับการปรับใช้เพื่อใช้ข้อมูลนี้ ซึ่งคุณสามารถมั่นใจได้ว่าพาร์ติชั่นดิสก์ที่เข้ารหัสนั้นเชื่อมโยงกับเคอร์เนลที่เซ็นชื่อแบบดิจิทัล (ในกรณีนี้คือการเข้าถึงพาร์ติชั่นที่เข้ารหัส จะมีให้เฉพาะในกรณีที่รูปภาพ UKI ผ่านการตรวจสอบด้วยลายเซ็นดิจิทัลตามพารามิเตอร์ที่อยู่ใน TPM)

นอกจากนี้ ยังมียูทิลิตี systemd-pcrphase ซึ่งช่วยให้คุณควบคุมการเชื่อมโยงขั้นตอนการบูตต่างๆ กับพารามิเตอร์ที่อยู่ในหน่วยความจำของตัวประมวลผลการเข้ารหัสลับที่รองรับข้อกำหนด TPM 2.0 (ตัวอย่างเช่น คุณสามารถทำให้คีย์ถอดรหัสพาร์ติชัน LUKS2 พร้อมใช้งานเฉพาะใน รูปภาพเริ่มต้นและบล็อกการเข้าถึงในภายหลังในการดาวน์โหลด)

การเปลี่ยนแปลงอื่นๆ:

  • ตรวจสอบให้แน่ใจว่าภาษาเริ่มต้นคือ 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/
  • สำหรับอิมเมจระบบ จะมีการตั้งค่าแฟล็กสิ้นสุดการสนับสนุน โดยพิจารณาข้อเท็จจริงนี้ตามค่าของพารามิเตอร์ใหม่ “SUPPORT_END=” ในไฟล์ /etc/os-release
  • เพิ่มการตั้งค่า “ConditionCredential=” และ “AssertCredential=” ซึ่งสามารถใช้เพื่อละเว้นหรือหยุดการทำงานของยูนิตหากไม่มีข้อมูลรับรองบางอย่างในระบบ
  • เพิ่มการตั้งค่า “DefaultSmackProcessLabel=” และ “DefaultDeviceTimeoutSec=” ให้กับ system.conf และ user.conf เพื่อกำหนดระดับความปลอดภัย SMACK เริ่มต้นและการหมดเวลาการเปิดใช้งานหน่วย
  • ในการตั้งค่า “ConditionFirmware=” และ “AssertFirmware=” ได้มีการเพิ่มความสามารถในการระบุฟิลด์ SMBIOS แต่ละฟิลด์แล้ว เช่น เพื่อเปิดใช้ยูนิตเฉพาะในกรณีที่ฟิลด์ /sys/class/dmi/id/board_name มีค่า “กำหนดเอง” บอร์ด” คุณสามารถระบุ “ConditionFirmware=smbios” -field(board_name = "Custom Board")"
  • ในระหว่างกระบวนการเริ่มต้น (PID 1) ความสามารถในการนำเข้าข้อมูลรับรองจากฟิลด์ SMBIOS (ประเภท 11 “สตริงผู้จำหน่าย OEM”) ได้ถูกเพิ่มเข้ามา นอกเหนือจากคำจำกัดความผ่าน qemu_fwcfg ซึ่งช่วยให้การจัดเตรียมข้อมูลรับรองไปยังเครื่องเสมือนง่ายขึ้น และกำจัดปัญหา ความต้องการเครื่องมือของบุคคลที่สาม เช่น cloud -init และ ignition
  • ในระหว่างการปิดระบบ ตรรกะสำหรับการถอนการต่อเชื่อมระบบไฟล์เสมือน (proc, sys) มีการเปลี่ยนแปลง และข้อมูลเกี่ยวกับกระบวนการที่บล็อกการถอนการต่อเชื่อมระบบไฟล์จะถูกบันทึกไว้ในบันทึก
  • ตัวกรองการโทรของระบบ (SystemCallFilter) อนุญาตให้เข้าถึงการเรียกของระบบ riscv_flush_icache ตามค่าเริ่มต้น
  • sd-boot bootloader เพิ่มความสามารถในการบูตในโหมดผสม ซึ่งเคอร์เนล Linux 64 บิตทำงานจากเฟิร์มแวร์ UEFI 32 บิต เพิ่มความสามารถในการทดลองเพื่อใช้คีย์ SecureBoot จากไฟล์ที่พบใน ESP (พาร์ติชันระบบ EFI) โดยอัตโนมัติ
  • มีการเพิ่มตัวเลือกใหม่ลงในยูทิลิตี้ bootctl: “—all-architectures” สำหรับการติดตั้งไบนารีสำหรับสถาปัตยกรรม EFI ที่รองรับทั้งหมด “—root=” และ “—image=” สำหรับการทำงานกับไดเร็กทอรีหรือดิสก์อิมเมจ “—install-source =" สำหรับการกำหนดแหล่งที่มาสำหรับการติดตั้ง "-efi-boot-option-description=" เพื่อควบคุมชื่อรายการบูต
  • คำสั่ง 'list-automounts' ได้รับการเพิ่มลงในยูทิลิตี systemctl เพื่อแสดงรายการไดเร็กทอรีที่เมาท์โดยอัตโนมัติและตัวเลือก "--image =" เพื่อรันคำสั่งที่เกี่ยวข้องกับดิสก์อิมเมจที่ระบุ เพิ่มตัวเลือก "--state=" และ "--type=" ให้กับคำสั่ง 'show' และ 'status'
  • systemd-networkd เพิ่มตัวเลือก “TCPCongestionControlAlgorithm=” เพื่อเลือกอัลกอริธึมควบคุมความแออัดของ TCP, “KeepFileDescriptor=” เพื่อบันทึกตัวอธิบายไฟล์ของอินเทอร์เฟซ TUN/TAP, “NetLabel=” เพื่อตั้งค่า NetLabels, “RapidCommit=” เพื่อเพิ่มความเร็วในการกำหนดค่าผ่าน DHCPv6 (อาร์เอฟซี 3315) พารามิเตอร์ “RouteTable=” ช่วยให้สามารถระบุชื่อของตารางเส้นทางได้
  • systemd-nspawn อนุญาตให้ใช้เส้นทางไฟล์สัมพัทธ์ในตัวเลือก "--bind=" และ "--overlay=" เพิ่มการรองรับพารามิเตอร์ 'rootidmap' ให้กับตัวเลือก "--bind=" เพื่อผูก ID ผู้ใช้รูทในคอนเทนเนอร์กับเจ้าของไดเร็กทอรีที่เมาท์บนฝั่งโฮสต์
  • systemd-resolved ใช้ OpenSSL เป็นแบ็กเอนด์การเข้ารหัสตามค่าเริ่มต้น (การสนับสนุน gnutls ยังคงเป็นตัวเลือก) ขณะนี้อัลกอริทึม DNSSEC ที่ไม่รองรับจะถือว่าไม่ปลอดภัยแทนที่จะส่งกลับข้อผิดพลาด (SERVFAIL)
  • systemd-sysusers, systemd-tmpfiles และ systemd-sysctl ใช้ความสามารถในการถ่ายโอนการตั้งค่าผ่านกลไกการจัดเก็บข้อมูลรับรอง
  • เพิ่มคำสั่ง 'compare-versions' เพื่อ systemd-analyze เพื่อเปรียบเทียบสตริงกับหมายเลขเวอร์ชัน (คล้ายกับ 'rpmdev-vercmp' และ 'dpkg --compare-versions') เพิ่มความสามารถในการกรองหน่วยด้วยมาสก์ในคำสั่ง 'systemd-analyze dump'
  • เมื่อเลือกโหมดสลีปแบบหลายขั้นตอน (ระงับแล้วไฮเบอร์เนต) เวลาที่ใช้ในโหมดสแตนด์บายจะถูกเลือกตามการคาดการณ์อายุการใช้งานแบตเตอรี่ที่เหลืออยู่ การเปลี่ยนไปใช้โหมดสลีปทันทีเกิดขึ้นเมื่อแบตเตอรี่เหลือน้อยกว่า 5%
  • โหมดเอาต์พุตใหม่ "-o short-delta" ได้รับการเพิ่มใน 'journalctl' ซึ่งแสดงความแตกต่างของเวลาระหว่างข้อความต่างๆ ในบันทึก
  • systemd-repart เพิ่มการรองรับสำหรับการสร้างพาร์ติชันด้วยระบบไฟล์ Squashfs และพาร์ติชันสำหรับ dm-verity รวมถึงลายเซ็นดิจิทัล
  • เพิ่มการตั้งค่า "StopIdleSessionSec=" ให้กับ systemd-logind เพื่อสิ้นสุดเซสชันที่ไม่ได้ใช้งานหลังจากหมดเวลาที่ระบุ
  • Systemd-cryptenroll ได้เพิ่มตัวเลือก "--unlock-key-file=" เพื่อแยกคีย์ถอดรหัสออกจากไฟล์แทนที่จะแจ้งให้ผู้ใช้ทราบ
  • ขณะนี้สามารถรันยูทิลิตี systemd-growfs ในสภาพแวดล้อมที่ไม่มี udev ได้แล้ว
  • systemd-backlight ได้รับการปรับปรุงการรองรับระบบที่มีการ์ดกราฟิกหลายตัว
  • ใบอนุญาตสำหรับตัวอย่างโค้ดที่ให้ไว้ในเอกสารประกอบได้ถูกเปลี่ยนจาก CC0 เป็น MIT-0

การเปลี่ยนแปลงที่ทำลายความเข้ากันได้:

  • เมื่อตรวจสอบหมายเลขเวอร์ชันเคอร์เนลโดยใช้คำสั่ง ConditionKernelVersion ตอนนี้การเปรียบเทียบสตริงแบบธรรมดาจะถูกนำมาใช้ในตัวดำเนินการ '=' และ '!=' และหากไม่ได้ระบุตัวดำเนินการเปรียบเทียบเลย ก็สามารถใช้การจับคู่ glob-mask ได้โดยใช้ อักขระ '*', '?' และ '[', ']'. หากต้องการเปรียบเทียบเวอร์ชันสไตล์ stverscmp() ให้ใช้ตัวดำเนินการ '<', '>', '<=' และ '>='
  • แท็ก SELinux ที่ใช้ในการตรวจสอบการเข้าถึงจากไฟล์หน่วยจะถูกอ่าน ณ เวลาที่โหลดไฟล์ แทนที่จะเป็นเวลาที่ตรวจสอบการเข้าถึง
  • ขณะนี้เงื่อนไข "ConditionFirstBoot" จะถูกทริกเกอร์ในการบู๊ตครั้งแรกของระบบโดยตรงที่ขั้นตอนการบู๊ตเท่านั้น และส่งคืน "false" เมื่อเรียกยูนิตหลังจากการบู๊ตเสร็จสิ้น
  • ในปี 2024 systemd วางแผนที่จะหยุดสนับสนุนกลไกการจำกัดทรัพยากร cgroup v1 ซึ่งเลิกใช้แล้วใน systemd release 248 ผู้ดูแลระบบควรดูแลล่วงหน้าในการโยกย้ายบริการที่ใช้ cgroup v2 ไปยัง cgroup v1 ข้อแตกต่างที่สำคัญระหว่าง cgroups v2 และ v1 คือการใช้ลำดับชั้น cgroups ทั่วไปสำหรับทรัพยากรทุกประเภท แทนที่จะแยกลำดับชั้นสำหรับการจัดสรรทรัพยากร CPU เพื่อควบคุมการใช้หน่วยความจำ และสำหรับ I/O ลำดับชั้นที่แยกจากกันทำให้เกิดปัญหาในการจัดระเบียบปฏิสัมพันธ์ระหว่างตัวจัดการ และต้นทุนทรัพยากรเคอร์เนลเพิ่มเติม เมื่อใช้กฎสำหรับกระบวนการที่อ้างอิงในลำดับชั้นที่ต่างกัน
  • ในช่วงครึ่งหลังของปี 2023 เราวางแผนที่จะยุติการสนับสนุนสำหรับการแบ่งลำดับชั้นไดเรกทอรี โดยที่ /usr ถูกเมาท์แยกจากรูท หรือ /bin และ /usr/bin, /lib และ /usr/lib ถูกแยกออกจากกัน

ที่มา: opennet.ru

เพิ่มความคิดเห็น