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


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

docker ps

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

sudo docker.io ps

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


637
2018-06-06 08:17


मूल


Ufw सक्षम करने के लिए मत भूलना;) - Rinzwind
उबंटू 14.04 पर वहाँ है बाइनरी भी 'डॉकर'। - anatoly techtonik
@anatolytechtonik मैंने उबंटू 14.04 एलटीएस में 'डॉकर.ओ' के बजाय 'डॉकर' का भी इस्तेमाल किया - Nabin
अनुशंसित स्थापना है नहीं  डिफ़ॉल्ट ubuntu repos में डॉकर; इसके बजाय, यहां निर्देश ( docs.docker.com/engine/installation/linux/ubuntulinux ), डॉकर रेपो का उपयोग करने की सलाह देते हैं। सभी मौजूदा डॉकर सामान हटाएं, और सत्यापित करें कि आप सही स्रोत से एक प्राप्त कर रहे हैं: apt-cache policy docker-engine (apt url dockerproject.org से होना चाहिए) - michael
उपनाम के बारे में कैसे :? इस तरह, आप अभी भी पासवर्ड सुरक्षा के साथ, सूडो का उपयोग करते हैं। ऊर्फ डॉकर = "सुडो डॉकर" - Andrej Panjkov


जवाब:


डॉकर मैनुअल इसके बारे में यह कहना है:

गैर रूट पहुंच देना

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

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

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


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

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

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

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


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

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

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

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

    docker run hello-world
    

    यह जांचने के लिए कि क्या आप सूडो के बिना डॉकर चला सकते हैं।


953
2018-06-06 08:24



क्या यह उत्पादन के लिए सबसे असुरक्षित वास्तुकला नहीं है? मेरा कुछ छूट रहा है - matt
हाँ, लेकिन हर विशेषाधिकार प्रक्रिया शोषण के लिए संभावित खुलती है। क्या डॉकर हुकिंग ऑपरेटिंग सिस्टम में गहराई से विशेषाधिकार के स्तर को वास्तव में जरूरी है? - matt
newgrp docker मेरे लिए काम नहीं किया, मुझे लॉग आउट करना पड़ा। - lolmaus - Andrey Mikhaylov
यह इंगित करने लायक है कि यह उस उपयोगकर्ता को देता है अप्रतिबंधित, गैर-पासवर्ड सुरक्षित रूट पहुंच। के विवरण देखें यहां भेद्यता - Chris Foster
इस परिवर्तन के लिए आपको डॉकर डिमन को पुनरारंभ करने की आवश्यकता नहीं है !! बस उस उपयोगकर्ता को है जिसे आपने अभी लॉग आउट किया है, फिर वापस अंदर - Tommy


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

 sudo usermod -aG docker $USER

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


153
2018-02-27 19:57



समूह में समूह जोड़ने के बाद, यह आदेश चलाएं: sg group_name -c "bash" - madjardi
वास्तव में ओएस को पुनरारंभ करने की आवश्यकता नहीं है। बस लॉगआउट करें और फिर से लॉग इन करें। - binW
इस बदलाव के लिए आपको ओएस को पुनरारंभ करने की आवश्यकता नहीं है! वह सभी चल रहे कंटेनरों पर बम होगा! बस उस उपयोगकर्ता को है जिसे आपने अभी लॉग आउट किया है। - Tommy
यह आदेश दूसरे उत्तर में "सुडो gpasswd -a $ {USER} डॉकर" से अलग कैसे है? अगर सब पर... - Ashley Aitken
क्या आप दस्तावेज़ों द्वारा दी गई चेतावनी जोड़ सकते हैं: "डॉकर समूह [...] रूट समकक्ष है", इसलिए लोगों को इसके बारे में सोचने का मौका मिला है - Murmel


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

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

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

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

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

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


25
2017-12-01 16:08



यह 16.04 को काम किया - edib
यह वही है जो मुझे चाहिए, अन्य उत्तरों के लिए, उपयोगकर्ता को रूट अनुमति की आवश्यकता होती है। बहुत बहुत धन्यवाद! - Mrinal Saurabh
बहुत बेहतर तरीका इमो। समूह डॉकर रूट समकक्ष है और यह हमेशा खतरे का संकेत है। और मुझे इस फाइल के स्वामित्व को लेने का कोई नुकसान नहीं दिख रहा है। - Xerus
क्या आप वर्णन कर सकते हैं कि किस आदेश को निष्पादित किया जाना चाहिए "डॉकर की सॉकेट तक पहुंच प्राप्त करें /var/run/docker.sock"? - Yuval Atzmon
@ एक्सरस अगर मैं सही ढंग से समझता हूं, जो भी इस सॉकेट को लिख सकता है वह भी रूट समकक्ष विशेषाधिकार प्राप्त कर सकता है। इसलिए एसीएल के माध्यम से किसी को इस सॉकेट तक पहुंचने से वही सुरक्षा प्रभाव होता है जो उस व्यक्ति को डॉकर समूह में जोड़ता है। - Paŭlo Ebermann