मैं सुडो के बिना डॉकटर का उपयोग कैसे कर सकता हूं?


767

डॉकर के प्रलेखन पृष्ठों पर, सभी उदाहरण कमांड बिना दिखाए गए हैं sudo, जैसे यह:

docker ps

उबंटू पर, बाइनरी कहा जाता है docker.io। यह भी sudo के बिना काम नहीं करता है:

sudo docker.io ps

मैं डॉकर को कैसे कॉन्फ़िगर कर सकता हूं ताकि मुझे हर डॉकर कमांड को सूडो के साथ उपसर्ग करने की आवश्यकता न हो?


1
UFW सक्षम करने के लिए मत भूलना मत;)
Rinzwind

2
Ubuntu 14.04 पर है भी 'डोकर' द्विआधारी।
अनातोली टेकटोनिक

@anatolytechtonik मैं भी 14.04 LTS उबंटू में बजाय 'docker.io' के 'डोकर' का इस्तेमाल किया
Nabin

2
अनुशंसित स्थापना डिफ़ॉल्ट ubuntu repos में docker नहीं है ; इसके बजाय, यहाँ निर्देश ( docs.docker.com/engine/installation/linux/ubuntulinux ), doo repo का उपयोग करने की सलाह देते हैं। सभी मौजूदा डॉकटर सामग्री निकालें, और सत्यापित करें कि आप सही स्रोत से एक प्राप्त कर रहे हैं: apt-cache policy docker-engine(उपयुक्त url dockerproject.org से होना चाहिए)
michael

2
कैसे एक उपनाम के बारे में:? इस तरह, आप अभी भी पासवर्ड सुरक्षा के साथ sudo का उपयोग करते हैं। उर्फ
डॉकटर

जवाबों:


1136

अच्छी खबर: नया डॉकटर (संस्करण 19.03 (वर्तमान में प्रायोगिक)) एक रूट उपयोगकर्ता का उपयोग करके आ सकने वाली समस्याओं को नकारने में सक्षम होगा। एलिवेटेड परमिशन, रूट और ऐसी कोई भी चीज़ नहीं जो आपके मशीन को खोल सकती है जब आप नहीं चाहते।

[DockerCon 2019] से इस बारे में वीडियो रूटलेस मोड के साथ डॉकिंग डेमन को हार्ड करना

जड़विहीन डॉकर मोड में कुछ कैविट्स

डॉकर इंजीनियरों का कहना है कि रूट रहित मोड को डॉकर इंजन सुविधाओं के पूर्ण सूट के लिए प्रतिस्थापन नहीं माना जा सकता है। रूटलेस मोड में कुछ सीमाएं शामिल हैं:

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

डॉक 19.3 के रूप में यह अप्रचलित है (और ज़रूरत से ज़्यादा खतरनाक है):

इस बारे में कहने के लिए docker मैनुअल में यह है:

गैर-रूट एक्सेस देना

Docker डेमन हमेशा रूट उपयोगकर्ता के रूप में चलता है, और Docker संस्करण 0.5.2 के बाद से, docker डेमन एक TCP पोर्ट के बजाय एक यूनिक्स सॉकेट से जुड़ जाता है। डिफ़ॉल्ट रूप से कि यूनिक्स सॉकेट उपयोगकर्ता रूट के स्वामित्व में है, और इसलिए, डिफ़ॉल्ट रूप से, आप इसे sudo के साथ एक्सेस कर सकते हैं।

संस्करण 0.5.3 में शुरू, यदि आप (या आपका डॉकटर इंस्टॉलर) एक यूनिक्स समूह बनाते हैं, जिसे डॉकर कहा जाता है और उपयोगकर्ताओं को इसमें जोड़ा जाता है, तो डॉक डेमॉन तब शुरू होता है जब यूनिक्स सॉकेट रीड / राइट के स्वामित्व को डैक समूह द्वारा शुरू कर देता है। । Docker daemon को हमेशा रूट उपयोगकर्ता के रूप में चलना चाहिए, लेकिन यदि आप docker समूह में उपयोगकर्ता के रूप में docker क्लाइंट चलाते हैं तो आपको सभी क्लाइंट कमांड में sudo जोड़ने की आवश्यकता नहीं है। 0.9.0 तक, आप यह निर्दिष्ट कर सकते हैं कि डॉक के अलावा अन्य समूह को -G विकल्प के साथ यूनिक्स सॉकेट का मालिक होना चाहिए।

