การเปิดตัวระบบแพ็คเกจแบบแยกส่วน Flatpak 1.12.0

ชุดเครื่องมือ Flatpak 1.12 สาขาเสถียรใหม่ได้รับการเผยแพร่แล้ว ซึ่งจัดให้มีระบบสำหรับการสร้างแพ็คเกจที่มีในตัวเองซึ่งไม่ได้เชื่อมโยงกับลินุกซ์รุ่นใดรุ่นหนึ่ง และทำงานในคอนเทนเนอร์พิเศษที่แยกแอปพลิเคชันออกจากส่วนที่เหลือของระบบ รองรับการรันแพ็คเกจ Flatpak สำหรับ Arch Linux, CentOS, Debian, Fedora, Gentoo, Mageia, Linux Mint, Alt Linux และ Ubuntu แพ็คเกจ Flatpak รวมอยู่ในที่เก็บ Fedora และได้รับการสนับสนุนจากตัวจัดการแอปพลิเคชัน GNOME ดั้งเดิม

นวัตกรรมสำคัญในสาขา Flatpak 1.12:

  • ปรับปรุงการจัดการสภาพแวดล้อมแซนด์บ็อกซ์แบบซ้อนที่ใช้ในแพ็คเกจ flatpak กับไคลเอนต์สำหรับบริการจัดส่งเกม Steam ในแซนด์บ็อกซ์ที่ซ้อนกัน อนุญาตให้สร้างลำดับชั้นแยกต่างหากของไดเร็กทอรี /usr และ /app ซึ่งใช้ใน Steam เพื่อเริ่มเกมในคอนเทนเนอร์แยกต่างหากที่มีพาร์ติชัน /usr ของตัวเอง ซึ่งแยกออกจากสภาพแวดล้อมด้วยไคลเอนต์ Steam
  • อินสแตนซ์แพ็กเกจทั้งหมดที่มีตัวระบุแอปพลิเคชันเดียวกัน (app-ID) แชร์ไดเร็กทอรี /tmp และ $XDG_RUNTIME_DIR หรืออีกทางหนึ่ง เมื่อใช้แฟล็ก “--allow=per-app-dev-shm” คุณสามารถเปิดใช้งานการใช้ไดเร็กทอรีที่แชร์ /dev/shm ได้
  • ปรับปรุงการรองรับแอปพลิเคชัน Text User Interface (TUI) เช่น gdb
  • มีการเพิ่มการใช้งานคำสั่ง "ostree prune" ที่รวดเร็วยิ่งขึ้นในยูทิลิตี้ build-update-repo ซึ่งปรับให้เหมาะสมสำหรับการทำงานกับที่เก็บในโหมดเก็บถาวร
  • ช่องโหว่ CVE-2021-41133 ในการใช้กลไกพอร์ทัลซึ่งเกี่ยวข้องกับการไม่มีการบล็อกการเรียกของระบบใหม่ที่เกี่ยวข้องกับการติดตั้งพาร์ติชันในกฎ seccomp ได้รับการแก้ไขแล้ว ช่องโหว่ดังกล่าวทำให้แอปพลิเคชันสร้างแซนด์บ็อกซ์แบบซ้อนเพื่อหลีกเลี่ยงกลไกการตรวจสอบ "พอร์ทัล" ที่ใช้ในการจัดระเบียบการเข้าถึงทรัพยากรภายนอกคอนเทนเนอร์

    ผลก็คือ ผู้โจมตีสามารถข้ามกลไกการแยกแซนด์บ็อกซ์และเข้าถึงเนื้อหาของสภาพแวดล้อมโฮสต์ได้โดยดำเนินการเรียกระบบที่เกี่ยวข้องกับการติดตั้ง ช่องโหว่นี้สามารถถูกโจมตีได้เฉพาะในแพ็คเกจที่ให้แอพพลิเคชั่นเข้าถึงซ็อกเก็ต AF_UNIX ได้โดยตรง เช่น ที่ Wayland, Pipewire และ Pipewire-pulse ใช้ ในรุ่น 1.12.0 ช่องโหว่ไม่ได้ถูกกำจัดออกไปอย่างสมบูรณ์ ดังนั้นการอัปเดต 1.12.1 จึงได้รับการเผยแพร่อย่างร้อนแรง

