چگونه می توانم از docker بدون سودو استفاده کنم؟


به جواب پذیرفته شده بروید




در صفحات اسناد داکر ، تمام دستورات مثال بدون sudo مانند این نمایش داده می شود :

 docker ps
 

در اوبونتو ، باینری خوانده می شود docker.io . همچنین بدون سودو کار نمی کند:

 sudo docker.io ps
 

چگونه می توان Docker را پیکربندی کرد تا نیازی به پیشوند هر دستور Docker با سودو نباشد؟


789









3 :تعداد پاسخها


خبر خوب: داکر جدید (نسخه 19.03 (در حال حاضر آزمایشی)) قادر خواهد بود بدون ریشه منکر مشکلاتی که با استفاده از یک کاربر روت ایجاد می شود ، بدون ریشه عمل کند. با مجوزهای زیاد ، ریشه و هر چیز دیگری که ممکن است دستگاه شما را باز کند ، دیگر نمی خواهید اشتباه بگیرید.

ویدئویی درباره این مورد از [DockerCon 2019] Daemon hardening Docker با حالت Rootless

چند Caveats به حالت Docker بدون ریشه

مهندسان داکر می گویند که حالت ریشه ای نمی تواند جایگزینی برای مجموعه کامل ویژگی های موتور داکر باشد. برخی از محدودیت های حالت بی ریشه عبارتند از:

  • کنترل منابع cgroups ، پروفایل های امنیتی apparmor ، پاسگاه / بازگرداندن ، شبکه های روی هم و غیره روی حالت ریشه کار نمی کنند.
  • قرار گرفتن درگاه از ظروف در حال حاضر به فرایند دستیاری پنچر دستی نیاز دارد.
  • فقط حواله های مبتنی بر اوبونتو سیستم های پوششی را در حالت ریشه پشتیبانی می کنند.
  • حالت Rootless در حال حاضر فقط برای ساختهای شبانه ارائه شده است که ممکن است به اندازه گذشته شما پایدار نباشد.

در مورد docker 19.3 این منسوخ شده است (و خطرناکتر از آن است):

دستی کارگر بارانداز این است که در مورد آن می گویند:

دسترسی غیر ریشه ای

دامون docker همیشه به عنوان کاربر root اجرا می شود و از آنجا که نسخه Docker نسخه 0.5.2 آن ، دامون docker به جای درگاه TCP به یک سوکت یونیکس متصل می شود. به طور پیش فرض آن سوکت یونیکس متعلق به ریشه کاربر است و بنابراین به طور پیش فرض می توانید با sudo به آن دسترسی پیدا کنید.

با شروع از نسخه 0.5.3 ، اگر شما (یا نصب کننده Docker خود) یک گروه یونیکس به نام docker ایجاد کرده و کاربران را به آن اضافه کنید ، سپس docker daemon مالکیت سوکت یونیکس را با شروع داعش توسط گروه docker خواندن / قابل نوشتن خواهد کرد. . docker daemon باید همیشه به عنوان کاربر root اجرا شود ، اما اگر مشتری docker را به عنوان کاربر در گروه docker اجرا کنید ، دیگر لازم نیست sudo را به تمام دستورات مشتری اضافه کنید. مطابق با 0.9.0 ، می توانید گروهی غیر از docker را انتخاب کنید که دارای سوکت یونیکس با گزینه -G باشد.

هشدار: گروه docker (یا گروه مشخص شده با -G) معادل ریشه است. به جزئیات Docker Daemon Attack Surface و این وبلاگ در مورد چرا ما اجازه نمی دهیم که کاربران غیر ریشه Docker را در CentOS ، Fedora یا RHEL اجرا کنند (با تشکر از میشل-ن).

در نسخه اخیر حالت آزمایشی بدون ریشه در GitHub ، مهندسان ذکر کرده اند که حالت ریشه بدون امکان استفاده از dockerd به عنوان یک کاربر غیرمستقیم ، با استفاده از مکان های user_names (7) ، mount_namespaces (7) ، network_namespaces (7) امکان پذیر است.

کاربران باید به جای dockerd dockerd-rootless.sh را اجرا کنند.

 $ dockerd-rootless.sh --experimental
 

از آنجا که حالت Rootless تجربی است ، کاربران باید همیشه dockerd-rootless.sh را با –experimental اجرا کنند.


مهم است که بخوانید: مراحل پس از نصب برای لینوکس (به جزئیات Docker Daemon Attack Surface Surface نیز پیوند دارد ).

Docker را به عنوان یک کاربر غیر ریشه مدیریت کنید

شبح داکر به جای درگاه TCP به یک سوکت یونیکس متصل می شود. به طور پیش فرض ، سوکت یونیکس متعلق به ریشه کاربر است و سایر کاربران فقط با استفاده از sudo می توانند به آن دسترسی پیدا کنند. دامون docker همیشه به عنوان کاربر اصلی کار می کند.

