ผู้จัดการระบบ systemd รีลีส 243

หลังจากห้าเดือนของการพัฒนา นำเสนอ การเปิดตัวผู้จัดการระบบ systemd 243. ในบรรดานวัตกรรมใหม่ ๆ เราสามารถสังเกตการรวมเข้ากับ PID 1 ของตัวจัดการสำหรับหน่วยความจำเหลือน้อยในระบบ รองรับการแนบโปรแกรม BPF ของคุณเองเพื่อกรองการรับส่งข้อมูลของหน่วย ตัวเลือกใหม่มากมายสำหรับ systemd-networkd โหมดสำหรับตรวจสอบแบนด์วิดท์ของเครือข่าย อินเทอร์เฟซที่เปิดใช้งานตามค่าเริ่มต้นบนระบบ 64 บิต หมายเลข PID 22 บิตแทน 16 บิต เปลี่ยนเป็นลำดับชั้น cgroups แบบรวม รวมอยู่ใน systemd-network-generator

การเปลี่ยนแปลงที่สำคัญ:

  • มีการเพิ่มการรับรู้สัญญาณที่สร้างเคอร์เนลเกี่ยวกับหน่วยความจำไม่เพียงพอ (หน่วยความจำไม่เพียงพอ, OOM) ในตัวจัดการ PID 1 เพื่อถ่ายโอนหน่วยที่ถึงขีดจำกัดการใช้หน่วยความจำไปสู่สถานะพิเศษพร้อมความสามารถเสริมเพื่อบังคับให้ยุติการทำงาน หรือหยุด;
  • สำหรับไฟล์หน่วย พารามิเตอร์ใหม่ IPIngressFilterPath และ
    IPEgressFilterPath ซึ่งช่วยให้คุณเชื่อมต่อโปรแกรม BPF กับตัวจัดการที่กำหนดเองเพื่อกรองแพ็กเก็ต IP ขาเข้าและขาออกที่สร้างโดยกระบวนการที่เกี่ยวข้องกับหน่วยนี้ คุณสมบัติที่นำเสนอช่วยให้คุณสร้างไฟร์วอลล์ชนิดหนึ่งสำหรับบริการ systemd ตัวอย่างการเขียน ตัวกรองเครือข่ายอย่างง่ายที่ใช้ BPF

  • เพิ่มคำสั่ง "clean" ลงในยูทิลิตี้ systemctl เพื่อลบแคช ไฟล์รันไทม์ ข้อมูลสถานะ และไดเร็กทอรีบันทึก
  • systemd-networkd เพิ่มการรองรับอินเทอร์เฟซเครือข่าย MACsec, nlmon, IPVTAP และ Xfrm
  • systemd-networkd ใช้การกำหนดค่าแยกต่างหากของสแต็ก DHCPv4 และ DHCPv6 ผ่านส่วน “[DHCPv4]” และ “[DHCPv6]” ในไฟล์การกำหนดค่า เพิ่มตัวเลือก RoutesToDNS เพื่อเพิ่มเส้นทางแยกต่างหากไปยังเซิร์ฟเวอร์ DNS ที่ระบุในพารามิเตอร์ที่ได้รับจากเซิร์ฟเวอร์ DHCP (เพื่อให้การรับส่งข้อมูลไปยัง DNS ถูกส่งผ่านลิงก์เดียวกันกับเส้นทางหลักที่ได้รับจาก DHCP) มีการเพิ่มตัวเลือกใหม่สำหรับ DHCPv4: MaxAttempts - จำนวนคำขอสูงสุดเพื่อรับที่อยู่, BlackList - บัญชีดำของเซิร์ฟเวอร์ DHCP, SendRelease - เปิดใช้งานการส่งข้อความ DHCP RELEASE เมื่อเซสชันสิ้นสุดลง
  • มีการเพิ่มคำสั่งใหม่ให้กับยูทิลิตี systemd-analyze:
    • “ การประทับเวลาการวิเคราะห์ systemd” - การแยกวิเคราะห์เวลาและการแปลง
    • “ ช่วงเวลาการวิเคราะห์ systemd” - การวิเคราะห์และการแปลงช่วงเวลา
    • “เงื่อนไขการวิเคราะห์ systemd” - การแยกวิเคราะห์และการทดสอบนิพจน์ ConditionXYZ
    • “ systemd-analyze exit-status” - การแยกวิเคราะห์และการแปลงรหัสทางออกจากตัวเลขเป็นชื่อและในทางกลับกัน
    • "systemd-analyze unit-files" - แสดงรายการเส้นทางไฟล์ทั้งหมดสำหรับหน่วยและนามแฝงของหน่วย
  • ตัวเลือก SuccessExitStatus, RestartPreventExitStatus และ
    ตอนนี้ RestartForceExitStatus ไม่เพียงแต่รองรับรหัสส่งคืนที่เป็นตัวเลขเท่านั้น แต่ยังรองรับตัวระบุข้อความด้วย (เช่น "DATAERR") คุณสามารถดูรายการรหัสที่กำหนดให้กับตัวระบุได้โดยใช้คำสั่ง "sytemd-analyze exit-status"

  • คำสั่ง "delete" ได้รับการเพิ่มลงในยูทิลิตี้ networkctl เพื่อลบอุปกรณ์เครือข่ายเสมือน รวมถึงตัวเลือก "—stats" เพื่อแสดงสถิติของอุปกรณ์
  • เพิ่มการตั้งค่า SpeedMeter และ SpeedMeterIntervalSec ใน networkd.conf สำหรับการวัดปริมาณงานของอินเทอร์เฟซเครือข่ายเป็นระยะ สถิติที่ได้จากผลการวัดสามารถดูได้ในผลลัพธ์ของคำสั่ง 'สถานะเครือข่าย'
  • เพิ่มยูทิลิตี้ใหม่ systemd-network-generator สำหรับการสร้างไฟล์
    .network, .netdev และ .link ขึ้นอยู่กับการตั้งค่า IP ที่ส่งผ่านเมื่อเปิดใช้งานผ่านบรรทัดคำสั่งเคอร์เนล Linux ในรูปแบบการตั้งค่า Dracut

  • ค่า sysctl "kernel.pid_max" บนระบบ 64 บิตได้รับการตั้งค่าตามค่าเริ่มต้นเป็น 4194304 (PID 22 บิตแทนที่จะเป็น 16 บิต) ซึ่งจะช่วยลดโอกาสที่จะเกิดการชนกันเมื่อกำหนด PID และเพิ่มขีดจำกัดจำนวนพร้อมกัน กระบวนการที่กำลังทำงานอยู่และมีผลกระทบเชิงบวกต่อความปลอดภัย การเปลี่ยนแปลงอาจนำไปสู่ปัญหาความเข้ากันได้ แต่ยังไม่มีการรายงานปัญหาดังกล่าวในทางปฏิบัติ
  • ตามค่าเริ่มต้น ระยะการสร้างจะสลับไปเป็นลำดับชั้นแบบรวม cgroups-v2 (“-Ddefault-hierarchy=unified”) ก่อนหน้านี้ ค่าเริ่มต้นคือโหมดไฮบริด (“-Ddefault-hierarchy=hybrid”);
  • พฤติกรรมของตัวกรองการเรียกระบบ (SystemCallFilter) มีการเปลี่ยนแปลง ซึ่งในกรณีของการเรียกระบบที่ไม่ได้รับอนุญาต ในตอนนี้จะยุติกระบวนการทั้งหมด แทนที่จะยุติแต่ละเธรด เนื่องจากการยุติแต่ละเธรดอาจทำให้เกิดปัญหาที่คาดเดาไม่ได้ การเปลี่ยนแปลงจะมีผลเฉพาะเมื่อคุณมีเคอร์เนล Linux 4.14+ และ libseccomp 2.4.0+;
  • โปรแกรมที่ไม่มีสิทธิพิเศษจะได้รับความสามารถในการส่งแพ็กเก็ต ICMP Echo (ping) โดยการตั้งค่า sysctl "net.ipv4.ping_group_range" สำหรับช่วงของกลุ่มทั้งหมด (สำหรับกระบวนการทั้งหมด)
  • เพื่อเร่งกระบวนการสร้าง การสร้างคู่มือคนได้ถูกหยุดไว้ตามค่าเริ่มต้น (ในการสร้างเอกสารฉบับเต็ม คุณต้องใช้ตัวเลือก “-Dman=true” หรือ “-Dhtml=true” สำหรับคู่มือในรูปแบบ html) เพื่อให้ง่ายต่อการดูเอกสารประกอบ มีสคริปต์สองตัวรวมอยู่ด้วย: build/man/man และ build/man/html สำหรับสร้างและดูตัวอย่างคู่มือที่น่าสนใจ;
  • ในการประมวลผลชื่อโดเมนที่มีอักขระจากตัวอักษรประจำชาติ ไลบรารี libidn2 จะถูกใช้เป็นค่าเริ่มต้น (หากต้องการส่งคืน libidn ให้ใช้ตัวเลือก “-Dlibidn=true”)
  • การสนับสนุนไฟล์ปฏิบัติการ /usr/sbin/halt.local ซึ่งมีฟังก์ชันการทำงานที่ไม่ได้มีการกระจายอย่างแพร่หลายในการแจกแจง ได้ถูกยกเลิกแล้ว เพื่อจัดระเบียบการเรียกใช้คำสั่งเมื่อปิดเครื่อง ขอแนะนำให้ใช้สคริปต์ใน /usr/lib/systemd/system-shutdown/ หรือกำหนดหน่วยใหม่ที่ขึ้นอยู่กับ Final.target
  • ในขั้นตอนสุดท้ายของการปิดระบบ ตอนนี้ systemd จะเพิ่มระดับบันทึกใน sysctl “kernel.printk” โดยอัตโนมัติ ซึ่งแก้ปัญหาด้วยการแสดงเหตุการณ์บันทึกที่เกิดขึ้นในระยะหลังของการปิดระบบ เมื่อ daemons การบันทึกปกติเสร็จสิ้นแล้ว ;
  • ใน Journalctl และยูทิลิตี้อื่นๆ ที่แสดงบันทึก คำเตือนจะถูกเน้นด้วยสีเหลือง และบันทึกการตรวจสอบจะถูกเน้นด้วยสีน้ำเงินเพื่อเน้นให้เห็นจากฝูงชน
  • ในตัวแปรสภาพแวดล้อม $PATH เส้นทางไปยัง bin/ ตอนนี้มาก่อนเส้นทางไปยัง sbin/ เช่น หากมีชื่อไฟล์ปฏิบัติการที่เหมือนกันในทั้งสองไดเร็กทอรี ไฟล์จาก bin/ จะถูกดำเนินการ
  • systemd-logind จัดเตรียมการเรียก SetBrightness() เพื่อเปลี่ยนความสว่างของหน้าจออย่างปลอดภัยในแต่ละเซสชัน
  • มีการเพิ่มแฟล็ก "--wait-for-initialization" ในคำสั่ง "udevadm info" เพื่อรอให้อุปกรณ์เริ่มต้น
  • ในระหว่างการบูตระบบ ตัวจัดการ PID 1 จะแสดงชื่อของหน่วยแทนบรรทัดพร้อมคำอธิบาย หากต้องการเปลี่ยนกลับไปสู่การทำงานในอดีต คุณสามารถใช้ตัวเลือก StatusUnitFormat ใน /etc/systemd/system.conf หรือตัวเลือกเคอร์เนล systemd.status_unit_format
  • เพิ่มตัวเลือก KExecWatchdogSec ใน /etc/systemd/system.conf สำหรับ watchdog PID 1 ซึ่งระบุการหมดเวลาสำหรับการรีสตาร์ทโดยใช้ kexec การตั้งค่าเก่า
    ShutdownWatchdogSec ได้รับการเปลี่ยนชื่อเป็น RebootWatchdogSec และกำหนดการหมดเวลาสำหรับงานระหว่างการปิดระบบหรือการรีสตาร์ทตามปกติ

  • มีการเพิ่มตัวเลือกใหม่สำหรับการบริการ เงื่อนไขการดำเนินการซึ่งช่วยให้คุณระบุคำสั่งที่จะดำเนินการก่อน ExecStartPre ขึ้นอยู่กับรหัสข้อผิดพลาดที่ส่งคืนโดยคำสั่ง การตัดสินใจจะดำเนินการต่อไปของหน่วย - หากรหัส 0 ถูกส่งคืน การเปิดตัวหน่วยจะดำเนินต่อไป หากตั้งแต่ 1 ถึง 254 มันจะสิ้นสุดอย่างเงียบ ๆ โดยไม่มีแฟล็กความล้มเหลว หาก 255 จะลงท้ายด้วย ธงความล้มเหลว
  • เพิ่มบริการใหม่ systemd-pstore.service เพื่อดึงข้อมูลจาก sys/fs/pstore/ และจากการบันทึกไปที่ /var/lib/pstore เพื่อการวิเคราะห์เพิ่มเติม
  • มีการเพิ่มคำสั่งใหม่ลงในยูทิลิตี้ timedatectl สำหรับการกำหนดค่าพารามิเตอร์ NTP สำหรับ systemd-timesyncd ที่เกี่ยวข้องกับอินเทอร์เฟซเครือข่าย
  • คำสั่ง "localectl list-locales" จะไม่แสดงภาษาอื่นที่ไม่ใช่ UTF-8 อีกต่อไป
  • ตรวจสอบให้แน่ใจว่าข้อผิดพลาดในการกำหนดตัวแปรในไฟล์ sysctl.d/ จะถูกละเว้นหากชื่อตัวแปรขึ้นต้นด้วยอักขระ “-“;
  • บริการ systemd-random-seed.service ตอนนี้มีหน้าที่รับผิดชอบทั้งหมดในการเริ่มต้นพูลเอนโทรปีของตัวสร้างตัวเลขสุ่มเทียมเคอร์เนล Linux บริการที่ต้องการการเริ่มต้นอย่างถูกต้อง /dev/urandom ควรเริ่มต้นหลังจาก systemd-random-seed.service
  • บูตโหลดเดอร์ systemd-boot จัดเตรียมความสามารถเสริมเพื่อรองรับ ไฟล์เมล็ด พร้อมลำดับแบบสุ่มในพาร์ติชันระบบ EFI (ESP)
  • มีการเพิ่มคำสั่งใหม่ลงในยูทิลิตี้ bootctl: “bootctl Random-seed” เพื่อสร้างไฟล์ seed ใน ESP และ “bootctl is-installed” เพื่อตรวจสอบการติดตั้งบูตโหลดเดอร์ systemd-boot bootctl ยังได้รับการปรับเพื่อแสดงคำเตือนเกี่ยวกับรายการบูตที่กำหนดค่าไม่ถูกต้อง (เช่น เมื่ออิมเมจเคอร์เนลถูกลบ แต่เหลือรายการสำหรับการโหลด)
  • จัดให้มีการเลือกพาร์ติชั่นสลับอัตโนมัติเมื่อระบบเข้าสู่โหมดสลีป พาร์ติชันจะถูกเลือกขึ้นอยู่กับลำดับความสำคัญที่กำหนดค่าไว้ และในกรณีที่มีลำดับความสำคัญเหมือนกัน จำนวนพื้นที่ว่าง
  • เพิ่มตัวเลือกการหมดเวลาของไฟล์คีย์ใน /etc/crypttab เพื่อกำหนดระยะเวลาที่อุปกรณ์ที่มีคีย์การเข้ารหัสจะรอก่อนที่จะขอรหัสผ่านเพื่อเข้าถึงพาร์ติชันที่เข้ารหัส
  • เพิ่มตัวเลือก IOWeight เพื่อตั้งค่าน้ำหนัก I/O สำหรับตัวกำหนดเวลา BFQ
  • systemd-resolved เพิ่มโหมด 'เข้มงวด' สำหรับ DNS-over-TLS และใช้ความสามารถในการแคชเฉพาะการตอบสนอง DNS เชิงบวก ("แคชไม่มีค่าลบ" ใน solved.conf);
  • สำหรับ VXLAN นั้น systemd-networkd ได้เพิ่มตัวเลือก GenericProtocolExtension เพื่อเปิดใช้งานส่วนขยายโปรโตคอล VXLAN สำหรับ VXLAN และ GENEVE ได้มีการเพิ่มตัวเลือก IPDoNotFragment เพื่อตั้งค่าสถานะการห้ามการกระจายตัวสำหรับแพ็กเก็ตขาออก
  • ใน systemd-networkd ในส่วน "[Route]" ตัวเลือก FastOpenNoCookie ดูเหมือนจะเปิดใช้งานกลไกสำหรับการเปิดการเชื่อมต่อ TCP อย่างรวดเร็ว (TFO - TCP Fast Open, RFC 7413) ที่เกี่ยวข้องกับแต่ละเส้นทาง เช่นเดียวกับตัวเลือก TTLPropagate เพื่อกำหนดค่า TTL LSP (Label Switched Path) ตัวเลือก "ประเภท" ให้การสนับสนุนสำหรับโหมดการกำหนดเส้นทางท้องถิ่น การออกอากาศ Anycast มัลติคาสต์ ใด ๆ และ xresolve
  • Systemd-networkd เสนอตัวเลือก DefaultRouteOnDevice ในส่วน “[เครือข่าย]” เพื่อกำหนดค่าเส้นทางเริ่มต้นสำหรับอุปกรณ์เครือข่ายที่กำหนดโดยอัตโนมัติ
  • Systemd-networkd ได้เพิ่ม ProxyARP และ
    ProxyARPWifi สำหรับการตั้งค่าพฤติกรรม ARP ของพร็อกซี, MulticastRouter สำหรับการตั้งค่าพารามิเตอร์การกำหนดเส้นทางในโหมดมัลติคาสต์, MulticastIGMPVersion สำหรับการเปลี่ยนเวอร์ชัน IGMP (Internet Group Management Protocol) สำหรับมัลติคาสต์;

  • Systemd-networkd ได้เพิ่มตัวเลือก Local, Peer และ PeerPort สำหรับอุโมงค์ FooOverUDP เพื่อกำหนดค่าที่อยู่ IP ในเครื่องและระยะไกล รวมถึงหมายเลขพอร์ตเครือข่าย สำหรับอุโมงค์ TUN มีการเพิ่มตัวเลือก VnetHeader เพื่อกำหนดค่าการสนับสนุน GSO (Generic Segment Offload)
  • ใน systemd-networkd ในไฟล์ .network และ .link ในส่วน [Match] มีตัวเลือกคุณสมบัติปรากฏขึ้นซึ่งช่วยให้คุณระบุอุปกรณ์ตามคุณสมบัติเฉพาะใน udev
  • ใน systemd-networkd ตัวเลือก AssignToLoopback ได้ถูกเพิ่มสำหรับ tunnels ซึ่งควบคุมว่าจุดสิ้นสุดของ tunnel ถูกกำหนดให้กับอุปกรณ์ loopback “lo” หรือไม่
  • systemd-networkd เปิดใช้งานสแต็ก IPv6 โดยอัตโนมัติหากถูกบล็อกผ่าน sysctl Disable_ipv6 - IPv6 ถูกเปิดใช้งานหากการตั้งค่า IPv6 (คงที่หรือ DHCPv6) ถูกกำหนดไว้สำหรับอินเทอร์เฟซเครือข่าย มิฉะนั้นค่า sysctl ที่ตั้งไว้แล้วจะไม่เปลี่ยนแปลง
  • ในไฟล์ .network การตั้งค่า CriticalConnection ถูกแทนที่ด้วยตัวเลือก KeepConfiguration ซึ่งให้วิธีการเพิ่มเติมสำหรับการกำหนดสถานการณ์ (“ใช่”, “คงที่”, “dhcp-on-stop”, “dhcp”) ซึ่ง systemd-networkd ควร ไม่สัมผัสการเชื่อมต่อที่มีอยู่เมื่อเริ่มต้น;
  • แก้ไขช่องโหว่แล้ว CVE-2019-15718เกิดจากการขาดการควบคุมการเข้าถึงอินเทอร์เฟซ D-Bus ที่ systemd-resolved ปัญหานี้ทำให้ผู้ใช้ที่ไม่มีสิทธิ์สามารถดำเนินการต่างๆ ที่มีให้สำหรับผู้ดูแลระบบเท่านั้น เช่น การเปลี่ยนการตั้งค่า DNS และการกำหนดเส้นทางการสืบค้น DNS ไปยังเซิร์ฟเวอร์ปลอม
  • แก้ไขช่องโหว่แล้ว CVE-2019-9619เกี่ยวข้องกับการไม่เปิดใช้งาน pam_systemd สำหรับเซสชันที่ไม่โต้ตอบ ซึ่งอนุญาตให้มีการปลอมแปลงเซสชันที่ใช้งานอยู่

ที่มา: opennet.ru

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