Linux LXC เทียบกับ FreeBSD คุก


62

มีความแตกต่างที่โดดเด่นระหว่างLXC (คอนเทนเนอร์ Linux)และเรือนจำของ FreeBSDในแง่ของความปลอดภัยเสถียรภาพและประสิทธิภาพหรือไม่?

ในครั้งแรกที่วิธีการทั้งสองมีลักษณะคล้ายกันมาก


1
LXC เป็นเทคโนโลยีที่ค่อนข้างใหม่ดังนั้นฉันจึงคาดหวังความปลอดภัยและเสถียรภาพที่ดีขึ้นกับคุก ไม่แม้แต่คาดเดาเกี่ยวกับประสิทธิภาพ มีปัญหาด้านความปลอดภัยที่ทราบเกี่ยวกับ LXC ที่สามารถบรรเทาได้โดยใช้ selinux แต่โดยส่วนตัวแล้วฉันชอบ LXC
Pavel Šimerda

1
@ PavelŠimerdaฉันเพิ่งได้ยิน LXC วันนี้ แต่ฉันประหลาดใจที่พบว่าทั้ง Heroku และ Google App Engine อาจใช้ LXC อยู่แล้ว
Philipp Claßen

3
หากคุณเพิ่งชนเข้าสู่ LXC คุณควรดู Docker ซึ่งใช้ LXC ภายใต้ฝากระโปรง: docker.io/the_whole_story
Kev

1
นักเทียบท่าไม่ใช้ lxc อีกต่อไป

1
@nwildner ไม่ได้ใช้ liblxc อีกต่อไป แต่ใช้แนวคิดเดียวกัน: kernel namespaces
0xC0000022L

คำตอบ:


101

เรื่องชื่อแฟนซีใช้ที่นี่ไม่มีทั้งเป็นแนวทางในการแก้ปัญหาที่เฉพาะเจาะจง: วิธีการแก้ปัญหาการแยกจากกันดีกว่า Unix คลาสสิกchroot การทำเวอร์ชวลไลเซชันระดับระบบปฏิบัติการคอนเทนเนอร์โซนหรือแม้แต่ "chroot with เตียรอยด์" เป็นชื่อหรือชื่อทางการค้าที่กำหนดแนวคิดเดียวกันของการแยก userpace แต่มีคุณสมบัติแตกต่างกัน

Chroot เปิดตัวเมื่อวันที่ 18 มีนาคม 2525 หลายเดือนก่อนการเปิดตัว4.2 BSDเป็นเครื่องมือในการทดสอบการติดตั้งและสร้างระบบ แต่วันนี้มันยังมีข้อบกพร่อง เนื่องจากวัตถุประสงค์แรกของ chroot เป็นเพียงการจัดหาเส้นทางnewrootเท่านั้นด้านอื่น ๆ ของระบบที่จำเป็นต้องแยกหรือควบคุมได้ถูกเปิดเผย (เครือข่ายมุมมองกระบวนการ, ปริมาณงาน I / O) นี่คือตำแหน่งที่คอนเทนเนอร์แรก (การจำลองเสมือนระดับผู้ใช้) ปรากฏขึ้น

เทคโนโลยีทั้งสอง (FreeBSD Jails และ LXC) ใช้ประโยชน์จากการแยกพื้นที่ผู้ใช้เพื่อมอบความปลอดภัยอีกชั้น การจัดแบ่งประเภทนี้จะทำให้มั่นใจได้ว่ากระบวนการที่กำหนดจะสื่อสารกับกระบวนการอื่น ๆ ในภาชนะเดียวกันบนโฮสต์เดียวกันและหากใช้ทรัพยากรเครือข่ายใด ๆ เพื่อให้เกิดการสื่อสาร "นอกโลก" ทั้งหมดจะถูกส่งต่อไปยังอินเตอร์เฟส / ช่องที่กำหนด มี

คุณสมบัติ

FreeBSD Jails:

  • ถือว่าเป็นเทคโนโลยีที่มีความเสถียรเนื่องจากเป็นฟีเจอร์ภายใน FreeBSD ตั้งแต่ 4.0;
  • ใช้เวลาอย่างดีที่สุดของระบบไฟล์ ZFS ณ จุดที่คุณสามารถโคลนคุกและสร้างแม่แบบคุกเพื่อปรับใช้คุกได้ง่ายขึ้น ความบ้าคลั่งของ ZFSเพิ่มเติม;
  • เอกสารที่ดีและการพัฒนา ;
  • ลำดับขั้นของคุกอนุญาตให้คุณสร้างคุกในคุกได้ (เราจำเป็นต้องเจาะลึกลงไป!) ใช้ร่วมกับallow.mount.zfsเพื่อให้ได้พลังงานมากขึ้นและตัวแปรอื่น ๆ เช่นchildren.maxกำหนดคุกเด็กสูงสุด
  • rctl (8)จะจัดการข้อ จำกัด ทรัพยากรของคุก (หน่วยความจำ, CPU, ดิสก์, ... );
  • FreeBSD jails จัดการกับ Linux userspace ;
  • การแยกเครือข่ายด้วยvnetทำให้แต่ละคุกมีสแต็กเครือข่ายของตัวเองอินเตอร์เฟสการกำหนดแอดเดรสและตารางการเราต์
  • nullfs เพื่อช่วยในการลิงก์โฟลเดอร์กับโฟลเดอร์ที่อยู่บนเซิร์ฟเวอร์จริงไปยังภายในคุก
  • ยูทิลิตี้ezjailเพื่อช่วยในการปรับใช้จำนวนมากและการจัดการคุก;
  • เคอร์เนลที่ปรับได้จำนวนมาก ( sysctl) security.jail.allow.*พารามิเตอร์จะ จำกัด การกระทำของผู้ใช้รูทของคุกนั้น
  • บางทีคุก FreeBSD จะขยายฟีเจอร์โปรเจ็กต์ VPS บางส่วนเช่นการย้ายข้อมูลสดในอนาคตอันใกล้
  • มีความพยายามบางอย่างในการทำงานร่วมกับ ZFS และ Docker ยังคงทดลอง
  • FreeBSD 12รองรับ bhyve ในคุกและ pf ในคุกสร้างความโดดเดี่ยวให้กับเครื่องมือเหล่านั้น
  • เครื่องมือที่น่าสนใจมากมายได้รับการพัฒนาในช่วงปีที่ผ่านมา บางคนถูกจัดทำดัชนีในโพสต์บล็อกนี้
  • ทางเลือก: โครงการ FreeBSD VPS

