
kali-linux-docker
توفر صورة دوكر كالي لينكس هذه تثبيتًا أساسيًا ضئيلًا لأحدث إصدار من توزيعة كالي لينكس المتدحرجة (Kali Linux Rolling Distribution). لا توجد أدوات مضافة إلى هذه الصورة، لذا ستحتاج إلى تثبيتها بنفسك. للاطلاع على تفاصيل حول الحزم الشاملة لكالي لينكس، تفضل بزيارة https://www.kali.org/news/kali-linux-metapackages/
Docker Hub: https://hub.docker.com/r/nu11secur1ty/kali-linux-docker
نظرًا لتمرير خيار --squash إلى برنامج خادم دوكر (docker daemon)، إذا لم تكن الميزات التجريبية
مفعّلة في الخادم لديك، فسيفشل نص البرنامج النصي build.sh.
على كالي، يتم ذلك عبر جعل الملف /etc/docker/daemon.json يحوي المحتوى التالي:
{
"experimental": true
}
ملاحظة: هذا مطلوب فقط بالنسبة لنا في Offensive Security لتقليل حجم الصورة عندما ندفع صورة جديدة إلى Docker Hub.
إذا كنت تبني الصورة للاستخدام الشخصي، يمكنك إزالة خيار --squash من ملف build.sh
Tue May 21 13:59:06 EDT 2019
من الواضح أنه لتشغيل هذا، تحتاج إلى تثبيت Docker. بالنسبة لدوكر على OSX يمكنك استخدام brew، بينما في معظم التوزيعات الأخرى، يمكنك تثبيته باستخدام مدير الحزم المحلي. بمجرد التثبيت والإعداد، يصبح الأمر مجرد سحب صورتنا من مستودع دوكر:
nu11secur1ty:~ # docker pull nu11secur1ty/kali-linux-docker
nu11secur1ty:~ # docker run -t -i nu11secur1ty/kali-linux-docker /bin/bash
root@7e2a35940eff:/# apt update
root@7e2a35940eff:/# apt dist-update
root@7e2a35940eff:/# apt update && apt install metasploit-framework
root@7e2a35940eff:/# apt update && apt install git
root@7e2a35940eff:/# apt update && apt install vim
root@7e2a35940eff:/# service postgresql start
root@7e2a35940eff:/# ss -ant
root@7e2a35940eff:/# msfdb init
root@7e2a35940eff:/# msfconsole
git clone https://github.com/nu11secur1ty/sqliv2.git
cd sqliv2
. الاستخدام link:sqliv2
. التنزيل:
git clone https://github.com/nu11secur1ty/nu11secur1ty.git
link:nu11secur1ty
إذا كنت ترغب في بناء صور كالي الخاصة بك بدلاً من استخدام صورنا الجاهزة، فقد سهّلنا الأمر لك عبر النص البرمجي التالي المستضاف على Kali Linux Docker على Github. من الأفضل بناء هذه الصور على نظام Linux أو أي نظام تشغيل آخر يمكنه استخدام debootstrap.
#!/bin/bash
# Install dependencies (debootstrap)
sudo apt-get install debootstrap
# Fetch the latest Kali debootstrap script from git
curl "https://gitlab.com/kalilinux/packages/debootstrap.git;a=blob_plain;f=scripts/kali;hb=HEAD" > kali-debootstrap &&\
sudo debootstrap kali ./kali-root http://http.kali.org/kali ./kali-debootstrap &&\
# Import the Kali image into Docker
sudo tar -C kali-root -c . | sudo docker import - kalilinux/kali &&\
sudo rm -rf ./kali-root &&\
# Test the Kali Docker Image
docker run -t -i kalilinux/kali cat /etc/debian_version &&\
echo "Build OK" || echo "Build failed!"


