कंटेनर में होस्ट के रूट फाइल सिस्टम को माउंट करने के लिए डॉकर डेमॉन को कैसे अस्वीकार करें

मेरे पास निम्नलिखित कंटेनर सेटअप है ।

एक नंगे धातु सर्वर पर दो डॉकर डेमॉन स्थापित और चल रहे हैं ।

  1. मुख्य डॉकर डेमॉन बाहरी दुनिया में 80/443 को उजागर करने वाले मेरे एप्लिकेशन कंटेनर चलाता है ।
  2. प्लगइन डॉकर डेमॉन ग्राहक द्वारा प्रदान किए गए कुछ कंटेनर चलाता है जो 80/443 के माध्यम से मेरे आवेदन के साथ संवाद करते हैं ।

मैं ग्राहक को एपीआई (2376) तक पहुंच देना चाहूंगा प्लगइन डॉकर डेमॉन ताकि ग्राहक अपने स्वयं के कंटेनरों को तैनात/शुरू/रोक सके । ग्राहक के पास केवल एपीआई तक पहुंच होगी न कि होस्ट (एसएसएच) तक ।

वर्तमान में मुझे जो समस्या का सामना करना पड़ रहा है, क्या होगा यदि ग्राहक एक कंटेनर चलाते हैं जो कुछ असुरक्षित करता है जैसे docker run -v /:/host/root Ubuntu rm -rf /host/root.

मेरा सवाल है कि मैं क्या कर सकता हूं रोकने के लिए प्लगइन डॉकर डेमॉन बढ़ते रूट से / या किसी अन्य निर्देशिका के बाहर /home/user/,

  • क्या यह डॉकर डेमॉन को शुरू करने का विकल्प है /home/user/?
  • क्या मैं कुछ एलएसएम (लिनक्स सुरक्षा मॉड्यूल सेलिनक्स/एपर्मर) जादू का उपयोग कर सकता हूं ताकि डॉकर डेमॉन को उपयोगकर्ताओं के घर या वीएआर/डॉकर/लिब्स को छोड़कर कुछ या सभी होस्ट पथों को माउंट करने से रोका जा सके?
  • कर सकते हैं --userns-remap मेरा लक्ष्य हासिल करने में मेरी मदद करें?
  • क्या वे वीएम को छोड़कर कोई अन्य विकल्प उपलब्ध हैं?

सर्वर पूरी तरह से एक ही ग्राहक का है । इसलिए सुरक्षा या डेटा रिसाव मेरी प्राथमिक चिंता नहीं है । क्या मैं वास्तव में रोकने के लिए चाहते हैं कि किसी में है प्लगइन डेमॉन कुछ बेवकूफी कर रहा है, जो मेरे कंटेनरों को प्रभावित करता है जो अंदर चलते हैं मुख्य डॉकर डेमॉन. मैं दुबला रहना चाहता हूं और केवल वर्कफ़्लो के लिए डॉक करना चाहता हूं और वीएम निर्माण के लिए एक अतिरिक्त वर्कफ़्लो स्थापित नहीं करना चाहता हूं ।

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

$ sestatusSELinux status:                 enabledSELinuxfs mount:                /sys/fs/selinuxSELinux root directory:         /etc/selinuxLoaded policy name:             targetedCurrent mode:                   enforcingMode from config file:          enforcingPolicy MLS status:              enabledPolicy deny_unknown status:     allowedMax kernel policy version:      30

नमूना फ़ाइल का उपयोग करना:

$ cat sample_script.sh echo 'Hello, world'

इसका डिफ़ॉल्ट सुरक्षा संदर्भ है:

$ ls -lrtZ sample_script.sh -rw-------. 1 david david unconfined_u:object_r:user_home_t:s0 20 Oct  3 17:18 sample_script.sh

कंटेनर के अंदर इस फ़ाइल का उपयोग करने का प्रयास अपेक्षित रूप से विफल रहता है:

$ docker run -v /home/david/sample_script.sh:/sample_script.sh --rm ubuntu bash sample_script.shbash: sample_script.sh: Permission denied

और एक एवीसी इनकार लॉग किया जाएगा:

$ sudo ausearch -m avc -ts recenttime->Mon Oct  3 17:39:28 2016type=AVC msg=audit(1475512768.444:784): avc:  denied  { read } for  pid=28720 comm="bash" name="sample_script.sh" dev="dm-13" ino=101062112 scontext=system_u:system_r:svirt_lxc_net_t:s0:c457,c992 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=0

सुरक्षा संदर्भ को एक डॉकर में बदलने के बाद उपयोग कर सकते हैं:

$ sudo chcon -Rt svirt_sandbox_file_t sample_script.sh$ ls -lrtZ sample_script.sh -rw-------. 1 david david unconfined_u:object_r:svirt_sandbox_file_t:s0 20 Oct  3 17:18 sample_script.sh 

कंटेनर में अब फ़ाइल तक पहुंच है:

$ docker run -v /home/david/sample_script.sh:/sample_script.sh --rm ubuntu bash sample_script.shHello, world

में डॉकर और सेलिनक्स के बारे में अधिक जानकारी आधिकारिक Red Hat प्रलेखन और यह लेख दान वाल्श द्वारा.

हाँ, SELinux को रोकता है । यह दिखाना कि यह काम नहीं करता है एक अच्छा डेमो बनाता है । सेलिनक्स सुरक्षा तक पहुंच प्राप्त करने के लिए रेड हैट-आधारित डिस्ट्रो पर डॉकर का उपयोग करें । डेबियन-आधारित डिस्ट्रोस पर, सेलिनक्स ऐतिहासिक रूप से अच्छी तरह से बनाए नहीं रखा गया है ।

एपर्मर के बारे में क्या यह वहां भी संभव है?

मैं ऐसा नहीं मानता। मैंने कभी नहीं सुना है कि एपर्मर ऐसा कुछ भी करने में सक्षम है । यह एक अलग और बहुत कम सुरक्षित तकनीक है, आप जानते हैं ।