अनपेक्षित कंटेनरों के लाभ और डाउनसाइड क्या हैं?


16

अप्रभावित कंटेनर क्या है की तकनीकी व्याख्या काफी अच्छी है। हालाँकि, यह साधारण पीसी उपयोगकर्ता के लिए नहीं है। क्या एक सरल उत्तर है कि कब और क्यों लोगों को बिना पके हुए कंटेनरों का उपयोग करना चाहिए, और उनके लाभ और चढ़ाव क्या हैं?

जवाबों:


14

उत्पादन वातावरण में कंटेनरों को चलाने का सबसे सुरक्षित तरीका है अनप्राइवेटेड कंटेनर चलाना। जब सुरक्षा की बात आती है तो कंटेनरों को बुरा प्रचार मिलता है और इसका एक कारण यह है कि कुछ उपयोगकर्ताओं ने पाया है कि यदि किसी उपयोगकर्ता को कंटेनर में रूट मिलता है तो मेजबान पर भी रूट प्राप्त करने की संभावना है। मूल रूप से एक unprivileged कंटेनर क्या करता है, मेजबान से उपयोगकर्ता का मुखौटा है। अप्रभावित कंटेनरों के साथ, गैर रूट उपयोगकर्ता कंटेनर बना सकते हैं और कंटेनर में जड़ के रूप में दिखाई देंगे और दिखाई देंगे, लेकिन होस्ट पर उदाहरण के लिए उपयोगकर्ता के रूप में 10000 दिखाई देगा (जो भी आप उपयोगकर्ता के रूप में मैप करते हैं)। मैंने हाल ही में LXC पर स्टीफन ग्रेबर की ब्लॉग श्रृंखला (LXC के शानदार दिमाग / लीड डेवलपर्स में से एक और निश्चित रूप से अनुसरण करने के लिए) पर आधारित एक ब्लॉग पोस्ट लिखी । मैं फिर कहता हूं, बेहद शानदार।

मेरे ब्लॉग से:

कंटेनर से:

lxc-attach -n ubuntu-unprived
root@ubuntu-unprived:/# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 04:48 ?        00:00:00 /sbin/init
root       157     1  0 04:48 ?        00:00:00 upstart-udev-bridge --daemon
root       189     1  0 04:48 ?        00:00:00 /lib/systemd/systemd-udevd --daemon
root       244     1  0 04:48 ?        00:00:00 dhclient -1 -v -pf /run/dhclient.eth0.pid
syslog     290     1  0 04:48 ?        00:00:00 rsyslogd
root       343     1  0 04:48 tty4     00:00:00 /sbin/getty -8 38400 tty4
root       345     1  0 04:48 tty2     00:00:00 /sbin/getty -8 38400 tty2
root       346     1  0 04:48 tty3     00:00:00 /sbin/getty -8 38400 tty3
root       359     1  0 04:48 ?        00:00:00 cron
root       386     1  0 04:48 console  00:00:00 /sbin/getty -8 38400 console
root       389     1  0 04:48 tty1     00:00:00 /sbin/getty -8 38400 tty1
root       408     1  0 04:48 ?        00:00:00 upstart-socket-bridge --daemon
root       409     1  0 04:48 ?        00:00:00 upstart-file-bridge --daemon
root       431     0  0 05:06 ?        00:00:00 /bin/bash
root       434   431  0 05:06 ?        00:00:00 ps -ef

मेजबान से:

lxc-info -Ssip --name ubuntu-unprived
State:          RUNNING
PID:            3104
IP:             10.1.0.107
CPU use:        2.27 seconds
BlkIO use:      680.00 KiB
Memory use:     7.24 MiB
Link:           vethJ1Y7TG
TX bytes:      7.30 KiB
RX bytes:      46.21 KiB
Total bytes:   53.51 KiB

ps -ef | grep 3104
100000    3104  3067  0 Nov11 ?        00:00:00 /sbin/init
100000    3330  3104  0 Nov11 ?        00:00:00 upstart-udev-bridge --daemon
100000    3362  3104  0 Nov11 ?        00:00:00 /lib/systemd/systemd-udevd --daemon
100000    3417  3104  0 Nov11 ?        00:00:00 dhclient -1 -v -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases eth0
100102    3463  3104  0 Nov11 ?        00:00:00 rsyslogd
100000    3516  3104  0 Nov11 pts/8    00:00:00 /sbin/getty -8 38400 tty4
100000    3518  3104  0 Nov11 pts/6    00:00:00 /sbin/getty -8 38400 tty2
100000    3519  3104  0 Nov11 pts/7    00:00:00 /sbin/getty -8 38400 tty3
100000    3532  3104  0 Nov11 ?        00:00:00 cron
100000    3559  3104  0 Nov11 pts/9    00:00:00 /sbin/getty -8 38400 console
100000    3562  3104  0 Nov11 pts/5    00:00:00 /sbin/getty -8 38400 tty1
100000    3581  3104  0 Nov11 ?        00:00:00 upstart-socket-bridge --daemon
100000    3582  3104  0 Nov11 ?        00:00:00 upstart-file-bridge --daemon
lxc       3780  1518  0 00:10 pts/4    00:00:00 grep --color=auto 3104

