معرّف المستخدم
في أنظمة التشغيل الشبيهة بنظام يونكس ، يُستخدم مُعرّف المستخدم (يُختصر غالبًا إلى مُعرّف المستخدم أو UID ) لتحديد هوية المستخدم. ويُستخدم مُعرّف المستخدم، إلى جانب مُعرّف المجموعة (GID) ومعايير التحكم في الوصول الأخرى، لتحديد موارد النظام التي يُمكن للمستخدم الوصول إليها. ويربط ملف كلمات المرور أسماء المستخدمين النصية بمُعرّفات المستخدم. تُخزّن مُعرّفات المستخدم في عقد نظام ملفات يونكس ، والعمليات الجارية، وأرشيفات tar ، وخدمة معلومات الشبكة ( التي أصبحت الآن قديمة) . في بيئات POSIX ، يُظهر أمر shell مُعرّف المستخدم الحالي، بالإضافة إلى معلومات أخرى مثل اسم المستخدم ومُعرّفات المجموعات الأساسية والتكميلية (GIDs) وأسماء المجموعات.id
سمات العملية
أدخل معيار POSIX ثلاثة حقول UID مختلفة في جدول وصف العملية، للسماح للعمليات ذات الامتيازات بتولي أدوار مختلفة ديناميكيًا:
معرف المستخدم الفعال
يُستخدم المعرّف الفريد الفعال (UID euid) للعملية في معظم عمليات التحقق من الوصول. كما يُستخدم أيضًا كمالك للملفات التي أنشأتها تلك العملية.
معرف مستخدم نظام الملفات
يحتوي نظام لينكس أيضًا على مُعرّف مستخدم نظام الملفات (filesystem user ID fsuid) الذي يُستخدم صراحةً للتحكم في الوصول إلى نظام الملفات. يتطابق هذا المُعرّف مع مُعرّف المستخدم الجذر (root) euidما لم يتم تحديد خلاف ذلك صراحةً. قد يكون مُعرّف المستخدم الجذرruid فقط إذا كان المستخدم الجذر هو المستخدم الجذر suidأو euidالمستخدم الجذر أو المستخدم الجذر. عند euidتغيير مُعرّف المستخدم الجذر، يتم نشر التغيير إلى مُعرّف المستخدم الجذر fsuid.
يهدف هذا fsuidإلى السماح للبرامج (مثل خادم NFS ) بتقييد نفسها بحقوق نظام الملفات المحددة uidدون منحها uidإذنًا لإرسال الإشارات إليها. منذ إصدار نواة لينكس 2.0، fsuidلم يعد وجود هذا ضروريًا لأن لينكس يلتزم بقواعد SUSv3 لإرسال الإشارات، ولكنه fsuidلا يزال موجودًا لأسباب تتعلق بالتوافق. [ 1 ]
معرف المستخدم الحقيقي
يُحدد كل من مُعرّف المستخدم (UID ruid) ومُعرّف المجموعة (GID rgid) الحقيقيان مالك العملية الحقيقي، ويؤثران على صلاحيات إرسال الإشارات. لا يُمكن لعملية لا تملك صلاحيات المستخدم المتميز إرسال إشارة إلى عملية أخرى إلا إذا تطابق مُعرّف المستخدم (UID) الخاص بالمُرسِل مع مُعرّف المجموعة (GID) الخاص بالمُستقبِل ruid. ولأن العملية الفرعية ترث بيانات اعتمادها من العملية الأصلية، يُمكن للعملية الفرعية والعملية الأصلية إرسال إشارات إلى بعضهما البعض.euidruidsuid
معرّف المستخدم المحفوظ
يُستخدم مُعرّف المستخدم المحفوظ عندما يحتاج برنامج يعمل بصلاحيات مُرتفعة إلى القيام ببعض المهام التي لا تتطلب صلاحيات مُرتفعة بشكل مؤقت؛ إذ يؤدي تغيير euidقيمة مُعرّف المستخدم من قيمة مُميزة (عادةً 0) إلى قيمة غير مُميزة (أي قيمة أخرى غير القيمة المُميزة) إلى تخزين القيمة المُميزة في suid. لاحقًا، يُمكن إعادة تعيين مُعرّف المستخدم للبرنامج euidإلى القيمة المُخزنة في suid، بحيث يُمكن استعادة الصلاحيات المُرتفعة؛ ويُمكن لعملية غير مُميزة تعيين مُعرّف المستخدم euidإلى إحدى ثلاث قيم فقط: قيمة ruid، أو قيمة suid، أو قيمة euid.
الاتفاقيات
يكتب
يشترط معيار POSIX أن يكون مُعرّف المستخدم (UID) عددًا صحيحًا . تُمثّل معظم أنظمة التشغيل الشبيهة بنظام يونكس مُعرّف المستخدم كعدد صحيح غير مُوقّع. يختلف حجم قيم مُعرّف المستخدم بين الأنظمة المختلفة؛ فقد استخدمت بعض أنظمة يونكس قيمًا من 15 بت، مما يسمح بقيم تصل إلى 32767 ، بينما دعمت أنظمة أخرى، مثل لينكس (قبل الإصدار 2.4)، مُعرّفات مستخدم من 16 بت ، مما أتاح 65536 مُعرّفًا فريدًا. وقد تحوّلت غالبية الأنظمة الحديثة الشبيهة بنظام يونكس (مثل سولاريس 2.0 في عام 1990، ولينكس 2.4 في عام 2001) إلى مُعرّفات مستخدم من 32 بت ، مما يسمح بـ 4,294,967,296 (2^ 32 ) مُعرّفًا فريدًا.
نطاقات محجوزة
تحدد مواصفات Linux Standard Base Core أن قيم UID في النطاق من 0 إلى 99 يجب أن يتم تخصيصها بشكل ثابت بواسطة النظام، ولا يجوز للتطبيقات إنشاؤها، بينما يجب حجز قيم UID من 100 إلى 499 للتخصيص الديناميكي بواسطة مسؤولي النظام وبرامج ما بعد التثبيت. [ 2 ]
لا يقتصر نظام Debian Linux على حجز النطاق 100-999 لمستخدمي النظام والمجموعات المخصصة ديناميكيًا فحسب، بل يقوم أيضًا بتخصيص المستخدمين والمجموعات مركزيًا وثابتًا في النطاق 60000-64999 ويحجز كذلك النطاق 65000-65533. [ 3 ]
يُعرّف Systemd عددًا من نطاقات UID الخاصة، بما في ذلك [ 4 ]
- 60001-60513: معرّفات المستخدمين (UIDs) لمجلدات المستخدمين الرئيسية التي يديرها systemd-homed
- 61184-65519 (0xef00-0xffef): معرّفات المستخدمين الديناميكيين
في نظام FreeBSD ، يمكن للمطورين الذين يحتاجون إلى مُعرّف فريد (UID) لحزمتهم اختيار مُعرّف مجاني من النطاق من 50 إلى 999، ثم تسجيل التخصيص الثابت. [ 5 ] [ 6 ]
تُخصّص بعض أنظمة POSIX معرّفات المستخدمين الجدد بدءًا من 500 ( مثل macOS و Red Hat Enterprise Linux حتى الإصدار 6)، بينما تبدأ أنظمة أخرى من 1000 (مثل Red Hat Enterprise Linux منذ الإصدار 7، و openSUSE ، و Debian ) . في العديد من أنظمة Linux، تُحدّد هذه النطاقات في أدوات مثل ./etc/login.defsuseradd
قد تقتصر عمليات تخصيص معرّفات المستخدمين المركزية في شبكات المؤسسات (مثلًا، عبر خوادم LDAP و NFS ) على استخدام أرقام معرّفات المستخدمين التي تتجاوز 1000 بكثير، وتقع خارج النطاق 60000-65535، وذلك لتجنب أي تعارضات محتملة مع معرّفات المستخدمين المخصصة محليًا على أجهزة المستخدمين. عند إنشاء مستخدمين جدد محليًا، يُفترض أن يتحقق النظام المحلي من وجود أي تعارضات مع معرّفات المستخدمين الموجودة مسبقًا على خادم NSS، ويتجنبها. [ ملاحظة 1 ]
يمكن للتقنية الافتراضية على مستوى نظام التشغيل إعادة تعيين معرفات المستخدم، على سبيل المثال باستخدام مساحات أسماء Linux ، وبالتالي فهي بحاجة إلى تخصيص نطاقات يتم فيها تعيين معرفات المستخدم ومعرفات المجموعة المعاد تعيينها:
- يقوم برنامج snapd بربط معرفات المستخدم (UIDs) ومعرفات المجموعة (GIDs) في النطاق 524288-589823 (0x80000-0x8ffff).
- يستخدم systemd-nspawn نطاقات UID لكل حاوية تلقائيًا 524288-1879048191 (0x80000-0x6fffffff) [ 4 ]
يوصي مؤلفو systemd بأن تقوم أنظمة المحاكاة الافتراضية على مستوى نظام التشغيل بتخصيص 65536 (2 16 ) معرفًا فريدًا لكل حاوية، وتعيينها عن طريق إضافة مضاعف صحيح لـ 2 16. [ 4 ]
القيم الخاصة
- 0: عادةً ما يكون لدى المستخدم المتميز معرّف مستخدم (UID) يساوي صفرًا (0). [ 8 ]
- -1: القيمة
(uid_t) -1محجوزة في نظام POSIX لتحديد وسيط محذوف. [ 9 ] - 65535: لا تزال هذه القيمة غير مستخدمة لأنها كانت قيمة الخطأ التي يتم إرجاعها من واجهة برمجة التطبيقات عندما كان uid_t مكونًا من 16 بت.
- المستخدم "nobody ": تاريخيًا، كان يُخصص للمستخدم " nobody " مُعرّف فريد (UID) من قِبل العديد من أنظمة التشغيل، على الرغم من استخدام
-2قيم أخرى مثل 2 ^15 - 1 = 32767، كما هو الحال في OpenBSD . [ 10 ] ولضمان التوافق بين مُعرّفات المستخدمين 16 بت و32 بت، تُعيّن العديد من توزيعات لينكس الآن القيمة 2 ^16 - 2 = 65534؛ حيث تُعيد نواة لينكس هذه القيمة افتراضيًا عندما لا يتناسب مُعرّف المستخدم 32 بت مع القيمة المُعادة من استدعاءات النظام 16 بت. [ 11 ] يُخصص نظام فيدورا لينكس آخر مُعرّف مستخدم من النطاق المُخصص ثابتًا لاستخدام النظام (0-99) للمستخدم "nobody": 99، ويستدعي القيمة 65534 بدلاً من ذلكnfsnobody.
البدائل
كان الهدف من NFSv4 هو المساعدة في تجنب تضارب المعرفات الرقمية عن طريق تحديد المستخدمين (والمجموعات) في حزم البروتوكول باستخدام أسماء نصية "user@domain" بدلاً من الأرقام الصحيحة. ومع ذلك، طالما استمرت نواة نظام التشغيل وأنظمة الملفات المحلية في استخدام معرفات المستخدم العددية، فإن هذا يأتي على حساب خطوات ترجمة إضافية (باستخدام عمليات idmap daemon)، مما قد يُدخل نقاط فشل إضافية إذا تم تكوين آليات تعيين UID المحلية أو قواعد البيانات بشكل غير صحيح، أو فُقدت، أو لم تكن متزامنة. يمكن استخدام جزء "@domain" من اسم المستخدم للإشارة إلى الجهة التي خصصت اسمًا معينًا، على سبيل المثال في شكل
- اسم عالم كيربيروس
- اسم نطاق Active Directory
- اسم مورد نظام التشغيل (للتخصيصات الخاصة بالتوزيعة)
- اسم جهاز الكمبيوتر (للتخصيصات الخاصة بالجهاز)
لكن في الواقع العملي، تسمح العديد من التطبيقات الحالية فقط بتعيين نطاق NFSv4 إلى قيمة ثابتة، مما يجعلها عديمة الفائدة.
انظر أيضاً
- حقوق الوصول إلى FAT
- أذونات نظام الملفات
- فتح (استدعاء النظام)
- معرّف العملية
- معرّف الأمان (SID) – المكافئ في نظام التشغيل Windows NT
- setuid
- جزء لزج
ملحوظات
- ↑ لكلا نطاقي التخصيص: عند تخصيص مُعرّف فريد (UID)، يتم التحقق من نظام NSS بحثًا عن تعارضات أولًا، ويتم اختيار مُعرّف فريد مختلف في حال العثور على إدخال.
مراجع
- ↑ كيريسك، مايكل. واجهة برمجة لينكس . دار نشر نو ستارش، 2010، ص 171.
- ↑ "9.3. نطاقات معرف المستخدم" . Refspecs.linuxfoundation.org . تم الاطلاع عليه بتاريخ 24-09-2016 .
- 1 2 "دليل سياسات دبيان - القسم 9.2.2: فئات UID وGID" . Debian.org . 2019-07-18 . تم الاطلاع عليه بتاريخ 2019-07-26 .
- 1 2 3 "المستخدمون والمجموعات ومعرفات المستخدم ومعرفات المجموعة على أنظمة systemd" . GitHub . تم الاسترجاع في 26-09-2020 .
- ↑ "دليل بورتر لنظام FreeBSD" . Freebsd.org . تم الاطلاع عليه بتاريخ 24-09-2016 .
- ↑ "الفصل 6. اعتبارات خاصة" .
- ↑ "تغييرات نظام RHEL7" . Certdepot.net . 17-01-2016 . تم الاطلاع عليه بتاريخ 22-03-2017 .
- ↑ "Getpwuid" . Pubs.opengroup.org . تم الاطلاع عليه بتاريخ 24-09-2016 .
- ↑ "Chown" . Pubs.opengroup.org . تم الاطلاع عليه بتاريخ 24-09-2016 .
- ↑ «تقرير مشكلة NetBSD رقم 6594: بيانات اعتماد "nobody" الافتراضية (32767:9999) لا تتطابق مع بيانات اعتماد mountd الافتراضية (-2:-2)» . GnaNFSv4ts.netbsd.org . تم الاطلاع عليه بتاريخ 24-09-2016 .
- ↑ "مساحات الأسماء قيد التشغيل، الجزء 5: مساحات أسماء المستخدمين" . Lwn.net . تم الاسترجاع في 24-09-2016 .
- يونكس
- تقنية نظام ملفات يونكس