ตู้คอนเทนเนอร์ Linux (LXC):

  • ใหม่ "ในเคอร์เนล" เทคโนโลยี แต่ถูกรับรองโดยคนใหญ่ (Canonical พิเศษ);
  • คอนเทนเนอร์ที่ไม่มีสิทธิใช้งานเริ่มต้นจาก LXC 1.0 ทำให้เป็นก้าวสำคัญสู่ความปลอดภัยภายในตู้คอนเทนเนอร์
  • การแม็พ UID และ GID ภายในคอนเทนเนอร์
  • Kernel namespaces เพื่อแยก IPC, mount, pid, เครือข่ายและผู้ใช้ เนมสเปซเหล่านี้สามารถจัดการได้ในลักษณะแยกออกซึ่งกระบวนการที่ใช้เนมสเปซเครือข่ายที่แตกต่างกันนั้นไม่จำเป็นต้องแยกออกจากส่วนอื่น ๆ เช่นที่เก็บข้อมูล
  • กลุ่มควบคุม (กลุ่ม cg) เพื่อจัดการทรัพยากรและจัดกลุ่มพวกเขา CGManagerเป็นคนที่ประสบความสำเร็จ
  • โปรไฟล์ Apparmor / SELinux และความสามารถของเคอร์เนลเพื่อการบังคับใช้คุณสมบัติของเคอร์เนลที่เข้าถึงได้ง่ายขึ้นโดยคอนเทนเนอร์ Seccomp ยังมีอยู่ในคอนเทนเนอร์ lxc เพื่อกรองการเรียกระบบ ด้านการรักษาความปลอดภัยอื่น ๆที่นี่
  • ฟังก์ชั่นการโยกย้ายสดการพัฒนา มันเป็นเรื่องยากที่จะบอกว่าเมื่อมันจะพร้อมสำหรับการใช้การผลิตเนื่องจากนักเทียบท่า / LXC จะมีการจัดการกับการหยุดกระบวนการ userspace, ภาพรวมโยกย้ายและรวม - ref1 , REF2การโยกย้ายแบบสดกำลังทำงานกับคอนเทนเนอร์พื้นฐาน (ไม่มีอุปกรณ์ผ่านบริการเครือข่ายที่ซับซ้อนหรือการกำหนดค่าการจัดเก็บพิเศษ)
  • API การเชื่อมโยงเพื่อเปิดใช้งานการพัฒนาใน python3 และ 2, lua, Go, Ruby และ Haskell
  • ส่วนกลางพื้นที่ "มีอะไรใหม่" ค่อนข้างมีประโยชน์ทุกครั้งที่คุณต้องตรวจสอบว่าบั๊กบางตัวได้รับการแก้ไขหรือมีคุณสมบัติใหม่เกิดขึ้น ที่นี่
  • ทางเลือกที่น่าสนใจอาจเป็นlxdซึ่งภายใต้ประทุนใช้งานได้กับ lxc แต่มีคุณสมบัติที่ดีเช่น REST api, การรวม OpenStack เป็นต้น
  • อีกสิ่งที่น่าสนใจคือ Ubuntu ดูเหมือนว่าจะมีการจัดส่งสินค้า ZFS เป็นระบบแฟ้มเริ่มต้นสำหรับบรรจุใน16.04 เพื่อให้โครงการชิด LXD เปิดตัวมันเป็นรุ่น 2.0 และบางส่วนของคุณสมบัติที่มีZFS ที่เกี่ยวข้อง
  • ทางเลือก : OpenVZ , Docker
  • นักเทียบท่า โปรดทราบที่นี่ว่านักเทียบท่าใช้เนมสเปซโดยเฉพาะการสร้างกลุ่ม "ต่อแอพ" / "ต่อซอฟต์แวร์" แตกต่างที่สำคัญที่นี่ ในขณะที่ LXC สร้างคอนเทนเนอร์ที่มีหลายกระบวนการ แต่นักเทียบท่าจะลดคอนเทนเนอร์ให้มากที่สุดเท่าที่เป็นไปได้สำหรับกระบวนการเดียวจากนั้นจัดการผ่าน Docker
  • ความพยายามในการรวมนักเทียบท่ากับ SELinux และลดความสามารถภายในคอนเทนเนอร์เพื่อให้ปลอดภัยยิ่งขึ้น - นักเทียบท่าและ SELinux, Dan Walsh
  • ความแตกต่างระหว่าง Docker, LXD และ LXC คืออะไร

นักเทียบท่าไม่ใช้ lxc อีกต่อไป ตอนนี้พวกเขามี lib เฉพาะที่เรียกว่าlibcontainerที่จัดการการรวมกับ Kernel namespace ระดับต่ำและคุณสมบัติกลุ่ม cg โดยตรง

เทคโนโลยีทั้งสองเป็นยาครอบจักรวาลด้านความปลอดภัย แต่ทั้งคู่เป็นวิธีที่ดีในการแยกสภาพแวดล้อมที่ไม่ต้องการการจำลองเสมือนแบบเต็มเนื่องจากโครงสร้างพื้นฐานของระบบปฏิบัติการแบบผสม การรักษาความปลอดภัยจะเกิดขึ้นหลังจากการอ่านเอกสารจำนวนมากและการใช้งานเคอร์เนลที่ปรับได้, MAC และการแยกที่คุณสมบัติระดับ OS นั้นเสนอให้คุณ

ดูสิ่งนี้ด้วย:


1
น่ากล่าวถึงที่นอกกล่องไม่มีความพยายามโดย lxc เพื่อให้แยกแขกที่เหมาะสม อย่างไรก็ตามlxdพยายามแยกส่วนอย่างเช่นคุก BSD หรือโซลาริส
allquixotic

lxd เป็น "ประสบการณ์ที่ดีกว่า" ของ LXC วางคุณลักษณะอื่น ๆ ไว้ด้านบน อย่างไรก็ตามดูเหมือนว่าจะเป็นการดีที่จะอ้างถึง

@allquixotic คุณหมายถึงว่าใช้การกำหนดค่าที่ไม่เปลี่ยนแปลงซึ่งสร้างจากแม่แบบหรือไม่ True (แต่เปิดใช้งาน userns) คอนเทนเนอร์มีให้พร้อมกับ LXC 1.x และยังสามารถเริ่มทำงานอัตโนมัติเมื่อบูตระบบโดยมีเงื่อนไขว่าเป็นเจ้าของโดยroot(และอยู่ในตำแหน่งทั้งระบบสำหรับคอนเทนเนอร์)
0xC0000022L
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.