معرف المجموعة في أنظمة يونكس

معرف المجموعة في أنظمة يونكس

في أنظمة التشغيل الشبيهة بيونكس (Unix-like systems)، يتم تنظيم المستخدمين في مجموعات لتسهيل إدارة الصلاحيات والوصول إلى الموارد. يعتمد نظام أذونات الملفات التقليدي ومعايير POSIX على تقسيم الصلاحيات إلى ثلاث فئات رئيسية: المستخدم (User)، المجموعة (Group)، والآخرون (Others). تتيح هذه البنية تفويض قدرات إضافية بشكل منظم، مثل الوصول إلى الأقراص الصلبة، الطابعات، والأجهزة الطرفية الأخرى، كما تمكن المستخدم الخارق (Superuser) من إسناد بعض المهام الإدارية لمستخدمين عاديين.

ما هو معرف المجموعة (GID)؟

معرف المجموعة، والذي يُرمز له اختصاراً بـ GID (Group Identifier)، هو قيمة عددية تُستخدم لتمثيل مجموعة محددة داخل النظام. تختلف نطاقات هذه القيم بين الأنظمة المختلفة، ولكن يشترط في جميعها أن يكون معرف المجموعة الخاص بالمستخدم الخارق هو 0. تُستخدم هذه القيمة العددية للإشارة إلى المجموعات في ملفات النظام مثل /etc/passwd و /etc/group، أو ما يعادلها في خدمات مثل خدمة معلومات الشبكة (NIS) وملفات كلمات المرور الظلية (Shadow password files).

سمات العمليات ومعرفات المجموعات

يدعم معيار POSIX ثلاثة حقول مختلفة لمعرف المجموعة في جدول وصف العملية (Process Descriptor Table)، مما يسمح للعمليات ذات الامتيازات بتغيير أدوارها ديناميكياً:

1. معرف المجموعة الفعال (Effective GID - egid)

يُستخدم egid للتحقق من صلاحيات الوصول إلى الملفات، وقد يؤثر أيضاً على عملية إنشاء الملفات بناءً على تنفيذ النواة (Kernel) وخيارات التركيب (Mount options) المستخدمة. تختلف السلوكيات هنا بين الأنظمة:

  • سلوك BSD Unix: يتم توريث ملكية المجموعة للملف الجديد من ملكية المجموعة للمجلد الذي أُنشئ فيه الملف بشكل غير مشروط.
  • سلوك AT&T UNIX System V (المعتمد في لينكس): يتم منح الملف الجديد عادةً ملكية المجموعة المحددة بواسطة egid للعملية التي أنشأت الملف.

يمكن تفعيل سلوك BSD في مجلدات محددة عند ضبط إذن S_ISGID (set-gid).

2. معرف المجموعة الحقيقي (Real GID - rgid)

يحدد rgid المالك الحقيقي للمجموعة التي تتبع لها العملية.

3. معرف المجموعة المحفوظ (Saved GID - sgid)

يُستخدم عندما تحتاج عملية تعمل بامتيازات عالية إلى أداء مهام غير مميزة مؤقتاً. عند تغيير egid من قيمة مميزة (عادةً 0) إلى قيمة غير مميزة، يتم تخزين القيمة المميزة في sgid. لاحقاً، يمكن للبرنامج استعادة الامتيازات المرتفعة عن طريق إعادة تعيين egid إلى القيمة المخزنة في sgid.

المجموعات الأساسية والإضافية

يجب أن يكون كل مستخدم عضواً في مجموعة واحدة على الأقل تُسمى المجموعة الأساسية (Primary Group)، ويتم تحديدها عبر GID الموجود في قاعدة بيانات كلمات المرور (مثل /etc/passwd). بالإضافة إلى ذلك، يمكن للمستخدم أن يكون عضواً في مجموعات أخرى تُعرف بـ المجموعات الإضافية (Supplementary Groups)، والتي يتم إدراجها في قاعدة بيانات المجموعات (مثل /etc/group).

الاصطلاحات الفنية والنطاقات

نوع البيانات

في البداية، كان يتم استخدام عدد صحيح موقع (Signed 16-bit integer)، ولكن نظراً لأن معرفات المجموعات لا يمكن أن تكون سالبة، تم الانتقال إلى استخدام الأعداد الصحيحة غير الموقعة (Unsigned integer)، مما رفع النطاق إلى 0-65,535. في الأنظمة الحديثة، تُستخدم عادةً أعداد صحيحة غير موقعة بـ 32 بت، مما يسمح بنطاق يصل إلى 4,294,967,295.

النطاقات المحجوزة

تعتمد العديد من توزيعات لينكس نطاقات محددة لـ GID:

  • 0 إلى 99: للمجموعات المخصصة استاتيكياً (Statically allocated).
  • 100 إلى 499 أو 999: للمجموعات التي يتم تخصيصها ديناميكياً بواسطة النظام أثناء نصوص التثبيت.

في نظام FreeBSD، يمكن لمطوري الحزم اختيار معرف GID حر من النطاق 50 إلى 999 وتسجيله في ports/GIDs.

قيم خاصة

  • 0: معرف المجموعة الخاص بالمستخدم الخارق (Root).
  • -1: قيمة محجوزة في معيار POSIX للإشارة إلى وسيط محذوف أو مهمل.
  • 65,534: القيمة الافتراضية في نواة لينكس (تُسمى غالباً nogroup) عندما لا يتناسب معرف GID بـ 32 بت مع قيمة إرجاع استدعاء نظام بـ 16 بت، أو عندما لا يتطابق اسم المجموعة في حزمة NFSv4 مع أي مجموعة معروفة في النظام.

المجموعات الشخصية

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

أسئلة شائعة

ما الفرق بين المجموعة الأساسية والمجموعة الإضافية؟

المجموعة الأساسية هي المجموعة الوحيدة التي ينتمي إليها المستخدم بشكل إلزامي وتحدد ملكية الملفات التي ينشئها، بينما المجموعات الإضافية هي مجموعات أخرى ينضم إليها المستخدم للحصول على صلاحيات وصول إضافية لموارد معينة.

ما هي وظيفة معرف المجموعة الفعال (egid)؟

يُستخدم egid بشكل أساسي للتحقق من صلاحيات الوصول إلى الملفات وتحديد ملكية المجموعة للملفات الجديدة التي يتم إنشاؤها.

لماذا يُستخدم معرف المجموعة المحفوظ (sgid)؟

يُستخدم للسماح للعمليات التي تملك امتيازات عالية بتخزين امتيازاتها مؤقتاً والعودة إليها بعد أداء مهام بصلاحيات محدودة، مما يزبد من أمان النظام.