سؤال كيف يمكنني استخدام عامل ميناء دون sudo؟


في صفحات وثائق Docker ، يتم عرض جميع أوامر الأمثلة بدون sudo، مثل هذه:

docker ps

على Ubuntu ، يتم استدعاء الثنائي docker.io. كما أنها لا تعمل دون sudo:

sudo docker.io ps

كيف يمكنني تكوين Docker بحيث لا أحتاج إلى بادئة كل أمر Docker مع sudo؟


637
2018-06-06 08:17


الأصل


لا تنس أن تمكّن ufw؛) - Rinzwind
على أوبونتو 14.04 هناك أيضا "عامل ميناء" ثنائي. - anatoly techtonik
anatolytechtonik أنا أيضا استخدمت "عامل ميناء" بدلاً من "docker.io" في Ubuntu 14.04 LTS - Nabin
التثبيت الموصى به هو ليس  عامل الميناء في التقصير ubuntu repos؛ بدلا من ذلك ، تعليمات هنا ( docs.docker.com/engine/installation/linux/ubuntulinux ) ، نوصي باستخدام ريبو عامل ميناء. أزل جميع العناصر الموجودة في أداة رسو السفن ، وتحقق من حصولك على العنصر من المصدر الصحيح: apt-cache policy docker-engine (يجب أن يكون url url من dockerproject.org) - michael
ماذا عن الاسم المستعار:؟ بهذه الطريقة ، ما زلت تستخدم sudo ، مع الحماية بكلمة مرور. الاسم المستعار عامل ميناء = "sudo docker" - Andrej Panjkov


الأجوبة:


ال دليل قفص الاتهام لديه هذا ليقوله عن ذلك:

منح الوصول غير الجذر

يتم تشغيل daemon docker دائمًا كمستخدم أساسي ، وحيث إن Docker version 0.5.2 ، يقوم daemon docker بربط مأخذ Unix بدلاً من منفذ TCP. بشكل افتراضي ، يكون مأخذ يونكس مملوكًا بجذر المستخدم ، ولذلك ، بشكل افتراضي ، يمكنك الوصول إليه باستخدام sudo.

بدءًا من الإصدار 0.5.3 ، إذا قمت بإنشاء (أو مُثبِّت Docker) مجموعة Unix تسمى docker وأضفت المستخدمين إليها ، فسيقوم موظف البرنامج الخفي بامتلاك مقبس Unix للقراءة / الكتابة من قبل مجموعة عمال المرسِل عند بدء تشغيل daemon . يجب تشغيل daemon dockon دائمًا كمستخدم أساسي ، ولكن إذا قمت بتشغيل عميل docker كمستخدم في مجموعة عامل الشحن ، فلن تحتاج إلى إضافة sudo لجميع أوامر العميل. اعتبارًا من 0.9.0 ، يمكنك تحديد أن مجموعة أخرى غير عامل المرسِل يجب أن تملك مقبس Unix مع خيار -G.

تحذير: مجموعة عامل الشحن (أو المجموعة المحددة بـ -G) هي مكافئة الجذر ؛ نرى Docker Daemon Attack Surface details وهذا بلوق على لماذا لا نسمح للمستخدمين غير الجذرين بتشغيل Docker في CentOS أو Fedora أو RHEL  (شكرا مايكل ن).


من المهم قراءتها: خطوات ما بعد التثبيت لنظام التشغيل Linux (كما يربط ل Docker Daemon Attack Surface details).

إدارة Docker كمستخدم غير الجذر

ربط البرنامج الخفي dockon مأخذ توصيل Unix بدلاً من منفذ TCP. بشكل افتراضي ، يكون مأخذ يونكس مملوكًا بجذر المستخدم ويمكن للمستخدمين الآخرين الوصول إليه فقط باستخدام sudo. دائمًا يعمل daemon daemon كمستخدم أساسي.

إذا كنت لا تريد استخدام sudo عند استخدام أمر docker ، فأنشئ مجموعة Unix تسمى docker وأضف مستخدمين إليها. عندما يبدأ daemon docker ، فإنه يجعل ملكية المقابس Unix قراءة / قابلة للكتابة بواسطة مجموعة عامل الشحن.


  • إضافة مجموعة عامل الميناء إذا لم تكن موجودة بالفعل:

    sudo groupadd docker
    
  • إضافة المستخدم المتصل "$ USER" إلى مجموعة عامل الشحن. غيّر اسم المستخدم ليطابق المستخدم المفضل لديك إذا كنت لا تريد استخدام مستخدمك الحالي:

    sudo gpasswd -a $USER docker
    
  • إما أن تفعل newgrp docker أو تسجيل الخروج / في لتنشيط التغييرات على المجموعات.

  • يمكنك استخدام

    docker run hello-world
    

    للتحقق مما إذا كان يمكنك تشغيل عامل ميناء دون sudo.


953
2018-06-06 08:24



