Docker: أفضل ممارسات أمان الحاويات
آخر تحديث: 2026-08-26
أمان الحاويات ليس اختياريًا — كل طبقة، من الصورة إلى وقت التشغيل، تحتاج إلى تأمين.
1. ما ستتعلمه
- خط أساس أمان CIS Docker Bench
- توقيع الصور والتحقق منها (Docker Content Trust)
- أمان وقت التشغيل (seccomp/AppArmor)
- سياسة إدارة الأسرار
- مبدأ الحد الأدنى من الصلاحيات
2. قصة عن تدقيق أمني
(1) نقطة الألم: 28 تنبيه تدقيق أمني
تلقى فريق تشارلي تقرير تدقيق أمني: 28 تنبيهًا تضمنت "حاويات تعمل كـ root" (خطر عالٍ)، "الصورة تحتوي على 15 ثغرة CVE عالية الخطورة" (خطر عالٍ)، و"أسرار مخزنة في متغيرات البيئة" (خطر متوسط). كانت درجة التدقيق 45 فقط؛ يجب رفعها إلى 80 أو أعلى لتحقيق الامتثال.
(2) نهج منهجي لتأمين الأمان
قاد تشارلي فريقه في معالجة المشكلات واحدة تلو الأخرى: مستخدمون غير root، فحوصات Trivy لإصلاح CVEs، التحول إلى Docker Secrets، واستخدام seccomp لتقييد استدعاءات النظام.
# تأمين الأمان: غير root + صلاحيات دنيا
docker run -d \
--user 1000:1000 \
--cap-drop ALL \
--cap-add NET_BIND_SERVICE \
--security-opt no-new-privileges \
--read-only \
myapp:1.0
(3) النتائج: درجة التدقيق 45←92
بعد التأمين المنهجي، تحسنت درجة التدقيق من 45 إلى 92، وتم حل جميع المشكلات عالية الخطورة.
3. نموذج أمان الحاويات متعدد الطبقات
(1) الأمان متعدد الطبقات
graph TB
L6["6. إدارة الأسرار<br/>Docker Secret / Vault"] --> L5["5. الأمن السيبراني<br/>عزل الشبكة / TLS"]
L5 --> L4["4. أمان وقت التشغيل<br/>seccomp / AppArmor / capabilities"]
L4 --> L3["3. أمان الصور<br/>الفحص / التوقيع / التصغير"]
L3 --> L2["2. أمان Docker Daemon<br/>TLS / صلاحيات المستخدم"]
L2 --> L1["1. أمان المضيف<br/>تأمين نظام التشغيل / تحديث النواة"]
(1) مقارنة مستويات الأمان
| المستوى | إجراءات التأمين | التأثير |
|---|---|---|
| 0 | التكوين الافتراضي | تنبيهات عديدة |
| 1 | غير root + أحدث وسم | أمان أساسي |
| 2 | + فحص الصور + إصدار ثابت | أمان متوسط |
| 3 | + صلاحيات دنيا + seccomp | أمان جيد |
| 4 | + DCT + إدارة الأسرار | أمان عالٍ |
| 5 | + عزل الشبكة + سجلات التدقيق | أمان أقصى |
4. فحص ثغرات الصور
▶ مثال: فحص الصور باستخدام Trivy (الصعوبة: ⭐⭐)
# تثبيت Trivy (Linux)
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh
# فحص صورة بحثًا عن الثغرات
trivy image nginx:1.25-alpine
# فحص مع مرشح الخطورة
trivy image --severity HIGH,CRITICAL nginx:1.25-alpine
# فحص وإخراج JSON
trivy image --format json --output report.json myapp:1.0
nginx:1.25-alpine (alpine 3.19.0)
=========================
Total: 5 (HIGH: 2, CRITICAL: 0)
┌──────────┬────────────┬──────────┬──────────┬─────────────────┐
│ Library │ Vulnerability│ Severity │ Version │ Fixed Version │
├──────────┼────────────┼──────────┼──────────┼─────────────────┤
│ libcurl │ CVE-2023-xxxx│ HIGH │ 8.4.0 │ 8.5.0 │
│ openssl │ CVE-2023-yyyy│ HIGH │ 3.1.3 │ 3.1.4 │
└──────────┴────────────┴──────────┴──────────┴─────────────────┘
▶ مثال: فحص Docker Scout (الصعوبة: ⭐⭐)
# Docker Scout (مدمج في Docker Desktop)
docker scout quickview nginx:latest
# تقرير CVE مفصل
docker scout cves nginx:latest
# مقارنة صورتين
docker scout compare --from nginx:1.24 --to nginx:1.25
5. مبدأ الحد الأدنى من الصلاحيات
(1) قدرات Linux (Capabilities)
| القدرة | الوظيفة | المتطلبات الشائعة |
|---|---|---|
NET_BIND_SERVICE |
الارتباط بمنافذ <1024 | خدمات الويب (80/443) |
NET_RAW |
حزم الشبكة الخام | ping / تصحيح الشبكة |
CHOWN |
تغيير مالك الملف | إدارة الملفات |
SETUID / SETGID |
تبديل المستخدم | بعض أدوات النظام |
ALL |
جميع القدرات | ❌ لا تستخدم |
▶ مثال: --cap-drop للحد الأدنى من الصلاحيات (الصعوبة: ⭐⭐⭐)
# إسقاط جميع القدرات، وإضافة الضرورية فقط
docker run -d \
--name secure-app \
--cap-drop ALL \
--cap-add NET_BIND_SERVICE \
--security-opt no-new-privileges \
-p 80:8080 \
myapp:1.0
| المعامل | الوظيفة |
|---|---|
--cap-drop ALL |
إزالة جميع قدرات Linux |
--cap-add NET_BIND_SERVICE |
إضافة القدرة على الارتباط بالمنافذ المنخفضة فقط |
--security-opt no-new-privileges |
منع تصعيد الصلاحيات (setuid/setgid) |
--read-only |
نظام ملفات للقراءة فقط (يتطلب tmpfs) |
--privileged يمنح الحاويات تقريبًا جميع صلاحيات المضيف — لا تستخدم هذا أبدًا في بيئة الإنتاج. استخدام --cap-drop ALL + --cap-add حسب الحاجة يجسد مبدأ الحد الأدنى من الصلاحيات.
6. أمان وقت التشغيل
▶ مثال: seccomp يقيد استدعاءات النظام (الصعوبة: ⭐⭐⭐)
# التشغيل بملف تعريف seccomp مخصص
docker run -d \
--security-opt seccomp=chrome.json \
--name browser \
chromium:latest
(1) seccomp الافتراضي في Docker
يأتي Docker مع ملف تكوين seccomp افتراضي يعطل حوالي 44 استدعاء نظام خطيرًا (مثل mount و keyctl و add_key). تعمل معظم التطبيقات بشكل طبيعي مع التكوين الافتراضي.
▶ مثال: توقيع Docker Content Trust (الصعوبة: ⭐⭐)
# تمكين DCT للجلسة الحالية
export DOCKER_CONTENT_TRUST=1
# دفع صورة موقعة
docker push myorg/myapp:v1.0
# سحب: DCT يتحقق من التوقيع
docker pull myorg/myapp:v1.0
# سحب صورة غير موقعة: مرفوض (مع تمكين DCT)
docker pull myorg/myapp:unsigned
# Error: No trust data for unsigned
7. إدارة الأسرار الآمنة
(1) مقارنة ثلاث طرق لإدارة الأسرار
| الطريقة | مستوى الأمان | الرؤية | السيناريوهات المناسبة |
|---|---|---|---|
| متغيرات البيئة (-e) | منخفض | docker inspect مرئي |
بيئة التطوير |
| ملفات وحدات التخزين (-v) | متوسط | مرئي لملفات المضيف | خطة انتقالية |
| Docker Secret | عالٍ | تخزين مشفر، تركيب وقت التشغيل | بيئة إنتاج Swarm |
| Vault خارجي | أقصى | إدارة مركزية + تدقيق | مستوى المؤسسات |
8. معيار CIS Docker
▶ مثال: فحص خط أساس الأمان Docker Bench (الصعوبة: ⭐⭐)
# تشغيل فحص CIS Docker Benchmark
docker run --rm --net host --pid host \
--userns host --cap-drop audit_control \
-e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \
-v /etc:/etc:ro \
-v /lib/systemd/system:/lib/systemd/system:ro \
-v /usr/bin/containerd:/usr/bin/containerd:ro \
-v /usr/bin/runc:/usr/bin/runc:ro \
-v /usr/lib/systemd:/usr/lib/systemd:ro \
-v /var/lib:/var/lib:ro \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
docker/docker-bench-security
[INFO] 1 - Host Configuration
[INFO] 1.1 - Ensure Docker is up to date
[PASS] 1.2 - Ensure only trusted users are allowed to control Docker daemon
[WARN] 1.4 - Ensure a separate partition for containers has been created
[INFO] 4 - Container Images
[PASS] 4.1 - Ensure a user for the container has been created
[WARN] 4.7 - Ensure HEALTHCHECK instructions have been added
[WARN] 4.9 - Ensure COPY is used instead of ADD
9. مثال كامل: تأمين كامل لحاويات الإنتاج
# ============================================
# شرح كامل: تأمين حاوية الإنتاج
# من درجة التدقيق 45 ← 92
# ============================================
# الخطوة 1: فحص الثغرات
trivy image --severity HIGH,CRITICAL myapp:1.0
# إصلاح: تحديث الصورة الأساسية، تثبيت الإصدارات
# الخطوة 2: التشغيل بأقصى قيود الأمان
docker run -d \
--name hardened-app \
--user 1000:1000 \
--cap-drop ALL \
--cap-add NET_BIND_SERVICE \
--security-opt no-new-privileges \
--security-opt seccomp=default.json \
--read-only \
--tmpfs /tmp:rw,noexec,nosuid \
--tmpfs /run:rw,noexec,nosuid \
-v app-logs:/app/logs \
--log-driver json-file \
--log-opt max-size=10m \
--log-opt max-file=3 \
--health-cmd="curl -f http://localhost:8080/health || exit 1" \
--health-interval=30s \
--health-retries=3 \
-p 8080:8080 \
myapp:hardened
# الخطوة 3: التحقق من تكوين الأمان
docker inspect hardened-app --format='
User: {{.Config.User}}
ReadOnly: {{.HostConfig.ReadonlyRootfs}}
Capabilities: {{.HostConfig.CapAdd}}
NoNewPrivileges: {{.HostConfig.SecurityOpt}}
'
# الخطوة 4: تشغيل معيار CIS
docker run --rm ... docker/docker-bench-security
# الخطوة 5: إعادة الفحص بعد التأمين
trivy image myapp:hardened
❓ أسئلة شائعة
docker inspect متغيرات البيئة مرئية لأي شخص؛ ② العمليات الفرعية ترث متغيرات البيئة؛ ③ قد تُطبع متغيرات البيئة عن طريق الخطأ في السجلات. Docker Secrets (Swarm) تُخزن بشكل مشفر وتُركب كملفات مؤقتة في وقت التشغيل، وهو أكثر أمانًا. في البيئات غير Swarm، استخدم HashiCorp Vault.--privileged، تكوين شبكة مقيد). يوصى بوضع rootless لبيئات الإنتاج.📖 ملخص
- نموذج أمان الحاويات سداسي الطبقات: المضيف ← Daemon ← الصورة ← وقت التشغيل ← الشبكة ← الأسرار
--cap-drop ALL+--cap-addحسب الحاجة لتطبيق مبدأ الحد الأدنى من الصلاحيات- Trivy/Docker Scout يفحص الصور بحثًا عن الثغرات ويمنع تلقائيًا CVEs عالية الخطورة في CI
- التحقق من توقيع Docker Content Trust لمنع التلاعب بالصور
- الأسرار: لا تستخدم متغيرات البيئة؛ استخدم Docker Secrets أو Vault للإدارة المشفرة
- معيار CIS Docker هو الأداة القياسية لفحوصات خط أساس الأمان
📝 تمارين
- تمرين أساسي (الصعوبة: ⭐): شغل فحص Docker Bench Security على جهازك المحلي وسجل أي تنبيهات من مستوى WARN.
- تحدٍ متقدم (الصعوبة: ⭐⭐): استخدم Trivy لفحص صورة موجودة وأصلح جميع ثغرات مستوى CRITICAL.
- تحدٍ (الصعوبة: ⭐⭐⭐): أنشئ حاوية بقيود seccomp وتحقق من أن القيود سارية (مثلاً، تعطيل استدعاء النظام
mount).