مساحات أسماء لينكس

مساحات الأسماء هي إحدى ميزات نواة لينكس التي تُقسّم موارد النواة بحيث ترى مجموعة من العمليات مجموعةً من الموارد، بينما ترى مجموعة أخرى مجموعةً مختلفة. تعمل هذه الميزة عن طريق تخصيص نفس نوع مساحة الاسم لمجموعة من الموارد والعمليات، مع السماح لهذه المساحات بالإشارة إلى بيئات معزولة تمامًا. يُعطي هذا انطباعًا بأن عمليةً ما أو مجموعة عمليات هي المستخدم الوحيد لموارد النظام من الأجهزة والبرامج. تشمل أمثلة هذه الموارد معرّفات العمليات ، وأسماء المضيفين، ومعرّفات المستخدمين، وأسماء الملفات، وواجهات الشبكة، وآليات الاتصال بين العمليات (IPC). [ 1 ] [ 2 ]

تُعدّ مساحات أسماء لينكس، إلى جانب مجموعات التحكم ( cgroups )، التقنيات الأساسية التي تدعم منصات المحاكاة الافتراضية الحديثة على مستوى نظام التشغيل ومنصات حاويات لينكس مثل Docker و Kubernetes و LXC و Podman . فبينما تُحدد مجموعات التحكم مقدار موارد النظام التي يُمكن للعملية استخدامها (مثل وحدة المعالجة المركزية والذاكرة وحدود إدخال/إخراج القرص)، تُحدد مساحات الأسماء ما يُسمح للعملية برؤيته والتفاعل معه.

يُستخدم مصطلح "مساحة الاسم" غالبًا للدلالة على نوع محدد من مساحات الأسماء (مثل مساحة اسم مُعرّف العملية) بالإضافة إلى نطاق أسماء مُحدد. يبدأ نظام لينكس بمساحة اسم أولية واحدة من كل نوع، وهي مشتركة بين جميع العمليات. يمكن للعمليات لاحقًا إنشاء مساحات أسماء إضافية أو ضم مساحات أسماء موجودة، مما يسمح بحدود عزل مُعقدة ومتداخلة.

تاريخ

استُلهمت مساحات أسماء لينكس بشكل كبير من وظائف مساحات الأسماء الأوسع نطاقًا المستخدمة في نظام التشغيل Plan 9 من مختبرات بيل ، والذي كان يعامل كل شيء كملف ويوفر عزلًا لمساحات الأسماء لكل عملية. [ 3 ]

بدأ تطبيق مساحات الأسماء في لينكس عام ٢٠٠٢ مع إصدار نواة ٢.٤.١٩. وكانت أول مساحة أسماء تم تقديمها هي مساحة اسم mount، التي ابتكرها مطور النواة آل فيرو، والتي عزلت نقاط ربط نظام الملفات. [ ٤ ] ولأنها كانت الأولى من نوعها، فقد سُمّيَت علامة استدعاء النظام المُقدّمة لها ببساطة CLONE_NEWNS(مساحة اسم جديدة)، وهو اسم لا يُشير إلى "mount" ويُعتبر غالبًا من مخلفات الماضي.

تم إدخال مساحات الأسماء اللاحقة تدريجياً على مدى عدة سنوات:

  • تمت إضافة مساحات أسماء UTS و IPC في إصدار النواة 2.6.19 في عام 2006.
  • تم الانتهاء من مساحات أسماء PID في النواة 2.6.24 في عام 2008.
  • تم استكمال مساحات أسماء الشبكة إلى حد كبير بواسطة النواة 2.6.29 في عام 2009. [ 5 ]
  • اعتُبرت مساحات أسماء المستخدمين ، التي طوّرها في الأساس إريك دبليو. بيدرمان، مكتملة وفعّالة في إصدار نواة النظام 3.8، الذي صدر عام 2013. [ 6 ] شكّل إدخال مساحات أسماء المستخدمين علامة فارقة، إذ مكّن من إنشاء "حاويات غير مميزة" - وهي حاويات يمكن تشغيلها بأمان دون الحاجة إلى امتيازات المستخدم المتميز (root) على النظام المضيف. [ 7 ]
  • تم تقديم مساحات أسماء Cgroup في النواة 4.6 في مارس 2016، بقيادة تيجون هيو. [ 8 ]
  • تم دمج مساحات أسماء الوقت في إصدار النواة 5.6 في مارس 2020، مما يسمح للحاويات بأن يكون لها أوقات تشغيل وبدء تشغيل رتيبة خاصة بها. [ 9 ]