เราขอเตือนคุณว่า Flatpak ช่วยให้นักพัฒนาแอปพลิเคชันลดความซับซ้อนในการแจกจ่ายโปรแกรมของตนที่ไม่รวมอยู่ในพื้นที่เก็บข้อมูลการแจกจ่ายมาตรฐานโดยการเตรียมคอนเทนเนอร์สากลหนึ่งคอนเทนเนอร์โดยไม่ต้องสร้างชุดประกอบแยกกันสำหรับการแจกจ่ายแต่ละครั้ง สำหรับผู้ใช้ที่คำนึงถึงความปลอดภัย Flatpak ช่วยให้คุณสามารถเรียกใช้แอปพลิเคชันที่น่าสงสัยในคอนเทนเนอร์ โดยให้การเข้าถึงเฉพาะฟังก์ชันเครือข่ายและไฟล์ผู้ใช้ที่เกี่ยวข้องกับแอปพลิเคชันเท่านั้น สำหรับผู้ใช้ที่สนใจผลิตภัณฑ์ใหม่ Flatpak ช่วยให้คุณสามารถติดตั้งการทดสอบล่าสุดและแอพพลิเคชั่นที่เสถียรโดยไม่จำเป็นต้องทำการเปลี่ยนแปลงระบบ ตัวอย่างเช่น แพ็คเกจ Flatpak ถูกสร้างขึ้นสำหรับ LibreOffice, Midori, GIMP, Inkscape, Kdenlive, Steam, 0 AD, Visual Studio Code, VLC, Slack, Skype, Telegram Desktop, Android Studio เป็นต้น

เพื่อลดขนาดแพ็คเกจ จะรวมเฉพาะการพึ่งพาเฉพาะแอปพลิเคชัน และระบบพื้นฐานและไลบรารีกราฟิก (ไลบรารี GTK, Qt, GNOME และ KDE ฯลฯ) ได้รับการออกแบบให้เป็นสภาพแวดล้อมรันไทม์มาตรฐานของปลั๊กอิน ข้อแตกต่างที่สำคัญระหว่าง Flatpak และ Snap คือ Snap ใช้ส่วนประกอบของสภาพแวดล้อมระบบหลักและการแยกตามการกรองการเรียกของระบบ ในขณะที่ Flatpak สร้างคอนเทนเนอร์ที่แยกจากระบบและทำงานกับชุดรันไทม์ขนาดใหญ่ โดยไม่ให้แพ็คเกจเป็นการพึ่งพา แต่เป็นมาตรฐาน สภาพแวดล้อมของระบบ (เช่น ไลบรารีทั้งหมดที่จำเป็นสำหรับการทำงานของโปรแกรม GNOME หรือ KDE)

นอกเหนือจากสภาพแวดล้อมระบบมาตรฐาน (รันไทม์) ที่ติดตั้งผ่านพื้นที่เก็บข้อมูลพิเศษแล้ว ยังมีการพึ่งพาเพิ่มเติม (บันเดิล) ที่จำเป็นสำหรับการทำงานของแอปพลิเคชันอีกด้วย โดยรวมแล้ว รันไทม์และบันเดิลจะสร้างการเติมคอนเทนเนอร์ แม้ว่ารันไทม์จะถูกติดตั้งแยกกันและเชื่อมโยงกับคอนเทนเนอร์หลายอันในคราวเดียว ซึ่งช่วยให้คุณหลีกเลี่ยงการทำซ้ำไฟล์ระบบที่เหมือนกันกับคอนเทนเนอร์ได้ ระบบหนึ่งสามารถติดตั้งรันไทม์ที่แตกต่างกันได้หลายแบบ (GNOME, KDE) หรือรันไทม์เดียวกันหลายเวอร์ชัน (GNOME 3.40, GNOME 3.42) คอนเทนเนอร์ที่มีแอปพลิเคชันเป็นแบบพึ่งพาจะใช้การเชื่อมโยงเฉพาะกับรันไทม์ที่ระบุเท่านั้น โดยไม่คำนึงถึงแต่ละแพ็คเกจที่ประกอบเป็นรันไทม์ องค์ประกอบที่ขาดหายไปทั้งหมดจะถูกรวมเข้ากับแอปพลิเคชันโดยตรง เมื่อคอนเทนเนอร์ถูกสร้างขึ้น เนื้อหารันไทม์จะถูกเมาท์เป็นพาร์ติชัน /usr และบันเดิลจะถูกเมาท์ในไดเร็กทอรี /app