اگر نمی خواهید در هنگام استفاده از دستور docker از sudo استفاده کنید ، یک گروه Unix به نام docker ایجاد کنید و کاربران را به آن اضافه کنید. با شروع demoner daemon ، مالکیت سوکت یونیکس توسط گروه docker قابل خواندن / نوشتن است.


  • اگر از قبل وجود ندارد گروه docker را اضافه کنید:

     sudo groupadd docker
     
  • کاربر متصل "$ USER" را به گروه docker اضافه کنید. اگر نمی خواهید از کاربر فعلی خود استفاده کنید ، نام کاربری را تغییر دهید تا با کاربر مورد نظر شما مطابقت داشته باشد:

     sudo gpasswd -a $USER docker
     
  • newgrp docker برای فعال کردن تغییرات در گروهها ، یا انجام یک کار یا ورود به سیستم کنید.

  • شما می توانید استفاده کنید

     docker run hello-world
     

    برای بررسی اینکه آیا می توانید docker را بدون سودو اجرا کنید یا خیر.


1164



برای اجرای دستور docker بدون sudo ، باید کاربر خود (که دارای امتیازات اصلی است) را به گروه docker اضافه کنید. برای اجرای این دستور زیر:

  sudo usermod -aG docker $USER
 

اکنون ، ورود به سیستم کاربر را داشته و دوباره وارد سیستم شوید. این راه حل در اینجا با فرایند نصب مناسب توضیح داده شده است.


217



مکانیزمی که با اضافه کردن کاربر به گروه ، docker مجوز اجرای docker را می دهد ، دسترسی به سوکت docker است /var/run/docker.sock . اگر سیستم فایل موجود /var/run در آن با ACL ها نصب شده باشد ، این کار را می توان از طریق ACL نیز بدست آورد.

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

من فقط برای کامل بودن از جمله اینها هستم

به طور کلی ، من توصیه می کنم که هر زمان که گزینه مناسبی مبتنی بر گروه ها باشد ، از ACL ها اجتناب کنید: اگر امتیازات یک سیستم فقط با نگاه کردن به عضویت در گروه قابل درک باشد ، بهتر است. نیاز به اسکن سیستم پرونده برای ورودی های ACL به منظور درک امتیازات سیستم ، یک فشار اضافی برای ممیزی های امنیتی است.

هشدار 1 : این root مساوی است با اضافه کردن username به docker گروه. هنوز هم می توانید یک کانتینر را به روشی شروع کنید که root به سیستم فایل میزبان دسترسی داشته باشد.

هشدار 2 : ACL ها برای ممیزی های امنیتی از امنیت مبتنی بر گروه به طور قابل توجهی مشکل تر هستند. احتمالاً در صورت امکان از ACL ها جلوگیری کنید ، حداقل در محیطهای مربوط به حسابرسی.


62



انتشارات مرتبط


چگونه می توانم با استفاده از میانبر صفحه کلید ، بدون امتیاز سرپرست ، تعلیق کنم؟

چگونه رمز اصلی را تنظیم کنم تا بتوانم به جای sudo از su استفاده کنم؟ [تکثیر]

چگونه می توان خطای شکسته sudo - sudo: تجزیه در / etc / sudoers را در نزدیکی خط 23 حل کرد؟ [تکثیر]

چگونه می توان فرآیندی را که "sudo kill -9" می تواند بدون راه اندازی مجدد بکشد ، کشت؟

چگونه اجازه دهید بدون اینکه بخواهید رمزعبور را با استفاده از sudo بخواهید اجرا کنید؟

چگونه می توان برنامه های کاربردی را بدون امتیازات سودو ساخت؟

چگونه می توان Ubuntu را بدون استفاده از Synaptic یا Keryx به صورت آفلاین به روز کرد؟

چگونه می توانم رمز sudo را تعیین کنم؟

من می توانم از sudo استفاده کنم اما به دلیل خرابی در تأیید رمز عبور ، نمی توانم از su استفاده کنم ، آیا نباید هر دو یک رمز عبور یکسان باشند؟ [تکثیر]

امکان تغییر پرونده در پوشه خانگی بدون سودو وجود ندارد

[docker] سوال برچسب


چگونه می توانم یک فایل .deb را از طریق خط فرمان نصب کنم؟

دستورالعمل لیست تمام کاربران؟ و چگونه کاربران را اضافه ، حذف ، اصلاح کنیم؟

چگونه می توان نسخه های قدیمی هسته را پاک کردم تا منوی بوت را تمیز کنم؟

چگونه می توان با استفاده از دستور "tar" پرونده ها را به پوشه دیگری استخراج کرد؟

چگونه روند کار را بعد از پایان جلسه ssh ادامه دهیم؟

چگونه یک دایرکتوری غیر خالی در ترمینال حذف شود؟

چگونه یک فهرست را از طریق خط فرمان تغییر نام دهم؟

چگونه می توانم به صورت بازگشتی تمام پرونده های یک برنامه افزودنی خاص را در فهرست فعلی حذف کنم؟

چگونه می توانم وابستگی های برآورده نشده پس از افزودن PPA را برطرف کنم؟