चेतावनी: docker समूह (या -G के साथ निर्दिष्ट समूह) मूल-समतुल्य है; देख डोकर Daemon हमला भूतल विवरण और पर इस ब्लॉग पोस्ट क्यों हम न दें गैर-रूट उपयोगकर्ताओं CentOS, Fedora, या RHEL में डोकर चलाने (धन्यवाद माइकल-एन)।

GitHub पर प्रायोगिक रूटलेस मोड की हालिया रिलीज़ में , इंजीनियरों ने रूटलेस मोड का उल्लेख किया है जो उपयोगकर्ता_namespaces (7), mount_namespaces (7), network_namespaces (7) का उपयोग करके अनपेक्षित उपयोगकर्ता के रूप में डॉकर्ड चलाने की अनुमति देता है।

उपयोगकर्ताओं को dockerd के बजाय dockerd-rootless.sh चलाने की आवश्यकता है।

$ dockerd-rootless.sh --experimental

रूटलेस मोड प्रयोगात्मक होने के कारण, उपयोगकर्ताओं को हमेशा doexd-rootless.sh को –experimental के साथ चलाने की आवश्यकता होती है।


पढ़ने के लिए महत्वपूर्ण: लिनक्स के लिए स्थापना के बाद के चरण (यह डॉकर डेमन अटैक सरफेस विवरण से भी लिंक करता है )।

डॉकर को एक गैर-रूट उपयोगकर्ता के रूप में प्रबंधित करें

डोकर डेमॉन एक टीसीपी पोर्ट के बजाय एक यूनिक्स सॉकेट से बांधता है। डिफ़ॉल्ट रूप से कि यूनिक्स सॉकेट उपयोगकर्ता रूट के स्वामित्व में है और अन्य उपयोगकर्ता केवल sudo का उपयोग करके इसे एक्सेस कर सकते हैं। डोकर डेमॉन हमेशा रूट उपयोगकर्ता के रूप में चलता है।

यदि आप doo कमांड का उपयोग करते समय sudo का उपयोग नहीं करना चाहते हैं, तो doix नामक एक यूनिक्स समूह बनाएं और उसमें उपयोगकर्ताओं को जोड़ें। जब डॉकटर डेमॉन शुरू होता है, तो यह यूनिक्स सॉकेट के स्वामित्व को रीडर्स समूह द्वारा पढ़ा / लिखने योग्य बनाता है।


  • यदि यह पहले से मौजूद नहीं है तो docker समूह जोड़ें:

    sudo groupadd docker
    
  • कनेक्टेड उपयोगकर्ता "$ USER" को डॉकटर समूह में जोड़ें। यदि आप अपने वर्तमान उपयोगकर्ता का उपयोग नहीं करना चाहते हैं तो अपने पसंदीदा उपयोगकर्ता से मिलान करने के लिए उपयोगकर्ता नाम बदलें:

    sudo gpasswd -a $USER docker
    
  • newgrp dockerसमूहों में परिवर्तन को सक्रिय करने के लिए या तो एक लॉग आउट करें या लॉग आउट करें।

  • आप उपयोग कर सकते हैं

    docker run hello-world
    

    जाँच करें कि क्या आप बिना sudo के docker चला सकते हैं।


3
हाँ, लेकिन हर विशेषाधिकारित प्रक्रिया से शोषण की संभावनाएं खुलती हैं। क्या ऑपरेटिंग सिस्टम में डीको हुकिंग वास्तव में विशेषाधिकारों के स्तर को अनिवार्य करता है?
मैट

3
newgrp dockerमेरे लिए काम नहीं किया, मुझे लॉग आउट करना पड़ा।
लोलमॉस - एंड्री मिखायलोव

43
यह इंगित करने योग्य है कि यह उस उपयोगकर्ता को अप्रतिबंधित, गैर-पासवर्ड संरक्षित रूट एक्सेस देता हैयहां भेद्यता का
क्रिस फोस्टर

2
इस परिवर्तन को करने के लिए आपको docker daemon को पुनः आरंभ करने की आवश्यकता नहीं है !! बस उपयोगकर्ता है कि आपने अभी लॉग-आउट जोड़ा है
टॉमी