जैसा कि आप देख सकते हैं कि प्रक्रियाएं कंटेनर के अंदर रूट के रूप में चल रही हैं, लेकिन रूट के रूप में नहीं बल्कि मेजबान से 100000 के रूप में दिखाई दे रही हैं।

इसलिए योग करने के लिए: लाभ - सुरक्षा को जोड़ा गया और सुरक्षा के लिए अलगाव जोड़ा गया। डाउनसाइड - पहली बार में अपने सिर को चारों ओर लपेटने के लिए थोड़ा भ्रमित करना और नौसिखिए उपयोगकर्ता के लिए नहीं।


3
इसलिए, अगर मैं इसे सही ढंग से समझूं, तो कंटेनर खुद से 100% सुरक्षित नहीं हैं। कोई फर्क नहीं पड़ता कि आप किस कंटेनर को चलाते हैं, एक मौका है कि जानवर बच सकता है। और यह केवल यहां है, जब कंटेनर का प्रकार महत्वपूर्ण हो जाता है। विशेषाधिकार प्राप्त कंटेनरों के लिए जानवर जड़ के नीचे जंगली भागेंगे, रूटकिट्स लगाएंगे और मूल्यवान एसएसएल चाबियाँ कुतरेंगे। अनपेक्षित के लिए यह केवल उस उपयोगकर्ता खाते तक ही सीमित रहेगा, जिसने कंटेनर बनाया है, है ना? उसकी SSH कुंजियाँ चुराना आदि क्या वास्तव में अधिक सुरक्षित है? क्या इसे चार नेस्टेड बॉक्स की तस्वीर के साथ समझाया जा सकता है?
अनातोली टेकटोनिक

2
संक्षेप में, खुद को सही तरीके से रखने वाले कंटेनर उत्पादन के उपयोग के लिए सुरक्षित नहीं हैं। अपने LXC पर्यावरण के साथ वैसा ही व्यवहार करें जैसा कि आप किसी अन्य लिनक्स वातावरण से करते हैं। आप अपने लिनक्स बॉक्स को या तो सही खुला नहीं छोड़ेंगे ?! हां आपका कंटेनर केवल उसी तक सीमित होगा, जिसमें उपयोगकर्ता खाते को मैप किया गया है। अनपेक्षित conatiners पर ग्रेबर की पोस्ट देखें: मुझे लगता है कि सबसे बड़ा मुद्दा कर्नेल और सिस्कॉल का फायदा उठाने में सक्षम हो रहा है क्योंकि हर कंटेनर एक ही कर्नेल साझा करता है। Cgroups और अन्य अनुप्रयोगों जैसे selinux, apparmor और seccomp और अन्य के माध्यम से सुरक्षा बढ़ाने के कई तरीके हैं।
गीकबस २ g

3
स्टीफन ग्रैबर
geekbass

तो, कंटेनर चलाने के लिए एक अलग सीमित उपयोगकर्ता बनाएं। उचित लगता है। मैं इसे उत्तर के रूप में स्वीकार करता हूं। धन्यवाद।
अनातोली टेकटोनिक

4

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

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

"साधारण" उपयोगकर्ता के लिए, आप कंटेनर का उपयोग दो लोगों के लिए एक मशीन का उपयोग करने के लिए कर सकते हैं, जबकि वे पूरी तरह से अलग मशीनों पर हैं। उदाहरण के लिए रूममेट।


3
जबकि कंटेनरों के लिए एक अच्छा मानव विवरण, यह अभी भी विशेषाधिकार प्राप्त और असंबद्ध लोगों के बीच अंतर की व्याख्या नहीं करता है।
अनातोली टेकटोनिक

1

खैर, एक साझा कर्नेल के साथ, इसके बावजूद कुछ तरीकों से मुफ्त में तोड़ने के लिए विरोधी की आवश्यकताओं में वृद्धि हुई है (या इसके बजाय, यह हमले की सतह को सीमित करने में मदद करता है), अनपेक्षित कंटेनर अभी भी सीधे हैक से पूरी तरह से अलग नहीं होते हैं जो मेजबान रूट प्राप्त करते हैं, इसके बावजूद ।

उस कारण से, यह एक गलत धारणा / दावा है। यह कहते हुए कि, इंटरनेट पर कई उपयोगकर्ताओं में तकनीकी योग्यता का स्तर अभी भी inet सेवाएं चलाएगा, कई तरीकों से, जो वे वास्तव में तकनीकी रूप से सक्षम नहीं हैं, इसलिए हे। :)

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