LXC कंटेनरों के अंदर और बाहर उपयोगकर्ता अनुमतियाँ?


26

मैं अपने सर्वर पर डॉकर LXC कंटेनरों के अंदर कुछ सेवाएं चला रहा हूं और मैं वास्तव में उनके साथ गंभीर चीजें करने लगा हूं।

एक बात मैं स्पष्ट नहीं कर रहा हूं कि कंटेनर के अंदर और बाहर उपयोगकर्ता अनुमतियाँ कैसे काम करती हैं। यदि, उदाहरण के लिए, मैं एक कंटेनर में MySQL चला रहा हूं और इसकी डेटा डायरेक्टरी सेट है /data, जो एक डॉक्युअर वॉल्यूम है, तो कंटेनर के अंदर और बाहर की अनुमति पहुंच नीतियों को कैसे प्रभावित करती हैं?

जाहिर है, विचार यह है कि MySQL को कंटेनर में अपने स्वयं के उपयोगकर्ता के रूप में चलाया जाए (यानी mysql:mysql) और उस निर्देशिका को अधिकार पढ़ना और लिखना। मुझे लगता है कि यह काफी सीधा होगा, बस chmodनिर्देशिका आदि को निगलेगा, लेकिन यह कंटेनर के बाहर कैसे काम करता है ? अब जब मेरे पास यह डॉकटर साझा किया गया वॉल्यूम है, जिसे 'डेटा' कहा जाता है, तो मैं इसे एक्सेस कंट्रोल कैसे प्रबंधित करूं?

मैं विशेष रूप से डॉकर कंटेनर के बाहर एक अनपेक्षित उपयोगकर्ता को चलाने में सक्षम होना चाहता हूं जो समय-समय पर MySQL साझा वॉल्यूम तक पहुंच जाएगा और डेटा का बैकअप लेगा।

मैं अनुमतियों, उपयोगकर्ताओं और समूहों को कैसे सेट कर सकता हूं ताकि होस्ट पर एक विशिष्ट उपयोगकर्ता डोकर साझा किए गए वॉल्यूम में फ़ाइलों और फ़ोल्डरों को पढ़ / लिख सके?


2
साथ userns (लेकिन कोई dockerउस के लिए समर्थन, अभी तक) LXC कंटेनर आम उपयोगकर्ता के रूप में चलाया जा सकता है। अन्यथा rootकंटेनर के अंदर उपयोगकर्ता संभावित रूप से टूट सकता है अगर कंटेनर अनुचित तरीके से कॉन्फ़िगर किया गया हो। rootमेजबान पर Ie rootएक विशेषाधिकार प्राप्त LXC कंटेनर में कंटेनर में है।
0xC0000022L

1
rootवैसे, बिना लाइसेंस के कंटेनर भी चला सकते हैं । महत्वपूर्ण है कि के लिए एक मानचित्रण है userns परिभाषित किया गया है।
0xC0000022L

जवाबों:


21

चूंकि 0.9 डॉकर की रिहाई गिरा दी गई है LXCऔर अपने स्वयं के निष्पादन वातावरण का उपयोग करता है libcontainer,। आपका प्रश्न थोड़ा पुराना है लेकिन मुझे लगता है कि मेरा उत्तर अभी भी आपके द्वारा उपयोग किए जा रहे संस्करण पर लागू होता है।

त्वरित उत्तर: वॉल्यूम की अनुमतियों को समझने के लिए, आप के अनुरूप ले सकते हैं mount --bind Host-Dir Container-Dir। तो अपनी आवश्यकता को पूरा करने के लिए आप अनुमतियों के प्रबंधन के लिए किसी भी पारंपरिक तरीके का उपयोग कर सकते हैं। मुझे लगता है कि एसीएल आपकी जरूरत है

दीर्घ उत्तर: तो जैसे आपके उदाहरण में हमारे पास एक कंटेनर है जिसका नाम गोदी है जिसमें एक मात्रा है /data

docker run -tid --name dock -v /usr/container/Databases/:/data \
    centos:latest /bin/bash

कंटेनर के अंदर हमारे MySQL सर्वर को /dataइसकी डेटा निर्देशिका के रूप में उपयोग करने के लिए कॉन्फ़िगर किया गया है । इसलिए /dataकंटेनर के अंदर हमारे डेटाबेस हैं । और होस्ट ओएस पर कंटेनर के बाहर, हमने इस /dataवॉल्यूम को माउंट किया है /usr/container/Databases/और हम डेटाबेस का बैकअप लेने के लिए एक सामान्य उपयोगकर्ता बॉब असाइन करते हैं । होस्ट मशीन से हम उपयोगकर्ता बॉब के लिए ACLs कॉन्फ़िगर करेंगे ।

useradd -u 3000 bob
usermod -R o=--- /usr/container/Databases/
setfacl -R -m u:bob:rwx /usr/container/Databases/
setfacl -R -d -m u:bob:rwx /usr/container/Databases/

इसका परीक्षण करने के लिए उपयोगकर्ता बॉब के साथ बैकअप लेने देता है ।

su - bob
tar -cvf container-data.tar /usr/container/Databases/

और टार की सूची होगी और आप देख सकते हैं कि हमारा उपयोगकर्ता सभी फाइलों तक पहुंचने में सक्षम था।

अब कंटेनर के अंदर से अगर आप चेक करते getfaclहैं तो आप देखेंगे कि बॉब के बजाय यह 3000 दिखाता है। ऐसा इसलिए है क्योंकि बॉब का यूआईडी 3000 है और कंटेनर में ऐसा कोई उपयोगकर्ता नहीं है, इसलिए यह यूआईडी को केवल मेटा डेटा से प्राप्त होता है। । अब यदि आप अपने कंटेनर में एक उपयोगकर्ता बनाते हैं, तो आप useradd -u 3000 bobदेखेंगे कि अब getfacl3000 के बजाय बॉब नाम दिखाता है।

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


उबंटू के लिए डॉकटर में कम से कम पैकेज का नाम है lxc-docker, इसका मतलब है कि यह एलएक्ससी का उपयोग नहीं कर रहा है? क्या इस मामले में उपरोक्त अभी भी लागू होता है?
नफ्तुली के

@NaftuliTzviKay ओह, क्षमा करें। तब इसका इस्तेमाल LXC (मुझे लगता apt-get infoहै कि विवरण हो सकता है) का उपयोग करने के लिए किया गया क्योंकि ubuntu में एक और पैकेज है docker.ioजिसका मैंने उपयोग किया था। मैं उबंटू के साथ लंबे समय तक नहीं गया, क्योंकि डॉकर और रेडहैट ने अब हाथ मिलाया है। तो आधार OS के रूप में RHEL या CentOS के साथ जाना बेहतर है, अन्यथा आप बस LXC का उपयोग कर सकते हैं।
शुरुआत

यहां तक ​​कि lxc-dockerयह योजना के अनुसार काम करने लगता है। मैंने 3000 के यूआईडी के साथ एक उपयोगकर्ता बनाया, एक साझा मात्रा में एक फ़ाइल को छुआ, और मेजबान ओएस से यह देखने में सक्षम था कि फ़ाइल मौजूद थी और आईडी 3000 के साथ एक उपयोगकर्ता के स्वामित्व में थी।
Naftuli Kay
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.