2016-04-05 18 views
15

यदि मैं विशेषाधिकार प्राप्त मोड में एक कंटेनर चला रहा हूं, तो क्या इसमें सभी कर्नेल क्षमताओं हैं या क्या मुझे उन्हें अलग से जोड़ने की आवश्यकता है?विशेषाधिकृत कंटेनर और क्षमताओं

उत्तर

14

विशेषाधिकार प्राप्त मोड में चलने से वास्तव में कंटेनर सभी क्षमताओं को देता है। लेकिन यह अच्छा अभ्यास हमेशा एक कंटेनर न्यूनतम आवश्यकताओं को यह की जरूरत है आप डोकर डॉक्स को देखें, तो वे भी

पूर्ण कंटेनर क्षमताओं (--privileged)

इस ध्वज को देखें दे रहा है - विशेषाधिकार प्राप्त ध्वज कंटेनर को सभी क्षमताओं को देता है, और यह डिवाइस cgroup नियंत्रक द्वारा लागू सभी सीमाओं को भी हटा देता है। दूसरे शब्दों में, कंटेनर तब लगभग हर चीज कर सकता है जो मेजबान कर सकता है। यह झंडा विशेष उपयोग-मामलों की अनुमति देने के लिए मौजूद है, जैसे डॉकर के अंदर डॉकर चलाना।

आप --cap-add ध्वज का उपयोग करके विशिष्ट क्षमताओं को दे सकते हैं। उन क्षमताओं पर अधिक जानकारी के लिए man 7 capabilities देखें। शाब्दिक नामों का उपयोग किया जा सकता है, उदा। --cap-add CAP_FOWNER

+0

का उपयोग कर के पक्ष में इस के खिलाफ की रक्षा करने के लिए कोई रास्ता नहीं है वहाँ किसी भी तरह से किया जाता है यह जानने के लिए कि किसी विशेष एप्लिकेशन की क्या क्षमताएं हैं? ऐसा लगता है कि अधिकांश अनुप्रयोगों के लिए अनियंत्रित किया गया है। – codefx

+0

@codefx यहां अंगूठे का कोई नियम नहीं है, यह एप्लिकेशन पर निर्भर करता है और रनटाइम के दौरान यह कौन सी सिस्टम कॉल कर सकता है। यदि आप हब से तैयार किए गए डॉकर छवि का उपयोग कर रहे हैं, तो शायद इसका उल्लेख किया जाएगा। यदि आप कुछ लिखते हैं जो आप स्वयं लिखते हैं, तो आपको पता होना चाहिए कि आपने कौन सी कर्नेल एपीआई का उपयोग किया है जिसके लिए विशेष क्षमताओं की आवश्यकता हो सकती है – buddy123

2

(अपने विकास के वातावरण बनाम साझा उत्पादन के रूप में उपयोग करते हुए एक अच्छा कवर from RedHat covering this

जबकि के रूप में "रूट" डोकर कंटेनर चल मेजबान पर जड़ से कम विशेषाधिकार हैं, यह अभी भी सख्त आपके उपयोग के मामले पर निर्भर करता है की आवश्यकता हो सकती लेख वहाँ है क्लस्टर)

9

इस पोस्ट गूगल खोज पद पर अधिक है जैसा कि मैंने क्यों तुम कभी नहीं मैं अपने लैपटॉप जो NVMe ड्राइव है पर यह कर रहा हूं --privileged

का उपयोग कर एक कंटेनर चलाना चाहते हैं के बारे में जानकारी जोड़ना चाहते थे लेकिन यह किसी के लिए काम करेंगे मेज़बान।

[email protected]:/# cat /proc/sys/vm/swappiness 
60 
[email protected]:/# echo "61" > /proc/sys/vm/swappiness  
[email protected]:/# cat /proc/sys/vm/swappiness 
60 

ठीक यह कंटेनर के लिए या मेजबान के लिए इसे बदल दिया:

docker run --privileged -t -i --rm ubuntu:latest bash 

पहले कुछ छोटी-मोटी,/proc फाइल सिस्टम

परीक्षण करने के लिए कंटेनर से अपना काम करने दिया?

$ cat /proc/sys/vm/swappiness 
61 

ओओपीएस !, हम मेजबान कर्नेल पैरामीटर को मनमाने ढंग से बदल सकते हैं। लेकिन यह सिर्फ एक डॉस स्थिति है, देखते हैं कि क्या हम अभिभावक होस्ट से विशेषाधिकार प्राप्त जानकारी एकत्र कर सकते हैं।

/sys पेड़ पर चलने दें और बूट डिस्क के लिए प्रमुख मामूली संख्या पाएं।

नोट: मैं दो NVMe ड्राइव और कंटेनर है एक और ड्राइव

[email protected]:/proc# cat /sys/block/nvme1n1/dev 
259:2 

ठीक पर एलवीएम के तहत चलाए जा रहे एक स्थान जहां dbus नियम नहीं होगा स्वत: स्कैन में किसी डिवाइस फ़ाइल बनाने की सुविधा देता है।

[email protected]:/proc# mknod /devnvme1n1 b 259 2 
[email protected]:/proc# sfdisk -d /devnvme1n1 
label: gpt 
label-id: 1BE1DF1D-3523-4F22-B22A-29FEF19F019E 
device: /devnvme1n1 
unit: sectors 
first-lba: 34 
last-lba: 2000409230 
<SNIP> 

ठीक है, हम बूटडिस्क पढ़ सकते हैं, विभाजनों में से किसी एक के लिए डिवाइस फ़ाइल बनाने दें। हालांकि हम इसे माउंट नहीं कर सकते क्योंकि यह खुलेगा हम इसे कॉपी करने के लिए अभी भी dd का उपयोग कर सकते हैं।

[email protected]:/proc# mknod /devnvme1n1p1 b 259 3 
[email protected]:/# dd if=devnvme1n1p1 of=foo.img 
532480+0 records in 
532480+0 records out 
272629760 bytes (273 MB, 260 MiB) copied, 0.74277 s, 367 MB/s 

ठीक है इसे घुमाएं और देखें कि हमारे प्रयासों ने काम किया है !!!

[email protected]:/# mount -o loop foo.img /foo 
[email protected]:/# ls foo 
EFI 
[email protected]:/# ls foo/EFI/ 
Boot Microsoft ubuntu 

तो मूल रूप से किसी कंटेनर मेजबान है कि आप किसी पर एक --privileged कंटेनर शुरू करने के लिए अनुमति देते हैं उन्हें उस होस्ट पर हर कंटेनर के लिए रूट पहुँच देने के समान है।

दुर्भाग्य डोकर परियोजना विश्वसनीय कंप्यूटिंग मॉडल चुना है, और प्रमाणन के बाहर प्लगइन्स, इसलिए हमेशा त्रुटि सुविधाओं की जरूरत जोड़ने बनाम --privileged

संबंधित मुद्दे