คอนเทนเนอร์รันไทม์และแอปพลิเคชันถูกสร้างขึ้นโดยใช้เทคโนโลยี OSTree ซึ่งรูปภาพได้รับการอัปเดตแบบอะตอมมิกจากที่เก็บที่คล้ายกับ Git ซึ่งช่วยให้สามารถนำวิธีการควบคุมเวอร์ชันไปใช้กับส่วนประกอบการกระจายได้ (เช่น คุณสามารถย้อนกลับระบบอย่างรวดเร็วเป็น สถานะก่อนหน้า) แพ็คเกจ RPM ได้รับการแปลไปยังที่เก็บ OSTree โดยใช้เลเยอร์ rpm-ostree พิเศษ ไม่รองรับการติดตั้งและอัปเดตแพ็คเกจแยกต่างหากภายในสภาพแวดล้อมการทำงาน ระบบได้รับการอัปเดตไม่ได้อยู่ที่ระดับของแต่ละส่วนประกอบ แต่โดยรวมแล้วจะเปลี่ยนสถานะแบบอะตอมมิก มีเครื่องมือเพื่อใช้การอัปเดตแบบค่อยเป็นค่อยไป โดยไม่จำเป็นต้องแทนที่รูปภาพทั้งหมดด้วยการอัพเดตแต่ละครั้ง

สภาพแวดล้อมแบบแยกที่สร้างขึ้นนั้นไม่ขึ้นอยู่กับการกระจายที่ใช้โดยสิ้นเชิง และด้วยการตั้งค่าที่เหมาะสมของแพ็คเกจ ทำให้ไม่สามารถเข้าถึงไฟล์และกระบวนการของผู้ใช้หรือระบบหลัก ไม่สามารถเข้าถึงอุปกรณ์ได้โดยตรง ยกเว้นเอาต์พุตผ่าน DRI และเรียกไปยังระบบย่อยเครือข่าย การจัดวางเอาต์พุตกราฟิกและอินพุตจะดำเนินการโดยใช้โปรโตคอล Wayland หรือผ่านการส่งต่อซ็อกเก็ต X11 การโต้ตอบกับสภาพแวดล้อมภายนอกจะขึ้นอยู่กับระบบการส่งข้อความ DBus และพอร์ทัล API พิเศษ

สำหรับการแยกออก มีการใช้เลเยอร์ Bubblewrap และเทคโนโลยีการจำลองเสมือนคอนเทนเนอร์ Linux แบบดั้งเดิม โดยอิงตามการใช้ cgroups, เนมสเปซ, Seccomp และ SELinux PulseAudio ใช้เพื่อส่งสัญญาณเสียง ในกรณีนี้ สามารถปิดใช้งานการแยกได้ ซึ่งนักพัฒนาแพ็คเกจยอดนิยมจำนวนมากใช้เพื่อให้สามารถเข้าถึงระบบไฟล์และอุปกรณ์ทั้งหมดในระบบได้อย่างเต็มที่ ตัวอย่างเช่น GIMP, VSCodium, PyCharm, Octave, Inkscape, Audacity และ VLC มาพร้อมกับโหมดแยกที่จำกัดซึ่งทำให้สามารถเข้าถึงโฮมไดเร็กตอรี่ได้อย่างเต็มที่

หากแพ็คเกจที่สามารถเข้าถึงโฮมไดเร็กตอรี่ถูกโจมตี แม้ว่าจะมีป้ายกำกับ “แซนด์บ็อกซ์” ในคำอธิบายแพ็คเกจ ผู้โจมตีเพียงแค่เปลี่ยนไฟล์ ~/.bashrc เพื่อรันโค้ดของเขาเท่านั้น อีกประเด็นหนึ่งคือการควบคุมการเปลี่ยนแปลงแพ็คเกจและความไว้วางใจในตัวสร้างแพ็คเกจซึ่งมักจะไม่เกี่ยวข้องกับโปรเจ็กต์หลักหรือการแจกแจง

ที่มา: opennet.ru

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