أليس هذا هو العمارة الأكثر انعدامًا للإنتاج؟ يجب أن أكون في عداد المفقودين شيء - matt
نعم ، ولكن كل عملية مميزة تفتح إمكانات للاستغلال. هل يرسو عامل الشحن هذا في عمق نظام التشغيل ليحقق بذلك مستوى الامتيازات؟ - matt
newgrp docker لم يعمل لي ، كان علي الخروج. - lolmaus - Andrey Mikhaylov
تجدر الإشارة إلى أن هذا يعطي ذلك المستخدم غير مقيد ، الوصول غير محمي بكلمة مرور الجذر. انظر التفاصيل من الضعف هنا - Chris Foster
لا تحتاج إلى إعادة تشغيل daemon docker ليحدث هذا التغيير !! فقط أطلب من المستخدم أن تقوم فقط بإضافة تسجيل الخروج ثم العودة مرة أخرى - Tommy


لتشغيل الأمر عامل ميناء دون sudo، تحتاج إلى إضافة المستخدم الخاص بك (الذي لديه امتيازات الجذر) إلى مجموعة عامل ميناء. لتشغيل هذا الأمر التالي:

 sudo usermod -aG docker $USER

الآن ، اطلب من المستخدم تسجيل الخروج ثم تسجيل الدخول مرة أخرى. هذا الحل هو موضح جيدا هنا مع عملية التثبيت المناسبة.


153
2018-02-27 19:57



بعد إضافة المستخدم إلى المجموعة ، قم بتشغيل هذا الأمر: sg group_name -c "bash" - madjardi
حقا لا تحتاج إلى إعادة تشغيل نظام التشغيل. فقط الخروج وتسجيل الدخول مرة أخرى. - binW
لا تحتاج إلى إعادة تشغيل نظام التشغيل ليتم إجراء هذا التغيير! من شأنها أن تقصف كل الحاويات الجارية! فقط اطلب من المستخدم أن تقوم فقط بإضافة تسجيل الدخول ثم الدخول. - Tommy
كيف تختلف هذه القيادة عن "sudo gpasswd -a $ {USER} docker" في إجابة أخرى؟ إذا كان على كل حال... - Ashley Aitken
هل يمكن أن تضيف من فضلك التحذير الذي قدمته المستندات: "إن مجموعة عمال الشحن [...] تعادل الجذر" ، لذلك فإن الناس لديهم فرصة للتفكير في الأمر - Murmel


الآلية التي من خلالها إضافة مستخدم إلى مجموعة docker منح إذن لتشغيل عامل ميناء هو الحصول على مأخذ التوصيل من عامل ميناء في /var/run/docker.sock. إذا كان نظام الملفات يحتوي على /var/run تم تركيبه باستخدام ACLs ، ويمكن تحقيق ذلك أيضًا عبر ACL.

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

أنا فقط بما في ذلك هذا من أجل الاكتمال.

بشكل عام ، أوصي بتجنب ACL عندما يتوفر بديل جيد يعتمد على المجموعات: من الأفضل أن يتم فهم الامتيازات الموجودة في النظام من خلال النظر في عضوية المجموعة فقط. يعد الاضطرار إلى فحص نظام الملفات لإدخالات ACL لفهم امتيازات النظام عبئًا إضافيًا لعمليات تدقيق الأمان.

تحذير 1: هذا له نفسه root التكافؤ كإضافة username الى docker مجموعة. لا يزال بإمكانك بدء حاوية بطريقة لديها root الوصول إلى نظام الملفات المضيفة.

تحذير 2: ACLs أكثر صعوبة بشكل ملحوظ لعمليات تدقيق الأمان من الأمان المستند إلى المجموعة. ربما تجنب قوائم ACL إذا أمكن ذلك عندما يمكنك استخدام المجموعات بدلاً من ذلك ، على الأقل في البيئات ذات الصلة بالتدقيق.


25
2017-12-01 16:08



عملت على 16.04 - edib
هذا ما أحتاجه ، إجابات أخرى ، أطلب من المستخدم الحصول على إذن الجذر. شكرا تفعل الكثير! - Mrinal Saurabh
أفضل طريقة أفضل ايمو. عامل ميناء المجموعة هو ما يعادل الجذر وهذا هو دائما علامة على خطر. ولا أرى أي عيب في ملكية هذا الملف. - Xerus
هل يمكنك وصف الأوامر التي يجب تنفيذها من أجل "الحصول على مأخذ التوصيل من عامل ميناء في /var/run/docker.sock"؟ - Yuval Atzmon
Xerus إذا فهمت بشكل صحيح ، يمكن لأي شخص يمكنه الكتابة إلى هذا المقبس الحصول على امتيازات الجذر أيضًا. لذا فإن منح شخص ما حق الوصول إلى هذا المقبس عبر ACL له نفس تأثير الأمان الذي يضيفه ذلك الشخص إلى مجموعة عمال الشحن. - Paŭlo Ebermann