توجد أوامر docker exec التي يمكن استخدامها للاتصال بحاوية تعمل بالفعل.
docker exec -it <container name> /bin/bash للحصول على قوقعة bash داخل الحاويةdocker exec -it <container name> <command> لتنفيذ أي أمر تحدده داخل الحاوية.الطريقة الصحيحة لتشغيل أمر في حاوية هي: docker-compose run <container name> <command>. على سبيل المثال، للحصول على قوقعة داخل حاوية الويب الخاصة بك قد تشغّل docker-compose run web /bin/bash
لتشغيل سلسلة أوامر، يجب عليك لفّها في أمر واحد باستخدام قوقعة. على سبيل المثال: docker-compose run <name in yml> sh -c '<command 1> && <command 2> && <command 3>'
في بعض الحالات قد ترغب في تشغيل حاوية غير معرّفة في ملف docker-compose.yml، على سبيل المثال لاختبار إعداد حاوية جديد. استخدم docker run لبدء حاوية جديدة بصورة معينة: docker run -it <image name> <command>
يقبل أمر docker run خيارات سطر أوامر لتحديد وحدات التخزين المثبتة، ومتغيرات البيئة، ودليل العمل، والمزيد.
الحصول على قوقعة داخل حاوية البناء لتنفيذ أي عمليات هو أبسط نهج. كل ما عليك هو الوصول إلى حاوية cli التي عرّفناها في ملف compose. الأمر docker-compose -f build.yml run cli سيشغّل نسخة من صورة phase2/devtools-build ويشغّل لك قوقعة bash. ومن هناك يمكنك استخدام drush أو grunt أو أي شيء تشتهيه نفسك.
مفهوم آخر في عالم دوكر هو بدء حاوية لتشغيل أمر واحد والسماح للحاوية بالتوقف عند اكتمال الأمر. هذا رائع إذا كنت تشغّل الأوامر بشكل غير متكرر، أو لا تريد أن يكون لديك حاوية أخرى تعمل باستمرار. كما أن تشغيل أوامرك على الحاويات بهذه الطريقة مناسب تمامًا للأوامر التي لا تنشئ أي ملفات على نظام الملفات، أو إذا أنشأت ملفات، فإنها تكتبها على وحدات التخزين المثبتة داخل الحاوية.
حاوية drush المعرّفة في ملف المثال build.yml هي حاوية مصممة خصيصًا لتشغيل drush في دليل عمل واحد مع أخذ الأوامر كوسائط فقط. يتيح لنا هذا النهج توفير آلية سريعة وسهلة لتشغيل أي أمر drush، مثل sqlc وcache-rebuild وغيرها، في موقع Drupal الخاص بك بسرعة وسهولة.
هناك أيضًا أمثلة أخرى لحاوية أوامر grunt مشابهة لـ drush وحاوية أوامر أكثر تحديدًا حول تشغيل أمر واحد، drush make، لبناء الموقع من ملف make/التبعيات.
سيتم تثبيت مجلد webapp على المضيف في جذر apache الخاص بالحاوية
docker system prune
docker system prune -a
استخدم أمر docker images مع العلامة -a لتحديد معرف الصور التي تريد إزالتها. سيعرض لك هذا كل صورة، بما في ذلك طبقات الصور الوسيطة. عندما تحدد الصور التي تريد حذفها، يمكنك تمرير معرفها أو وسمها إلى docker rmi:
docker images -a
docker rmi Image Image
تتكون صور دوكر من طبقات متعددة. الصور المعلقة هي طبقات لا علاقة لها بأي صور موسومة. لم تعد تخدم أي غرض وتستهلك مساحة القرص. يمكن تحديدها بإضافة علامة الفلتر، -f بقيمة dangling=true إلى أمر docker images. عندما تتأكد من رغبتك في حذفها، يمكنك استخدام أمر تنظيف الصور docker images purge:
ملاحظة
If you build an image without tagging it, the image will appear on the list of dangling images because it has no association with a tagged image. You can avoid this situation by providing a tag when you build, and you can retroactively tag an images with the docker tag command.
docker images -f dangling=true
docker images purge
يمكنك العثور على جميع الصور التي تطابق نمطًا معينًا باستخدام مزيج من docker images و grep. بمجرد أن تصبح راضيًا، يمكنك حذفها باستخدام awk لتمرير المعرفات إلى docker rmi. لاحظ أن هذه الأدوات غير مزودة من قبل Docker وليست متاحة بالضرورة على جميع الأنظمة:
docker images -a | grep "pattern"
docker images -a | grep "pattern" | awk '{print $3}' | xargs docker rmi
يمكن سرد جميع صور دوكر على النظام بإضافة -a إلى أمر docker images. بمجرد التأكد من رغبتك في حذفها جميعًا، يمكنك إضافة العلامة -q لتمرير معرف الصورة إلى docker rmi:
docker images -a
docker rmi $(docker images -a -q)
إذا كنت تعرف عند إنشاء حاوية أنك لن ترغب في إبقائها بعد الانتهاء، يمكنك تشغيل docker run --rm لحذفها تلقائيًا عند خروجها.
docker run --rm image_name
يمكنك تحديد الحاويات باستخدام docker ps -a وتصفيتها حسب حالتها: created أو restarting أو running أو paused أو exited. لمراجعة قائمة الحاويات المنتهية، استخدم العلامة -f للتصفية بناءً على الحالة. عندما تتحقق من رغبتك في إزالة تلك الحاويات، استخدم -q لتمرير المعرفات إلى أمر docker rm.
docker ps -a -f status=exited
docker rm $(docker ps -a -f status=exited -q)
يمكن دمج عوامل تصفية دوكر بتكرار علامة التصفية مع قيمة إضافية. ينتج عن ذلك قائمة بالحاويات التي تحقق أيًا من الشرطين. على سبيل المثال، إذا أردت حذف جميع الحاويات الموسومة إما Created (حالة يمكن أن تنتج عند تشغيل حاوية بأمر غير صالح) أو Exited، يمكنك استخدام عاملَي تصفية:
docker ps -a -f status=exited -f status=created
docker rm $(docker ps -a -f status=exited -f status=created -q)
يمكنك العثور على جميع الحاويات التي تطابق نمطًا معينًا باستخدام مزيج من docker ps و grep. عندما تتأكد من أن لديك القائمة التي تريد حذفها، يمكنك استخدام awk و xargs لتزويد المعرف إلى docker rmi. لاحظ أن هذه الأدوات غير مزودة من قبل Docker وليست متاحة بالضرورة على جميع الأنظمة:
docker ps -a | grep "pattern”
docker ps -a | grep "pattern" | awk '{print $3}' | xargs docker rmi
يمكنك مراجعة الحاويات على نظامك باستخدام docker ps. إضافة العلامة -a ستعرض جميع الحاويات. عندما تتأكد من رغبتك في حذفها، يمكنك إضافة العلامة -q لتزويد المعرفات إلى أمرَي docker stop و docker rm:
docker ps -a
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
إزالة وحدة تخزين واحدة أو أكثر من وحدات التخزين المحددة - Docker 1.9 والإصدارات الأحدث
استخدم أمر docker volume ls لتحديد اسم أو أسماء وحدات التخزين التي ترغب في حذفها. بعد ذلك يمكنك إزالة وحدة تخزين واحدة أو أكثر باستخدام أمر docker volume rm:
docker volume ls
docker volume rm volume_name volume_name
نظرًا لأن الهدف من وحدات التخزين هو الوجود بشكل مستقل عن الحاويات، فعند إزالة حاوية، لا تتم إزالة وحدة التخزين تلقائيًا في الوقت نفسه. عندما توجد وحدة تخزين ولم تعد متصلة بأي حاويات، يطلق عليها وحدة تخزين معلقة (dangling volume). لتحديدها والتأكد من رغبتك في إزالتها، يمكنك استخدام أمر docker volume ls مع عامل تصفية لتحديد النتائج بوحدات التخزين المعلقة. عندما ترضى عن القائمة، يمكنك إزالتها جميعًا باستخدام docker volume prune:
docker volume ls -f dangling=true
docker volume prune
إذا قمت بإنشاء وحدة تخزين بدون اسم، يمكن حذفها في نفس وقت حذف الحاوية باستخدام العلامة -v. لاحظ أن هذا يعمل فقط مع وحدات التخزين غير المسماة. عند إزالة الحاوية بنجاح، يتم عرض معرفها. لاحظ أنه لا يتم ذكر إزالة وحدة التخزين. إذا كانت غير مسماة، تتم إزالتها بصمت من النظام. إذا كانت مسماة، فستبقى موجودة بصمت.
docker rm -v container_name
يغطي هذا الدليل بعض الأوامر الشائعة المستخدمة لإزالة الصور والحاويات ووحدات التخزين مع Docker. هناك العديد من التركيبات والعلامات الأخرى التي يمكن استخدامها مع كل أمر. للحصول على دليل شامل لما هو متاح، راجع وثائق Docker الخاصة بـ docker system prune و docker rmi و docker rm و docker volume rm. إذا كانت هناك مهام تنظيف شائعة تود رؤيتها في الدليل، فيرجى السؤال أو تقديم اقتراحات في التعليقات.