4
यदि आप उपयोग करते हैं docker login, तो आप पा सकते हैं कि .dockerफ़ोल्डर आपके होम फ़ोल्डर में बनाया गया है root। इस प्रकार आप इस चेतावनी का सामना करेंगे जब docker कमांड चलेंगे WARNING: Error loading config file:/home/myuser/.docker/config.json - stat /home/myuser/.docker/config.json: permission denied:। मैं अपने उपयोगकर्ता के किए गए .dockerफ़ोल्डर तो जैसे sudo बिना सुलभ: sudo chgrp -hR docker ~/.docker && sudo chown -R myuser ~/.dockerchgrpहालांकि मदद करने के लिए नहीं लगता था, तो शायद मैं केवल chown कदम की सिफारिश करनी चाहिए।
बिर्चलैब्स

202

बिना डॉक कमांड को चलाने के लिए sudo, आपको अपने उपयोगकर्ता (जिसके पास रूट विशेषाधिकार हैं) को डॉक समूह में जोड़ने की आवश्यकता है। इसके लिए निम्न कमांड चलाएँ:

 sudo usermod -aG docker $USER

अब, उपयोगकर्ता लॉगआउट करें फिर लॉगिन करें। यह समाधान उचित स्थापना प्रक्रिया के साथ यहां अच्छी तरह से समझाया गया है


14
उपयोगकर्ता को समूह में जोड़ने के बाद, इस कमांड को चलाएँ: sg
group_name

4
इस परिवर्तन के लिए आपको OS को पुनरारंभ करने की आवश्यकता नहीं है! कि सभी चल रहे कंटेनर बम होगा! बस उपयोगकर्ता के पास है कि आपने अभी लॉग आउट किया है।
टॉमी

5
यह कैसे अन्य उत्तर में "sudo gpasswd -a $ {USER} docker" से भिन्न है? अगर बिल्कुल ...
एशले ऐटकेन

9
क्या आप डॉक्स द्वारा दी गई चेतावनी को जोड़ सकते हैं: "डॉकटर ग्रुप [...] रूट-समतुल्य है", इसलिए लोगों के पास इसके बारे में सोचने का मौका है
मूरमेल

2
2 साल पुराने स्वीकृत उत्तर के समान प्रभाव, लेकिन सुरक्षा जोखिमों के बारे में चेतावनियों के बिना
Gert van den Berg

56

वह तंत्र जिसके द्वारा उपयोगकर्ता को समूह में जोड़ने के dockerलिए docker चलाने की अनुमति मिलती है, docker के सॉकेट तक पहुँच प्राप्त करता है /var/run/docker.sock। यदि इसमें मौजूद फाइल सिस्टम /var/runको ACLs के साथ आरोहित किया गया है, तो इसे ACL के माध्यम से भी प्राप्त किया जा सकता है।

sudo setfacl -m user:$USER:rw /var/run/docker.sock

मैं केवल पूर्णता के लिए इसे शामिल कर रहा हूं।

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

चेतावनी 1 : यह एक ही है rootके रूप में जोड़ने तुल्यता usernameके लिए dockerसमूह। आप अभी भी एक कंटेनर शुरू कर सकते हैं rootजिसमें मेजबान फाइलसिस्टम की पहुंच है।

चेतावनी 2 : ACLs समूह-आधारित सुरक्षा की तुलना में सुरक्षा ऑडिट के लिए अधिक कठिन हैं। संभवत: एसीएल से बचें यदि संभव हो तो इसके बजाय आप समूहों का उपयोग कर सकते हैं, कम से कम ऑडिट-प्रासंगिक वातावरण में।


5
इसने 16.04
एडिब

यह वही है जो मुझे चाहिए, अन्य उत्तर, उपयोगकर्ता को रूट अनुमति की आवश्यकता होती है। बहुत बहुत धन्यवाद!
मृणाल सौरभ

1
बहुत बेहतर तरीका imo। समूह कर्ता जड़-समतुल्य है और यह हमेशा खतरे का संकेत है। और मुझे इस एक फ़ाइल का स्वामित्व लेने में कोई असुविधा नहीं दिखती है।
ज़ेरुस

5
@Xerus अगर मैं सही ढंग से समझूं, तो जो कोई भी इस सॉकेट को लिख सकता है , उसे रूट-समतुल्य विशेषाधिकार मिल सकते हैं । तो किसी को ACL के माध्यम से इस सॉकेट तक पहुंच प्रदान करने का वही सुरक्षा प्रभाव पड़ता है जो उस व्यक्ति को docker समूह में जोड़ने का होता है।
पाओलो एबरमन

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