Docker / LXC में AppArmor प्रोफाइल


11

मेरे पास एक डॉकटर कंटेनर (LXC) है जो MySQL चलाता है। चूंकि डॉकर के पीछे का विचार आम तौर पर "प्रति कंटेनर में एक चलने वाली प्रक्रिया" है, अगर मैं MySQL बाइनरी को लक्षित करने वाले AppArmor प्रोफाइल को परिभाषित करता हूं, तो क्या उन्हें लागू किया जाएगा? क्या मेरे लिए इसके लिए परीक्षण करने का कोई तरीका है?


आप कंटेनर के अंदर अप्पमोर का उपयोग क्यों करना चाहते हैं?
c4f4t0r

3
यदि किसी अन्य चीज़ को एक्सेस करने से रोकने के लिए डेटाबेस के खिलाफ शून्य-दिवस या अन्य शोषण चलाया जाता है। मुझे लिनक्स पर भरोसा है cgroups, लेकिन इतना नहीं । माफ़ करना सुरक्षित होना बेहतर है, मैंने माईएसक्यूएल को बंद कर दिया है और माईएसक्यूएल को बंद कर दिया है, जो एक सीजीआरपी से बाहर निकलने का एक रास्ता है।
Naftuli Kay

जवाबों:


8

सबसे पहले, सिस्टम पर दूसरों से किसी एप्लिकेशन को अलग करने के लिए cgroups का उपयोग नहीं किया जाता है। उनका उपयोग संसाधन उपयोग और डिवाइस एक्सेस को प्रबंधित करने के लिए किया जाता है। यह विभिन्न नामस्थान (पीआईडी, यूटीएस, माउंट, उपयोगकर्ता ...) है जो कुछ (सीमित) अलगाव प्रदान करते हैं।

इसके अलावा, एक डॉकर कंटेनर के अंदर शुरू की गई प्रक्रिया शायद इसके तहत चल रहे AppArmor प्रोफाइल को प्रबंधित करने में सक्षम नहीं होगी। वर्तमान में लिया गया दृष्टिकोण कंटेनर लॉन्च करने से पहले एक विशिष्ट AppArmor प्रोफ़ाइल को सेटअप करना है।

ऐसा लगता है कि डॉकटर में लिबरकॉनटेनर निष्पादन चालक कंटेनरों के लिए AppArmor प्रोफाइल स्थापित करने का समर्थन करता है , लेकिन मुझे डॉक्टर में कोई उदाहरण या संदर्भ नहीं मिल सकता है।

स्पष्ट रूप से AppArmor को Ubuntu में LXC के साथ भी समर्थित किया गया है

आपको अपने आवेदन के लिए एक AppArmor प्रोफाइल लिखना चाहिए और यह सुनिश्चित करना चाहिए कि LXC / libcontainer / Docker / ... कंटेनर के अंदर प्रक्रियाओं को शुरू करने से पहले इसे लोड करता है।

इस तरह से उपयोग किए गए प्रोफाइल को लागू किया जाना चाहिए, और इसका परीक्षण करने के लिए आपको एक अवैध पहुंच की कोशिश करनी चाहिए और सुनिश्चित करें कि यह विफल हो।

इस मामले में बाइनरी और वास्तव में लागू प्रोफ़ाइल के बीच कोई लिंक नहीं है। आपको अपने कंटेनर के लिए इस प्रोफ़ाइल का उपयोग करने के लिए स्पष्ट रूप से डॉकर / LXC को बताना होगा। MySQL बाइनरी के लिए एक प्रोफाइल लिखना केवल होस्ट पर लागू होगा, कंटेनर में नहीं।


यह अब तक का मेरा (सीमित) अनुभव रहा है। मुझे डॉकटर कंटेनर के भीतर से एक प्रोफ़ाइल बनाने में समस्याएँ हुई हैं, लेकिन यदि कंटेनर के बाहर एक प्रोफ़ाइल बनाई गई थी और फिर उसकी प्रतिलिपि बनाई गई थी, तो उसे बस ™ काम करना चाहिए, बशर्ते कि आप निष्पादन योग्य चलने से पहले कंटेनर में AppArmor प्रारंभ करें।
नातुल्ली काय

@Siosm: LCX! = Libcontainer सवाल LXC ड्राइवर के बारे में था।
0xC0000022L

@ 0xC0000022L: कंटेनरों में प्रक्रियाओं को सीमित करने के लिए उपयोग किए जाने वाले किसी भी उपकरण के लिए AppArmor प्रोफ़ाइल प्रवर्तन मॉडल समान है।
सिओसम

3

उत्तर बहुत संभावना है: नहीं।

उबंटू सर्वर गाइड विषय LXC चर्चा काफी ठीक आपके प्रश्न और निम्नलिखित कथन बनाता है:

एक कंटेनर में कार्यक्रम को और अधिक सीमित नहीं किया जा सकता है - उदाहरण के लिए, MySQL कंटेनर प्रोफ़ाइल (होस्ट की सुरक्षा) के तहत चलता है, लेकिन MySQL प्रोफ़ाइल (कंटेनर की सुरक्षा के लिए) में प्रवेश करने में सक्षम नहीं होगा।

अवांछित प्रभावों से बचने के लिए बेहतर विकल्प कंटेनर को चलाने वाले उपयोगकर्ता को सीमित करना और कर्नेल के सुविधा का लाभ उठाने वाले कंटेनर का उपयोग करना है । हालांकि, dockerवर्तमान में - मेरे ज्ञान के लिए - समर्थन नहीं करता है userns

ऐसे मामले में MySQL, मेजबानों के नजरिए से - अनपेक्षित उपयोगकर्ता के रूप में चलता है, जबकि कंटेनर के अंदर इसे चलाया जा सकता है root। यदि आवश्यक हो, तो आप iptablesMySQL को होस्ट के बाहरी पोर्ट में बाँधने के लिए उपयोग कर सकते हैं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.