أنواع مساحات الأسماء

ابتداءً من إصدار نواة لينكس 5.6، يوجد ثمانية أنواع من مساحات الأسماء. وتعمل وظائف مساحات الأسماء بشكل موحد في جميع الأنواع: يرتبط كل معالج بمساحة اسم محددة، ولا يمكنه رؤية أو استخدام سوى الموارد المرتبطة بتلك المساحة، بما في ذلك مساحات الأسماء الفرعية التابعة لها عند الاقتضاء. وهذا يوفر لكل معالج (أو مجموعة معالجات) رؤية فريدة ومجزأة للنظام.

جبل (mnt)

تتحكم مساحات أسماء التثبيت، وهي أول مساحة أسماء تُضاف إلى نظام لينكس، في نقاط التثبيت . فهي توفر للعملية رؤية معزولة لتسلسل نظام الملفات. عند الإنشاء، تُنسخ نقاط التثبيت من مساحة اسم التثبيت الحالية مبدئيًا إلى مساحة الاسم الجديدة. مع ذلك، لا تنتقل نقاط التثبيت التي تُنشأ أو تُزال لاحقًا بين مساحات الأسماء افتراضيًا.

باستخدام ميزة الأشجار الفرعية المشتركة في لينكس، يُمكن تهيئة نقاط تحميل مُحددة لنشر الأحداث (مثل تحميل محرك أقراص USB) بين المضيف والحاوية، أو العكس. [ 10 ] علامة الاستنساخ المُستخدمة لإنشاء مساحة اسم جديدة من هذا النوع هي CLONE_NEWNS.

معرّف العملية (pid)

توفر مساحة أسماء PID لكل عملية مجموعة مستقلة من معرّفات العمليات (PIDs). وتتميز مساحات أسماء PID بتداخلها الصارم. فعند إنشاء عملية جديدة ضمن مساحة أسماء PID جديدة، ستحصل على معرّف PID مميز لكل مساحة أسماء، بدءًا من مساحة الأسماء الحالية وصولًا إلى مساحة أسماء PID الأولية (الجذرية). وبالتالي، تستطيع العمليات الموجودة في مساحة أسماء PID الأولية (مثل نظام التشغيل المضيف) رؤية جميع العمليات في جميع الحاويات، وإن كانت بمعرّفات PID مختلفة عن تلك الموجودة داخل الحاويات.

يُخصَّص للعملية الأولى التي تُنشأ في نطاق اسم PID رقم العملية 1. وتحظى هذه العملية بمعاملة خاصة مماثلة لتلك التي تحظى بها عملية بدء التشغيل العادية لنظام التشغيل . والأهم من ذلك، أنه يتم إعادة ربط أي عمليات يتيمة داخل نطاق الاسم تلقائيًا بهذه العملية ذات رقم العملية 1. إذا انتهت هذه العملية ذات رقم العملية 1، فستقوم النواة على الفور بإنهاء جميع العمليات الأخرى داخل نطاق اسم PID هذا وأي من العمليات التابعة له عن طريق إرسال SIGKILLإشارة إليها. [ 11 ]

الشبكة (net)

تُحاكي مساحات أسماء الشبكة بنية الشبكة . عند إنشاء مساحة اسم شبكة جديدة، تحتوي فقط على واجهة استرجاع ( loopback interface lo)، والتي تكون معطلة في البداية. لا يمكن أن تتواجد أي واجهة شبكة - سواء كانت مادية أو افتراضية - إلا في مساحة اسم شبكة واحدة فقط في كل مرة، ولكن يمكن للمسؤول نقل الواجهات بين مساحات الأسماء بشكل فعال.

تحتفظ كل مساحة اسم شبكة بمجموعة خاصة من عناوين IP ، وجدول توجيه خاص بها ، وقائمة بالمنافذ ، وجدول لتتبع الاتصالات، وقواعد جدار الحماية (مثل iptables أو nftables )، وموارد أخرى متعلقة بالشبكة. [ 5 ] لمنح حاوية اتصالاً بالشبكة، يقوم المسؤولون عادةً بإنشاء vethزوج إيثرنت افتراضي، حيث يضعون أحد طرفيه في مساحة اسم المضيف والآخر داخل مساحة اسم شبكة الحاوية، ثم يربطون طرف المضيف بشبكة فعلية. يؤدي حذف مساحة اسم شبكة إلى حذف أي واجهات افتراضية بداخلها تلقائيًا، وإعادة أي واجهات فعلية إلى مساحة اسم الشبكة الأصلية.

الاتصال بين العمليات (ipc)

تعزل مساحات أسماء IPC العمليات عن آليات الاتصال بين العمليات من نوع SysV ، بالإضافة إلى قوائم انتظار رسائل POSIX . يمنع هذا العمليات في مساحات أسماء IPC مختلفة من التفاعل مع بعضها البعض باستخدام معرّفات IPC مشتركة. على سبيل المثال، يمكن لعمليتين في مساحات أسماء مختلفة استخدام نفس معرّف مقطع الذاكرة المشتركة لتخصيص الذاكرة عبر مجموعة وظائف SHM، وسيضمن نظام التشغيل تزويدهما بمنطقتين منفصلتين ومعزولتين تمامًا من الذاكرة المشتركة.

جامعة سيدني للتكنولوجيا

تعزل مساحات أسماء UTS مُعرّفين للنظام: اسم المضيف واسم نطاق NIS . يُشتق اسم "UTS" من بنية البيانات المُمرّرة إلى unameاستدعاء النظام، والذي يرمز تاريخيًا إلى نظام المشاركة الزمنية في يونكس (UNIX Time-Sharing System). عندما يُنشئ أحد العمليات مساحة أسماء UTS جديدة، يتم نسخ اسم المضيف واسم النطاق من مساحة أسماء المُستدعي. وبذلك، يُمكن للعمليات داخل مساحة الأسماء الجديدة تغيير اسم مضيفها دون التأثير على الجهاز المضيف أو الحاويات الأخرى. [ 12 ]

معرّف المستخدم (user)

مساحات أسماء المستخدمين هي ميزة أمنية بالغة الأهمية، مصممة لتوفير عزل الامتيازات وفصل هوية المستخدمين عبر مجموعات متعددة من العمليات. وقد تم تقديمها بالكامل في نواة النظام 3.8، وهي تُشكل الركيزة الأساسية للحاويات غير المُميزة. ومثل مساحات أسماء مُعرّفات العمليات، فإن مساحات أسماء المستخدمين متداخلة، حيث تُعتبر كل مساحة اسم جديدة فرعًا من المساحة التي أنشأتها.

يحتفظ نطاق اسم المستخدم بجدول ربط يحوّل معرّفات المستخدمين (UIDs) ومعرّفات المجموعات (GIDs) من منظور الحاوية الداخلي إلى منظور النظام المضيف العام. يسمح هذا لعملية ما بالحصول على امتيازات الجذر (UID 0) داخل الحاوية، ولكنها تُقابل رياضيًا بمعرّف مستخدم غير مميز ومقيّد (مثل UID 100000) على الجهاز المضيف الأساسي. [ 13 ] إذا سمحت ثغرة أمنية لعملية "الجذر" في الحاوية بالخروج من نطاق الاسم، فسيظل النظام المضيف يتعامل معها على أنها معرّف المستخدم المقيّد، مما يحدّ بشكل كبير من الضرر المحتمل.

مساحة اسم مجموعة التحكم (cgroup)

يُخفي نطاق اسم cgroup هوية التسلسل الهرمي لمجموعة التحكم التي ينتمي إليها أي عملية. قبل وجود هذا النطاق، كان بإمكان أي عملية داخل حاوية فحص /proc/self/cgroupمسار cgroup الخاص بها بالكامل بالنسبة إلى النظام المضيف (على سبيل المثال، /sys/fs/cgroup/memory/docker/container_id).

من خلال محاكاة عرض نظام ملفات cgroup، يرى أي برنامج داخل مساحة اسم cgroup دليل cgroup الخاص به كجذر /. يمنع هذا تسريب المعلومات حول البنية التحتية الأساسية للمضيف، ويتيح لأدوات إدارة الحاويات نقل الحاويات بسلاسة بين العُقد دون تعارض مسارات cgroup. وقد وُجد هذا النوع من مساحات الأسماء منذ مارس 2016 في نظام Linux 4.6. [ 14 ]

وقت

تتيح مساحة اسم الوقت للعمليات مراقبة أوقات النظام المختلفة. وقد تم تقديمها في لينكس 5.6 في مارس 2020. وعلى وجه التحديد، فهي تعزل ساعتين محددتين للنواة: CLOCK_MONOTONICو CLOCK_BOOTTIME.

عند نقل حاوية من مضيف فعلي إلى آخر أو استعادتها من لقطة، سيختلف وقت تشغيل النظام وقيم الساعة الثابتة للمضيف الجديد عن القديم. يسمح نطاق الوقت لوقت تشغيل الحاوية بضبط إزاحات الساعة، مما يضمن عدم تعرض التطبيقات داخل الحاوية لقفزات مفاجئة ومُعطِّلة في الوقت.

مساحات الأسماء المقترحة

مساحة اسم syslog

اقترح روي شيانغ، وهو مهندس في شركة هواوي ، مساحة اسم syslog لعزل حلقات تسجيل نواة النظام. مع ذلك، لم يُدمج هذا الاقتراح في نواة لينكس الرئيسية. [ 15 ] وبدلاً من ذلك، لبت حلول مساحة المستخدم هذا المطلب إلى حد كبير؛ فعلى سبيل المثال، قدم نظام systemd مفهوم "مساحات أسماء السجلات" في فبراير 2020 لتوفير بيئات تسجيل معزولة. [ 16 ]

مساحة اسم IMA

بنية قياس السلامة (IMA) هي نظام فرعي لأمان نواة النظام، يقيس الملفات قبل الوصول إليها للتأكد من عدم التلاعب بها. تعمل بنية IMA القياسية على مستوى النظام ككل، مما يُسبب تعارضات في بيئات الحاويات. يهدف التطوير المستمر من قِبل مجتمع نواة النظام - بمساهمات كبيرة من IBM وHuawei - إلى استحداث مساحة اسم خاصة ببنية IMA. سيُمكّن هذا كل حاوية من الاحتفاظ بسجلات تكوين النظام الأساسي (PCR) المعزولة، وسجلات القياس الفريدة (ML)، ومفاتيح التقييم المستقلة، مما يُتيح التحقق التشفيري على مستوى الأجهزة مباشرةً لكل حاوية على حدة. [ 17 ]

التسلسل الهرمي الإداري

لتسهيل عزل الصلاحيات في الإجراءات الإدارية، يتم ربط كل نوع من أنواع مساحات الأسماء بمساحة اسم مستخدم. عند إنشاء مساحة اسم غير تابعة لمستخدم، تُعتبر "مملوكة" لمساحة اسم المستخدم التي كانت نشطة وقت إنشائها.

يُسمح للمستخدم الذي يتمتع بصلاحيات إدارية (وتحديدًا، يمتلك CAP_SYS_ADMINصلاحية ) في مساحة اسم المستخدم المالكة بتنفيذ إجراءات إدارية على تلك المساحة. على سبيل المثال، إذا كان لدى عملية ما صلاحيات إدارية لتغيير عنوان IP لواجهة شبكة، فيمكنها القيام بذلك، ولكن فقط إذا كانت مساحة اسم المستخدم النشطة الخاصة بها هي التي تملك مساحة اسم الشبكة المحددة. ولأن مساحة اسم المستخدم الأولية (المضيف) هي الأصل لجميع مساحات الأسماء الأخرى، فإن المستخدم الجذر للمضيف يحتفظ بطبيعته بالتحكم الإداري في جميع أنواع مساحات الأسماء عبر النظام بأكمله. [ 18 ]

تفاصيل التنفيذ

يتم تمثيل مساحات الأسماء ككائنات ملفات افتراضية داخل النواة، ويمكن الوصول إليها عبر procfsنظام الملفات الزائف.

الرؤية في /proc

يكشف نظام التشغيل عن ارتباطات مساحة الاسم لكل عملية قيد التشغيل في المسار . ومثل العديد من الموارد غير الملفية في ، تظهر هذه الإدخالات كروابط رمزية خاصة. قراءة الرابط تُنتج سلسلة نصية مُنسقة على النحو التالي :/proc/pid/ns/kind/prockind:[inode_number]

تتوافق أرقام inode هذه بشكل مباشر مع كائنات مساحة الاسم الفريدة في ذاكرة النواة. إذا أظهرت عمليتان نفس رقم inode لنوع معين من مساحة الاسم (على سبيل المثال، net:[4026531969])، فإنهما تشتركان في مساحة الاسم هذه.

ابتداءً من إصدار لينكس 6.1.0، يمكن kindأن تكون السلسلة أيًا من القيم التالية cgroup: ipc` mnt<PID> net` pid, time...useruts/proc/pid/ns/kind_for_children

استدعاءات النظام

أربع استدعاءات أساسية للنظام تعالج مساحات الأسماء بشكل مباشر:

  • cloneيُستخدم هذا الأمر لإنشاء عملية جديدة. من خلال تمرير علامات محددة (مثل CLONE_NEWPIDأو CLONE_NEWNET)، ستقوم النواة بإنشاء مساحات الأسماء الجديدة المحددة ووضع العملية الفرعية داخلها.
  • unshare: يسمح للعملية بفصل أجزاء من سياق تنفيذها عن العملية الأصلية، مما يؤدي فعليًا إلى نقل العملية المستدعِية إلى مساحة اسم جديدة تمامًا.
  • setnsيسمح هذا الخيار لعملية قيد التشغيل بالدخول إلى مساحة اسم موجودة مسبقًا. ويتطلب ذلك مُعرّف ملف يشير إلى أحد الروابط الرمزية لمساحة الاسم في /proc.
  • ioctl: يستخدم مع طلبات مساحة الاسم المحددة (مثل NS_GET_PARENTأو NS_GET_USERNS) لاكتشاف العلاقات الهرمية بين مساحات الأسماء المختلفة.

دمار

إذا لم يعد أي جزء من النظام يشير إلى مساحة اسم، فستقوم النواة بحذفها تلقائيًا. تختلف عملية تنظيف الموارد المُضمنة باختلاف نوع مساحة الاسم. تُعتبر مساحة الاسم مُشارًا إليها بنشاط ومُحتفظًا بها طالما استوفى أي من الشروط التالية:

  • يحتوي على عملية عضو حية واحدة على الأقل.
  • يحتوي على مساحة اسم فرعية واحدة على الأقل (للأنواع المتداخلة مثل PID و User).
  • يتم حاليًا الاحتفاظ بملفها الظاهري ( ) مفتوحًا عبر واصف ملف ./proc/pid/ns/kind
  • وهو يدعم عملية ربط تم إنشاؤها في نظام الملفات (وهي تقنية شائعة تستخدمها أدوات الشبكات مثل iproute2للحفاظ على مساحات أسماء الشبكة نشطة دون تشغيل العمليات).

التبني

تُستخدم مساحات أسماء لينكس على نطاق واسع في بيئة البرمجيات الحديثة. ويتم دمجها بشكل عام مع مجموعات التحكم (cgroups) لبناء تقنيات الحاويات. ومن الأمثلة على ذلك Docker، وLXC ( حاويات لينكس ) ، و Podman ، وأنظمة تنسيق الحاويات مثل Kubernetes .

إلى جانب الحاويات، تُستخدم مساحات الأسماء على نطاق واسع لعزل العمليات وتعزيز الأمان. يعتمد كل من جوجل كروم وكروميوم بشكل كبير على مساحات أسماء المستخدم، ومعرّفات العمليات، والشبكة لعزل عمليات عرض الويب، مما يحدّ بشكل كبير من الضرر الذي يمكن أن يُلحقه المهاجم في حال اختراق برنامج العرض. [ 20 ] تستخدم تنسيقات الحزم مثل Flatpak و Snap مساحات الأسماء لعزل تطبيقات سطح المكتب عن نظام ملفات المضيف وبيانات المستخدم.

