العودة إلى الدورة

الدرس 24: المستخدمون غير الجذريون (Non-Root Users) وأفضل ممارسات أمان الحاويات

Docker من الصفر إلى الاحتراف: الدورة الشاملة لتغليف التطبيقات (Containerization) للمبتدئين

الدرس 24: المستخدمون غير الجذريون (Non-Root Users) وأفضل ممارسات أمان الحاويات

يجب أن يكون الأمان أولوية. بشكل افتراضي، تعمل العمليات داخل حاوية Docker كمستخدم root، وهو خطر أمني كبير.

مشكلة المستخدم الجذري (Root)

إذا سيطر فاعل خبيث على حاوية تعمل كمستخدم root، فقد يستغل ثغرة أمنية في خفي Docker أو نواة Linux للحصول على وصول root إلى الجهاز المضيف.

الحل: تعليمة USER

تقوم تعليمة USER في Dockerfile بتعيين المستخدم (بالاسم أو UID) الذي سينفذ جميع الأوامر اللاحقة (RUN, CMD, ENTRYPOINT).

مثال: إنشاء واستخدام مستخدم مخصص

  1. إنشاء المستخدم والمجموعة: dockerfile FROM alpine:latest

    إنشاء مجموعة ومستخدم غير جذري

    RUN addgroup -S appgroup && adduser -S appuser -G appgroup

    WORKDIR /app

    التأكد من أن المستخدم الجديد يمتلك دليل التطبيق

    RUN chown -R appuser:appgroup /app

    التبديل إلى المستخدم غير الجذري

    USER appuser

    سيتم الآن تشغيل CMD كمستخدم 'appuser'

    CMD ["node", "server.js"]

  2. استخدام المستخدمين المجهزين مسبقاً: توفر العديد من الصور الأساسية (مثل Node.js، Python، أو Alpine) بالفعل مستخدمين غير جذريين يمكنك التبديل إليهم على الفور، مثل node أو python.

    dockerfile FROM node:20-slim

    التبديل مباشرة إلى المستخدم الذي توفره الصورة الأساسية

    USER node

    WORKDIR /home/node/app COPY . .

    CMD ["npm", "start"]

نصائح أمنية أخرى

  • استخدم صوراً أساسية صغيرة: استخدم صور alpine أو slim بدلاً من صور نظام التشغيل الكاملة (مثل ubuntu) لتقليل سطح الهجوم.
  • استخدم البناء متعدد المراحل (الدرس 21): تخلص من أدوات البناء غير الضرورية من الصورة النهائية.
  • تقييد الإمكانيات: استخدم العلامة --cap-drop أثناء docker run لإزالة إمكانيات النواة غير الضرورية من الحاوية.