تخطَّ إلى المحتوى

USER

تعليمة USER — المستخدم الذي تعمل به الحاوية USER

USER تحدّد باسم أو UID أي مستخدم تُنفَّذ به تعليمات RUN وCMD وENTRYPOINT التالية — بدونها تعمل الحاوية بصلاحيات root افتراضيًا، وهذا خطر أمني حقيقي.

الصور الرسمية تعمل غالبًا بمستخدم root ما لم تحدّد غيره صراحة — أي ثغرة داخل التطبيق تمنح المهاجم صلاحيات root كاملة داخل الحاوية. USER تحلّ هذا بتحويل التنفيذ لمستخدم محدود الصلاحيات، وهي من أهم خطوات تقوية أمان Dockerfile عمليًا.

تقبل اسم مستخدم أو UID رقمي، مع مجموعة اختيارية بعد نقطتين (:). لو المستخدم المحدَّد لا ينتمي لأي مجموعة معرَّفة، تعمل الحاوية بمجموعة root الافتراضية حتى لو المستخدم نفسه غير جذر — لذلك من الأفضل تحديد المجموعة صراحة أيضًا.

الصياغة

USER <user>[:<group>]
USER <UID>[:<GID>]

📄 مثال

FROM node:20-alpine
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
WORKDIR /app
COPY --chown=appuser:appgroup . .
USER appuser
CMD ["node", "server.js"]

أهم النقاط

الخيارالوظيفة
USER nameيحوّل التنفيذ لاسم مستخدم موجود مسبقًا في الصورة
USER uid:gidيقبل أرقامًا مباشرة، مفيد لو لا يوجد مستخدم باسم محدَّد بعد
بدون مجموعةلو لا ينتمي المستخدم لمجموعة معرَّفة، تُستخدم مجموعة root الافتراضية

💡 نصائح عملية

  • أنشئ مستخدمًا ومجموعة مخصَّصين بـ addgroup/adduser (أو groupadd/useradd على صور Debian) قبل USER بدل الاعتماد على مستخدم جاهز قد لا يوجد
  • استخدم COPY --chown مع نفس المستخدم لضمان صلاحية القراءة/الكتابة الصحيحة على الملفّات قبل التبديل بـ USER

⚠️ أخطاء شائعة

  • نسيان USER تمامًا فتعمل الحاوية بصلاحيات root افتراضيًا حتى لو لا حاجة فعلية لها — أوسع سطح هجوم ممكن
  • وضع USER قبل COPY فتُنسخ الملفّات بملكية appuser لكنه لا يملك صلاحية كتابة على WORKDIR أصلًا لأنه أُنشئ بـ root قبل التبديل

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار DOCKER الكامل بالعربي.