علاوة على ذلك، يستخدم نظام التهيئة systemd مساحات الأسماء لتأمين خدمات النظام. وتُوجّه توجيهات مثل PrivateNetwork=yes`- ...PrivateTmp=yes

تستفيد أدوات سطر الأوامر أيضًا من هذه الميزات. util-linuxتتضمن الحزمة unshareالأمر الذي يسمح للمستخدمين بتشغيل واجهات سطر الأوامر أو البرامج النصية داخل مساحات أسماء مُنشأة حديثًا. مثال على استخدام مساحات الأسماء لإنشاء بيئة معزولة وغير مميزة تشبه بيئة المستخدم الجذر:

إلغاء المشاركة --ربط-المستخدم-الجذر --التفرع --معرف- العملية --تركيب-العملية --الجذر = " ${ chrootdir } " " $@ "

يقوم هذا الأمر بإنشاء عملية في مساحات أسماء المستخدم و PID والتركيب الجديدة، مما يجعله بمثابة بديل حديث وأكثر أمانًا بكثير للأمر التقليدي chroot.

مراجع

  1. هيدينغز، أنتوني (2020-09-02). "ما هي مساحات أسماء لينكس وما استخداماتها؟" . موقع How-To Geek . تم الاطلاع عليه بتاريخ 22-08-2024 .
  2. كيريسك، مايكل. "namespaces(7) - نظرة عامة على مساحات أسماء لينكس" . man7.org . تم الاسترجاع في 29-05-2026 .
  3. "استخدام مساحات الأسماء في الخطة 9" . 1992. مؤرشف من الأصل بتاريخ 2014-09-06 . تم الاطلاع عليه بتاريخ 2016-03-24 .
  4. كيريسك، مايكل (4 يناير 2013). "مساحات الأسماء قيد التشغيل، الجزء 1: نظرة عامة على مساحات الأسماء" . LWN.net . مؤرشف من الأصل في 21 مارس 2024. تم الاطلاع عليه في 29 مايو 2026 .
  5. 1 2 "network_namespaces(7) - صفحة دليل لينكس" . man7.org . تم الاطلاع عليه بتاريخ 29-05-2026 .
  6. "LKML: Linus Torvalds: Linux 3.8" . lkml.org . تم الاطلاع عليه بتاريخ 22-03-2024 .
  7. "مساحات الأسماء قيد التشغيل، الجزء 5: مساحات أسماء المستخدم [ LWN.net ] " .
  8. هيو، تيجون (2016-03-18). " [ GIT PULL ] دعم مساحة اسم cgroup للإصدار v4.6-rc1" . lkml (قائمة بريدية).
  9. "حان الوقت أخيرًا: تمت إضافة دعم مساحة اسم الوقت إلى نواة لينكس 5.6" . فورونيكس . تم الاطلاع عليه بتاريخ 30 مارس 2020 .
  10. "Documentation/filesystems/sharedsubtree.txt" . 2016-02-25 . تم الاطلاع عليه بتاريخ 2017-03-06 .
  11. "مساحات الأسماء قيد التشغيل، الجزء 3: مساحات أسماء PID" . lwn.net. 2013-01-16.
  12. "uts_namespaces(7) - صفحة دليل لينكس" . man7.org . تم الاطلاع عليه بتاريخ 16-02-2021 .
  13. "user_namespaces(7) - صفحة دليل لينكس" . man7.org . تم الاطلاع عليه بتاريخ 29-05-2026 .
  14. ↑ تورفالدز ، لينوس (2016-03-26). "Linux 4.6-rc1" .lkml (قائمة بريدية).
  15. "إضافة دعم مساحة الاسم لـ syslog" . lwn.net . تم الاطلاع عليه بتاريخ 11 يوليو 2022 .
  16. "journal: إضافة مفهوم "مساحات أسماء journal" بواسطة poettering · طلب سحب رقم 14178 · systemd/systemd" . GitHub . تم الاسترجاع في 11 يوليو 2022 .
  17. "ima: تقديم مساحة اسم IMA" . lwn.net . تم الاسترجاع 2024-03-18 .
  18. "مساحات الأسماء قيد التشغيل، الجزء 5: مساحات أسماء المستخدم" . lwn.net. 2013-02-27.
  19. "أمان دوكر" . docker.com . تم الاطلاع عليه بتاريخ 24-03-2016 .
  20. "حماية كروميوم في بيئة لينكس المعزولة" . مؤرشف من الأصل بتاريخ 19-12-2019 . تم الاطلاع عليه بتاريخ 19-12-2019 .