โปรไฟล์ AppArmor ใน Docker / LXC


11

ฉันมี Docker container (LXC) ที่รัน MySQL เนื่องจากความคิดที่อยู่เบื้องหลัง Docker โดยทั่วไปคือ "หนึ่งกระบวนการทำงานต่อคอนเทนเนอร์" ถ้าฉันกำหนดโปรไฟล์ AppArmor ที่กำหนดเป้าหมายไปที่ไบนารี MySQL พวกเขาจะถูกบังคับใช้หรือไม่ มีวิธีที่ฉันจะทดสอบสิ่งนี้หรือไม่?


ทำไมคุณต้องการใช้ apparmor ภายในคอนเทนเนอร์
c4f4t0r

3
ในกรณีที่มีการใช้ประโยชน์จากศูนย์หรือการใช้ประโยชน์จากฐานข้อมูลเพื่อป้องกันการเข้าถึงสิ่งอื่น ผมเชื่อว่าลินุกซ์cgroupsแต่ไม่ว่ามาก มันจะดีกว่าปลอดภัยกว่าขออภัยฉันอยากให้ MySQL ถูกล็อคลงแทนที่จะใช้ MySQL แบบ zero-day เพื่อหาวิธีแยก cgroup
Naftuli Kay

คำตอบ:


8

ก่อนอื่นกลุ่ม cg จะไม่ถูกใช้เพื่อแยกแอปพลิเคชันจากผู้อื่นในระบบ พวกเขาจะใช้ในการจัดการการใช้ทรัพยากรและการเข้าถึงอุปกรณ์ เป็นเนมสเปซต่างๆ (PID, UTS, mount, user ... ) ที่ให้การแยก (จำกัด ) บางอย่าง

ยิ่งกว่านั้นกระบวนการที่เปิดตัวภายในคอนเทนเนอร์ Docker อาจไม่สามารถจัดการโปรไฟล์ AppArmor ที่กำลังทำงานอยู่ได้ วิธีการที่ใช้อยู่ในปัจจุบันคือการตั้งค่าโปรไฟล์ AppArmor ที่เฉพาะเจาะจงก่อนเปิดตัวคอนเทนเนอร์

ดูเหมือนว่าโปรแกรมควบคุมการทำงาน libcontainer ใน Docker รองรับการตั้งค่าโปรไฟล์ AppArmor สำหรับตู้คอนเทนเนอร์แต่ฉันไม่พบตัวอย่างหรือการอ้างอิงในเอกสาร

AppArmor Apparently รองรับLXC ใน Ubuntuด้วย

คุณควรเขียนโปรไฟล์ AppArmor สำหรับแอปพลิเคชันของคุณและตรวจสอบให้แน่ใจว่าโหลด LXC / libcontainer / Docker / ... ก่อนเริ่มกระบวนการภายในคอนเทนเนอร์

ส่วนกำหนดค่าที่ใช้วิธีนี้ควรถูกบังคับใช้และเพื่อทดสอบคุณควรลองใช้การเข้าถึงที่ผิดกฎหมาย

ไม่มีลิงก์ระหว่างไบนารีและโปรไฟล์ที่บังคับใช้จริงในกรณีนี้ คุณต้องบอก Docker / LXC อย่างชัดเจนเพื่อใช้โปรไฟล์นี้สำหรับคอนเทนเนอร์ของคุณ การเขียนโปรไฟล์สำหรับไบนารี MySQL จะบังคับใช้กับโฮสต์เท่านั้นไม่ใช่ในคอนเทนเนอร์


นี่เป็นประสบการณ์ของฉัน (มี จำกัด ) จนถึงปัจจุบัน ฉันมีปัญหาในการสร้างโปรไฟล์จากภายใน Docker container แต่ถ้าโปรไฟล์ถูกสร้างขึ้นภายนอกของ container แล้วทำการคัดลอกมันควรจะทำงาน™โดยแน่นอนว่าคุณเริ่ม AppArmor ใน container ก่อนที่จะรันโปรแกรมปฏิบัติการ
Naftuli Kay

@Siosm: LCX! = libcontainer คำถามคือเกี่ยวกับไดรเวอร์ LXC
0xC0000022L

@ 0xC0000022L: โมเดลการบังคับใช้โปรไฟล์ AppArmor เหมือนกันสำหรับเครื่องมือใด ๆ ที่ใช้ในการ จำกัด กระบวนการในคอนเทนเนอร์
Siosm

3

คำตอบมีแนวโน้มมาก: ไม่

คู่มือ Ubuntu Server หัวข้อ LXCกล่าวถึงสวยมากคำถามที่แน่นอนของคุณและทำให้คำสั่งต่อไปนี้:

โปรแกรมในคอนเทนเนอร์ไม่สามารถ จำกัด เพิ่มเติมได้ - ตัวอย่างเช่น MySQL ทำงานภายใต้โปรไฟล์คอนเทนเนอร์ (ปกป้องโฮสต์) แต่จะไม่สามารถป้อนโปรไฟล์ MySQL (เพื่อป้องกันคอนเทนเนอร์)

ตัวเลือกที่ดีกว่าเพื่อหลีกเลี่ยงการโจมตีที่มีผลกระทบที่ไม่พึงประสงค์คือการ จำกัด ผู้ใช้ที่ทำงานภาชนะและใช้ตู้คอนเทนเนอร์ LXC userspace ที่ใช้ประโยชน์จากคุณสมบัติของเคอร์เนล อย่างไรก็ตามdockerในขณะนี้ - ความรู้ของฉัน - usernsไม่สนับสนุน

ในกรณีดังกล่าวจะ MySQL - จากมุมมองของโฮสต์ - ทำงานเป็นผู้ใช้ unprivileged, rootในขณะที่ภายในภาชนะที่มันอาจจะใช้เป็น จากนั้นคุณสามารถใช้iptablesผูก MySQL กับพอร์ตภายนอกของโฮสต์ได้ถ้าต้องการ

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