เคอร์เนล: การสนับสนุน Namespaces


15

ฉันสงสัยว่าคุณสมบัติ“ Namespaces support” ในเคอร์เนลหมายถึงอะไร ฉันใช้เคอร์เนล 3.11.1 (เคอร์เนลที่เสถียรที่สุดในขณะนี้)

หากฉันตัดสินใจที่จะปิดการใช้งานฉันจะสังเกตเห็นการเปลี่ยนแปลงในระบบของฉันหรือไม่?

และในกรณีที่มีใครบางคนตัดสินใจที่จะใช้ประโยชน์จากเนมสเปซมันก็เพียงพอแล้วที่จะรวบรวมNAMESPACES=Yในเคอร์เนลหรือว่าเขาต้องการเครื่องมือ userspace เช่นกัน?


5
เนมสเปซอธิบายได้ค่อนข้างดีที่นี่: lwn.net/Articles/531114 (ไม่ใช่คำตอบเพราะฉันไม่ได้ตอบคำถามของคุณจริง ๆ - ฉันกำลังชี้ให้คุณดูกองข้อความ)
derobert

คำตอบ:


21

สรุปเนมสเปซเป็นวิธีสร้างระบบ Linux เสมือนภายในระบบ Linux ที่มีขนาดใหญ่กว่า สิ่งนี้แตกต่างจากการเรียกใช้เครื่องเสมือนที่ทำงานในกระบวนการที่ไม่มีสิทธิพิเศษ: เครื่องเสมือนจะปรากฏเป็นกระบวนการเดียวในโฮสต์ในขณะที่กระบวนการที่ทำงานภายในเนมสเปซยังคงทำงานอยู่บนระบบโฮสต์

ระบบเสมือนทำงานภายในระบบขนาดใหญ่ที่เรียกว่าตู้คอนเทนเนอร์ แนวคิดของคอนเทนเนอร์คือกระบวนการที่ทำงานอยู่ภายในคอนเทนเนอร์เชื่อว่าเป็นกระบวนการเดียวในระบบ โดยเฉพาะอย่างยิ่งผู้ใช้รูทภายในคอนเทนเนอร์ไม่มีสิทธิ์รูทภายนอกคอนเทนเนอร์ (โปรดทราบว่านี่เป็นจริงในเคอร์เนลรุ่นที่เพียงพอล่าสุดเท่านั้น)

เนมสเปซทำเสมือนหนึ่งคุณลักษณะในแต่ละครั้ง ตัวอย่างประเภทของเนมสเปซคือ:

  • User namespaces - สิ่งนี้อนุญาตให้กระบวนการทำงานเสมือนว่าพวกเขากำลังทำงานเป็นผู้ใช้ที่แตกต่างกันทั้งภายในและภายนอกเนมสเปซ โดยเฉพาะอย่างยิ่งกระบวนการที่ทำงานเป็น UID 0 ภายในเนมสเปซมีสิทธิ์ผู้ใช้ขั้นสูงเฉพาะกับกระบวนการที่ทำงานในเนมสเปซเดียวกันเท่านั้น
    ตั้งแต่ Linux kernel 3.8 ผู้ใช้ที่ไม่มีสิทธิพิเศษสามารถสร้างเนมสเปซของผู้ใช้ได้ สิ่งนี้อนุญาตให้ผู้ใช้ทั่วไปสามารถใช้คุณลักษณะที่สงวนไว้สำหรับรูท (เช่นการเปลี่ยนตารางเส้นทางหรือความสามารถในการตั้งค่า)
  • PID เนมสเปซ - กระบวนการภายใน PID เนมสเปซไม่สามารถฆ่าหรือติดตามกระบวนการภายนอกเนมสเปซนั้น
  • Mount namespaces - สิ่งนี้อนุญาตให้กระบวนการมีมุมมองของระบบไฟล์ มุมมองนี้สามารถเป็นมุมมองบางส่วนทำให้บางส่วนของระบบไฟล์ถูกซ่อนและชิ้นส่วนที่จะ recomposed เพื่อให้ต้นไม้ไดเรกทอรีปรากฏในสถานที่ที่แตกต่างกัน เมานต์เนมสเปซจะสรุปลักษณะทั่วไปของ Unix chrootซึ่งอนุญาตให้กระบวนการถูก จำกัด เฉพาะแผนผังย่อย
  • เนมสเปซเครือข่าย - อนุญาตการแยกทรัพยากรเครือข่าย (อุปกรณ์เครือข่าย) และเพิ่มการแยกกระบวนการ

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

ยังมีแอปพลิเคชั่นจำนวนน้อยที่ใช้ประโยชน์จากเนมสเปซ นี่คือบางส่วน:

  • LXC ได้รับการยอมรับอย่างดี มันอาศัยกลุ่มcgเพื่อให้ภาชนะบรรจุ
  • virt-sandboxเป็นโครงการsandboxล่าสุด
  • Chromiumรุ่นล่าสุดยังใช้เนมสเปซสำหรับการทดลองใช้แซนด์บ็อกซ์เมื่อมี
  • uWSGIกรอบสำหรับการใช้งานคลัสเตอร์ใช้ namespacesสำหรับ sandboxing ที่ดีขึ้น

ดูชุดบทความ LWN โดย Michael Kerriskสำหรับข้อมูลเพิ่มเติม


6

Linux kernel namespace เป็นแนวคิดที่ใช้สำหรับแยกกลุ่มของกระบวนการจากส่วนอื่นที่เกี่ยวกับการเข้าถึงทรัพยากรระบบ ตัวอย่างเช่นสองเนมสเปซ PID ที่แตกต่างกันอาจมีกระบวนการที่มี PID ที่เหมือนกัน แต่อิมเมจกระบวนการที่แตกต่างกันโดยสิ้นเชิง พวกเขามักจะใช้ในการทำเวอร์ช่วลไลเซชั่นระดับ OS ซึ่งเคอร์เนลตัวเดียวทำงานพร้อมกันในระบบปฏิบัติการต่าง ๆ - ทั้งหมดนั้นต้องใช้ Linux (เพราะใช้เคอร์เนลร่วมกันอย่างชัดเจน) แต่อาจเป็นการกระจายและรุ่นที่แตกต่างกัน ดูตัวอย่างLXC

คุณอาจพบการปิดใช้งานตัวอย่างเช่นในระบบ systemd ตามตั้งแต่ systemd สามารถใช้ namespaces สำหรับคุณลักษณะคอนเทนเนอร์ ดังนั้นมากขึ้นอยู่กับการกระจายที่คุณใช้และสิ่งที่คุณตั้งใจจะทำกับระบบ

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


1

เพื่อให้ตัวอย่างของการใช้เนมสเปซในระบบที่เปิดใช้งาน SELinux (MLS หรือ Strict) โดยปกติแล้ว Namespace จะใช้เพื่อสร้างรายบุคคล/tmpและหรือ/homeไดเรกทอรีสำหรับผู้ใช้แต่ละคน ไดเรกทอรีเหล่านั้นสามารถมองเห็นได้เฉพาะ: ผู้ใช้ผู้ใช้ที่มีป้ายชื่อเดียวกันเคอร์เนลและผู้ใช้ที่มีสิทธิ์เข้าถึง ไดเร็กตอรี่ namespace-ed /tmpจะมีข้อความกำกับโดย SELinux-MLS เพื่อให้ตรงกับฉลาก SELinux-MLS ของผู้ใช้ ในสถานการณ์สมมตินี้/tmpไดเรกทอรีที่ผู้ใช้เห็นอาจถูกเมาท์ที่อื่นนอกเหนือจาก/tmp( /var/user-tmp) อย่างไรก็ตามผู้ใช้จะเห็นเฉพาะ/tmpกับไฟล์ที่สร้างขึ้นเนื่องจากกิจกรรมของผู้ใช้ ผู้ใช้จะไม่เห็นไฟล์ใด ๆ ใน/tmpผลิตภัณฑ์ของผู้ใช้รายอื่น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.