LXC เป็นรันไทม์คอนเทนเนอร์ Linux ระดับต่ำที่รู้จักกันดีและได้รับการทดสอบอย่างหนัก มีการพัฒนาอย่างแข็งขันมาตั้งแต่ปี 2551 และได้พิสูจน์ตัวเองแล้วในสภาพแวดล้อมการผลิตที่สำคัญทั่วโลก ผู้ร่วมให้ข้อมูลหลักบางคนเป็นคนกลุ่มเดียวกับที่ช่วยนำฟีเจอร์คอนเทนเนอร์ต่างๆ ที่รู้จักกันดีมาใช้ภายในเคอร์เนล Linux
พิมพ์ | บริการ | สถานะ |
---|---|---|
ซีไอ (ลินุกซ์) | GitHub | |
ซีไอ (ลินุกซ์) | เจนกินส์ | |
สถานะโครงการ | แนวทางปฏิบัติที่ดีที่สุดของ CII | |
คลุมเครือ | OSS-ฟัซ | |
คลุมเครือ | CIFuzz |
จุดสนใจหลักของ LXC คือคอนเทนเนอร์ของระบบ นั่นคือคอนเทนเนอร์ที่นำเสนอสภาพแวดล้อมที่ใกล้เคียงที่สุดเท่าที่จะเป็นไปได้เหมือนกับที่คุณได้รับจาก VM แต่ไม่มีค่าใช้จ่ายที่มาพร้อมกับการรันเคอร์เนลแยกต่างหากและการจำลองฮาร์ดแวร์ทั้งหมด
ซึ่งสามารถทำได้โดยการผสมผสานคุณสมบัติการรักษาความปลอดภัยของเคอร์เนล เช่น เนมสเปซ การควบคุมการเข้าถึงที่จำเป็น และกลุ่มควบคุม
คอนเทนเนอร์ที่ไม่มีสิทธิพิเศษคือคอนเทนเนอร์ที่ทำงานโดยไม่มีสิทธิ์ใดๆ สิ่งนี้ต้องการการสนับสนุนเนมสเปซผู้ใช้ในเคอร์เนลที่คอนเทนเนอร์ทำงานอยู่ LXC เป็นรันไทม์แรกที่รองรับคอนเทนเนอร์ที่ไม่มีสิทธิพิเศษ หลังจากที่เนมสเปซผู้ใช้ถูกรวมเข้ากับเคอร์เนลเมนไลน์
โดยพื้นฐานแล้ว เนมสเปซของผู้ใช้จะแยกชุด UID และ GID ที่กำหนด ซึ่งสามารถทำได้โดยการสร้างการแมประหว่างช่วงของ UID และ GID บนโฮสต์กับช่วง UID และ GID ที่แตกต่างกัน (ไม่มีสิทธิ์) ในคอนเทนเนอร์ เคอร์เนลจะแปลการแมปนี้ในลักษณะที่ภายในคอนเทนเนอร์ UID และ GID ทั้งหมดจะปรากฏตามที่คุณคาดหวังจากโฮสต์ ในขณะที่ UID และ GID เหล่านี้บนโฮสต์นั้นในความเป็นจริงแล้วไม่มีสิทธิพิเศษ ตัวอย่างเช่น กระบวนการที่ทำงานเป็น UID และ GID 0 ภายในคอนเทนเนอร์อาจปรากฏเป็น UID และ GID 100000 บนโฮสต์ รายละเอียดการใช้งานและการทำงานสามารถรวบรวมได้จาก man page เนมสเปซผู้ใช้ที่เกี่ยวข้อง
เนื่องจากคอนเทนเนอร์ที่ไม่มีสิทธิ์เป็นการปรับปรุงความปลอดภัย จึงมักมีข้อจำกัดบางประการที่เคอร์เนลบังคับใช้ เพื่อให้คอนเทนเนอร์ที่ไม่มีสิทธิพิเศษทำงานได้อย่างสมบูรณ์ LXC จะโต้ตอบกับโค้ด setuid 3 ชิ้น:
ทุกอย่างจะทำงานในฐานะผู้ใช้ของคุณเองหรือเป็น uid ที่ผู้ใช้ของคุณเป็นเจ้าของ
โดยทั่วไป เป้าหมายของ LXC คือการใช้คุณลักษณะด้านความปลอดภัยทุกอย่างที่มีอยู่ในเคอร์เนล ซึ่งหมายความว่าการจัดการการกำหนดค่าของ LXC จะช่วยให้ผู้ใช้ที่มีประสบการณ์ปรับแต่ง LXC ตามความต้องการได้อย่างซับซ้อน
ข้อมูลแนะนำโดยละเอียดเพิ่มเติมเกี่ยวกับการรักษาความปลอดภัยของ LXC มีอยู่ในลิงก์ต่อไปนี้
โดยหลักการแล้ว LXC สามารถทำงานได้โดยไม่ต้องใช้เครื่องมือใดๆ เหล่านี้ หากใช้การกำหนดค่าที่ถูกต้อง อย่างไรก็ตาม ประโยชน์ของคอนเทนเนอร์ดังกล่าวมักจะค่อนข้างจำกัด เพียงเพื่อเน้นสองปัญหาที่พบบ่อยที่สุด:
เครือข่าย: โดยไม่ต้องอาศัยตัวช่วย setuid ในการตั้งค่าอุปกรณ์เครือข่ายที่เหมาะสมสำหรับผู้ใช้ที่ไม่มีสิทธิพิเศษ (ดูไบนารี lxc-user-nic
ของ LXC) ตัวเลือกเดียวคือการแชร์เนมสเปซเครือข่ายกับโฮสต์ แม้ว่าหลักการนี้ควรจะปลอดภัย แต่การแบ่งปันเนมสเปซเครือข่ายของโฮสต์ยังคงมีขั้นตอนหนึ่งของการแยกน้อยลงและเพิ่มเวกเตอร์การโจมตี นอกจากนี้ เมื่อโฮสต์และคอนเทนเนอร์แชร์เนมสเปซเครือข่ายเดียวกัน เคอร์เนลจะปฏิเสธการเมาท์ sysfs ใดๆ ซึ่งมักจะหมายความว่าไบนารี init ภายในคอนเทนเนอร์จะไม่สามารถบูตได้อย่างถูกต้อง
เนมสเปซของผู้ใช้: ตามที่อธิบายไว้ข้างต้น เนมสเปซของผู้ใช้เป็นการปรับปรุงความปลอดภัยครั้งใหญ่ อย่างไรก็ตาม โดยไม่ต้องอาศัยตัวช่วยที่มีสิทธิพิเศษ ผู้ใช้ที่ไม่มีสิทธิ์บนโฮสต์จะได้รับอนุญาตให้แมป UID ของตนเองลงในคอนเทนเนอร์เท่านั้น อย่างไรก็ตาม ระบบ POSIX มาตรฐานจำเป็นต้องมี UID และ GID จำนวน 65536 รายการเพื่อรับประกันการทำงานเต็มรูปแบบ
LXC ได้รับการกำหนดค่าผ่านชุดคีย์ธรรมดา ตัวอย่างเช่น,
lxc.rootfs.path
lxc.mount.entry
คีย์การกำหนดค่าเนมสเปซ LXC โดยใช้จุดเดียว ซึ่งหมายความว่าคีย์การกำหนดค่าที่ซับซ้อน เช่น lxc.net.0
เปิดเผยคีย์ย่อยต่างๆ เช่น lxc.net.0.type
, lxc.net.0.link
, lxc.net.0.ipv6.address
และอื่นๆ เพื่อให้ละเอียดยิ่งขึ้น การกำหนดค่าแบบเม็ดเล็ก
LXC ถูกใช้เป็นรันไทม์เริ่มต้นสำหรับ Incus ซึ่งเป็นคอนเทนเนอร์ไฮเปอร์ไวเซอร์ที่เปิดเผย REST-api ที่ได้รับการออกแบบมาอย่างดีและมีเสถียรภาพอยู่ด้านบน
LXC ทำงานบนเคอร์เนลใดก็ได้ตั้งแต่ 2.6.32 เป็นต้นไป สิ่งที่คุณต้องมีคือคอมไพเลอร์ C ที่ใช้งานได้ LXC ทำงานได้กับสถาปัตยกรรมทั้งหมดที่มีคุณสมบัติเคอร์เนลที่จำเป็น ซึ่งรวมถึง (แต่ไม่จำกัดเพียง):
LXC ยังรองรับไลบรารีมาตรฐาน C ต่อไปนี้เป็นอย่างน้อย:
LXC ให้ความสำคัญกับความเข้ากันได้แบบย้อนหลังที่แข็งแกร่งมาโดยตลอด ที่จริงแล้ว API ไม่ได้เสียหายตั้งแต่รีลีส 1.0.0
เป็นต้นไป Main LXC ปัจจุบันเป็นเวอร์ชัน 4.*.*
โครงการ LXC มีชื่อเสียงที่ดีในการจัดการปัญหาด้านความปลอดภัยอย่างรวดเร็วและมีประสิทธิภาพ หากคุณคิดว่าคุณพบปัญหาด้านความปลอดภัยที่อาจเกิดขึ้น โปรดรายงานปัญหาดังกล่าวทางอีเมลไปที่ security (at) linuxcontainers (dot) org
สำหรับรายละเอียดเพิ่มเติม โปรดดูที่
เรายินดีต้อนรับผู้มีส่วนร่วมรายใหม่เสมอและยินดีให้คำแนะนำเมื่อจำเป็น LXC เป็นไปตามแบบแผนการเข้ารหัสเคอร์เนล ซึ่งหมายความว่าเราเพียงต้องการให้แต่ละคอมมิตมีบรรทัด Signed-off-by
รูปแบบการเขียนโค้ดที่เราใช้นั้นเหมือนกับรูปแบบที่ใช้โดยเคอร์เนล Linux คุณสามารถดูคำแนะนำโดยละเอียดได้ที่:
และควรดูที่ไฟล์ CONTRIBUTING ใน repo นี้ด้วย
หากคุณต้องการมีความกระตือรือร้นมากขึ้น ก็มักจะเป็นความคิดที่ดีที่จะปรากฏในช่อง LXC IRC #lxc-dev บน irc.libera.chat เราพยายามพัฒนาทั้งหมดอย่างเปิดเผย และมีการหารือเกี่ยวกับคุณสมบัติหรือจุดบกพร่องใหม่ๆ ทั้งในประเด็น GitHub ที่เหมาะสมหรือใน IRC
เมื่อคิดถึงการสนับสนุนด้านความปลอดภัยที่สำคัญหรือการเปลี่ยนแปลงที่สำคัญ โดยปกติแล้วควรส่ง Ping นักพัฒนาซอฟต์แวร์ก่อนและถามว่า PR จะได้รับการยอมรับหรือไม่
LXC และโครงการที่เกี่ยวข้องปฏิบัติตามรูปแบบการกำหนดเวอร์ชันเชิงความหมายอย่างเคร่งครัด
สามารถดาวน์โหลดแหล่งที่มาของเวอร์ชันล่าสุดได้จาก
คุณสามารถเรียกดูซอร์สโค้ดล่าสุดและเปลี่ยนประวัติทางออนไลน์ได้
โดยไม่พิจารณาเฉพาะรายละเอียดการจัดจำหน่ายแบบง่ายๆ
meson setup -Dprefix=/usr build
meson compile -C build
มักจะเพียงพอแล้ว
เมื่อคุณพบว่าคุณต้องการความช่วยเหลือ โครงการ LXC จะมีตัวเลือกต่างๆ มากมายให้กับคุณ
เรารักษาฟอรั่มการสนทนาที่
ที่คุณสามารถรับการสนับสนุนได้
คุณสามารถหาเราได้ที่ #lxc บน irc.libera.chat
คุณสามารถตรวจสอบหนึ่งในสองคลังรายชื่อผู้รับจดหมายของ LXC และลงทะเบียนหากสนใจ: