السلام عليكم ورحمة الله وبركاتة.
عندما تثبت دوكر سوف يحتاج صلاحيات كامله في النظام(root)، وهذا يسبب مشكله امنيه لان الحاويات و خدمة(daemon) دوكر ستعمل كرووت.
واذا تم اختراقها سيكون للمخترق وصول كامل للنظام، ولا يوجد عزل حقيقي للحاويات.
بعد صدور مشروع Podman وهو مصمم بشكل اساسي ليعمل بدون رووت، زاد الضغط على دوكر لدعم الميزه، وهو يدعم شيء من فتره طويله، بحيث تعمل الحاويات كمستخدم عادي لكن خدمة دوكر(daemon)تعمل كرووت, تفاصيل اكثر عن وضع استخدام نطاقات المستخدم هنا
لكن ميزة تشغيل دوكر بدون صلاحيات بالكامل صدرت بشكل تجريبي في ٢٠١٩، وصدرت بشكل كامل في ٢٠٢٠.
وفي هذا الموضوع سوف اشرح كيفية تثبيت دوكر بدون وصول للجذر, هذا موضوع جزء من سلسلة عن برمجية دوكر على أسس.
لماذا Docker بدلا عن Podman
السبب الاكبر لاستخدام دوكر بدلا عن podman هو التوافقية.
فانت لا تحتاج للتعامل مع podman وتعديل اشياء لانه يختلف من دوكر. هنا هو عبارة عن دوكر بدون رووت.
اذا لا تهمك التوافقيه قد تجد البنيه التحتيه لpodman و عدم اتباعيته لاي شركة بشكل مباشر شيء ممتاز. وايضا انه يسهل عليك تشغيل ملفات k8s فا اذا انت تستخدم k8s كثيرا قد يعجبك podman.
سلبيات تشغيل دوكر بوضع rootless
أكبر سلبيه في هذا الوضع هي الشبكة, وهذه المشاكل ايضا موجودة في podman.
Rootlesskit
بشكل افتراضي دوكر يستخدم شبكة rootlesskit.
لانها الاسرع, بحيث سرعتها تصل الى 30gbitps وتدعم ipv4 و ipv6.
لكن فيها مشكلة كبيره جدا
الحاويات لن يظهر لها ال IP الخارجي للطلب, وكل الطلبات ستظهر من 127.0.0.1
هذه مشكلة كبيرة, خاصه لو مثلا تريد وضع حماية تحد من هجمات حجب الخدمة الموزعة(DDOS) لان كل الطلبات ستظهر من نفس العنوان.
Slirp4netns
هذا الوضع يحل هذه المشكلة, ويظهر العنوان الاصل للطلب.
لكن فيه مشكلتين.
- عدم دعم ipv6
- سرعة ابطئ بمراحل, حوالي 7gbitps
متطلبات مسبقة
تاكد من تثبيت حزم newuidmap newgidmap وانه هناك 65,536 id فرعي.
id -u
1001
whoami
testuset
grep ^$(whoami): /etc/subuid
testuser:231072:65536
grep ^$(whoami): /etc/subgid
testuser:231072:65536
ماذا تعني هذه الارقام
الارقام بعد اسم المستخدم تعني هذا
- الرقم الاول هو اول id مسموح للاستخدام
- الارقام بعد : هو كم عدد id لديك
فمثلا يبدء 231072, معناه id 0 هو 231072 و id 1000 يعني 241072
ثبت حزمة dbus-user-session و fuse-overlayfs
ينصح باستخدام كيرنل 5.11 او احدث، او كيرنل اوبونتو
تثبيت docker rootless
أتبع شرح تثبيت دوكر العادي مع عدم تمكين المستخدم استخدام دوكر بدون sudo
ثم قم بتثبيت حزمه docker-ce-rootless-extras عبر مدير الحزم الخاص بتوزيعتك.
ثم ثبته عبر هذا الامر dockerd-rootless-setuptool.sh install
اخر الامر سيكون هناك مكتوب امرين export=xxx
قم بنسخهم ولصقهم اخر ملف .bashrc او اذا تستخدم ZSH, ملف .zshrc
قم بتسجيل الخروج ثم تسجيل الدخول.
بعد التثبيت
تشغيل daemon دوكر rootless
systemctl --user start docker
تشغيل دوكر rootless عند الاقلاع
systemctl --user enable docker
sudo loginctl enable-linger $(whoami)
سماح بتشغيل الحاويات ب port اقل من 1000
استخدام docker socket api مع docker rootless
في حاله لديك اي حاوية تستخدم socket api (يعني تستخدم /var/run/docker.sock
قم باستخدام ال user socket يعني مثلا لحاوية watchtowerr:
version: "3"
services:
watchtower:
image: containrrr/watchtower
volumes:
- $XDG_RUNTIME_DIR/docker.sock:/var/run/docker.sock
متغير $XDG_RUNTIME_DIR هو موقع مجلد home, وبما ان دوكر يعمل كمستخدم عادي سيكون ال socket داخل نفس المجلد.
المصادر
ترخيص
هذا الموضوع يتبع ترخيص جميع مواضيع أسس هو CC-BY-SA 4.0
