في Linux، تحتوي الملفات على ثلاث مجموعات من الأذونات. مجموعة واحدة مخصصة لمجموعة الملف. قبل تخصيص ملف لمجموعة، قد ترغب في التحقق من أعضاء المجموعة.
أذونات الملفات والدلائل
تحتوي الملفات والدلائل على Linux على مجموعة من الأذونات للمالك، ومجموعة أخرى للمجموعة التي تم تخصيص الملف لها، وأذونات لكل شخص ليس ضمن إحدى الفئتين السابقتين.
تحدد كل مجموعة من الأذونات ما إذا كان أعضاء هذه الفئة قادرين على قراءة الملف أو كتابته أو تنفيذه. وفي حالة الدليل، فإن إجراء التنفيذ يعادل القدرة على
cd
إلى الدليل.
المجموعة الافتراضية لملف أو دليل هي المجموعة الافتراضية للمالك. وهو عادةً الشخص الذي أنشأه. تُستخدم أذونات المجموعة للسماح لمجموعة من المستخدمين بالوصول المتحكم فيه إلى الملفات والدلائل الخاصة بالأعضاء الآخرين في تلك المجموعة.
على سبيل المثال، قد يكون لديك فريق من المطورين وفريق توثيق وفريق بحث وما إلى ذلك. يمكن إضافة أعضاء كل فريق إلى مجموعة تحمل اسمًا مناسبًا، للمساعدة في التعاون. يمكن للمستخدمين التواجد في العديد من المجموعات في وقت واحد.
إنها خطة بسيطة ولكنها قوية. ولكن إذا كانت ملفاتك حساسة، فقد تشعر بسعادة أكبر عند التحقق من هوية أعضاء المجموعة، قبل مشاركة عملك معهم. هناك طرق مختلفة للقيام بذلك. ولكن انتبه. الطريقتان الأكثر شيوعًا موصى بهما هما إشكاليتان.
ملف /etc/groups
يحتوي ملف “/etc/group” على علامة النقطتين ”
:
“قائمة محددة من المجموعات وأعضاء المجموعة. يحتوي كل سطر على أربعة حقول.
- اسم:الاسم الفريد للمجموعة.
- كلمة المرور:لم يتم استخدامه. سيحمل هذا دائمًا “x”.
- معرف المجموعة:معرف المجموعة الفريد.
- المستخدمون:قائمة مفصولة بفاصلة لأعضاء المجموعة. عادةً ما تكون القائمة فارغة بالنسبة لحسابات النظام والخادم.
لإفراغ محتويات الملف إلى نافذة المحطة الطرفية، يمكنك استخدام
cat
ولكن من الأفضل أن تتمكن من التمرير عبر محتويات الملف باستخدام less
.
less /etc/group
معظم الإدخالات الموجودة في أعلى القائمة ليس لها أعضاء، على الرغم من أن المجموعة “adm” بها عضوين، ومجموعة “cdrom” بها عضو واحد.
إذا أردنا اكتشاف المجموعات التي ينتمي إليها مستخدم معين، فيمكننا استخدام grep
البحث عن الإدخالات التي تحمل اسم حساب المستخدم. هذه ليست مهمتنا. نريد أن نرى كل من هو عضو في مجموعة، وليس المجموعات التي ينتمي إليها شخص ما. لكن من المفيد لنا أن نلقي نظرة.
grep "dave" /etc/group
تم إدراج الإدخالات التي تحتوي على السلسلة “dave” لنا. ومن بين هذه الإدخالات توجد إشارة إلى أن الأمور قد لا تكون بهذه البساطة كما كنا نظن.
عند إضافة مستخدم إلى Linux، يكون الإجراء الافتراضي هو وضعه في مجموعة تحمل نفس اسم حساب المستخدم الخاص به. هذه هي مجموعته الأساسية. تُعرف أي مجموعات أخرى يُضاف إليها بالمجموعات الثانوية.
المشكلة هي أن المستخدمين غير مدرجين كأعضاء في مجموعاتهم الأساسية. ولهذا السبب لا تعرض المجموعة “dave” أي أعضاء، على الرغم من أن المستخدم “dave” عضو في تلك المجموعة.
بالطبع، يمكن لمسؤولي النظام تغيير المجموعة الأساسية لأي مستخدم إلى أي مجموعة أخرى. وهذا يعني أن المستخدم يمكن أن يكون عضوًا في أي مجموعة، ولكن لن يتم إدراجه على هذا النحو في ملف “/etc/group”. وهذه مشكلة واحدة.
المشكلة الثانية هي أن ملف “/etc/group” ليس مصدرًا واحدًا للحقيقة. قد تخزن أنظمة Linux الحديثة معلومات المستخدم والمجموعة في أماكن أكثر من “/etc/passwd” و”/etc/group”، وخاصة في المواقف المؤسسية حيث يتم توفير خدمات مثل بروتوكول الوصول إلى الدليل الخفيف يتم نشرها. من خلال النظر في مكان واحد فقط، قد لا تتمكن من رؤية الصورة الكبيرة.
في سيناريو الاختبار الخاص بنا، قمنا بإنشاء أربع مجموعات لقسم التطوير. وهي:
- إعادة التبخير:فريق البحث.
- فريق التطوير:فريق التطوير.
- فريق pvq:فريق التحقق من المنتج والجودة.
- فريق الطبيب:فريق التوثيق.
لقد أضفنا أشخاصًا إلى هذه الفرق. بعض الأشخاص في أكثر من فريق. إذا فتحنا ملف “/etc/group” في less
وبالانتقال إلى أسفل الملف، سنرى المجموعات الجديدة وأعضاء المجموعة. على الأقل، سنرى عددًا من الأعضاء بقدر ما يعرفه ملف “/etc/group”.
إذا أردنا استخراج مجموعة واحدة، يمكننا البحث باستخدام grep
.العلامة “^
“يمثل بداية السطر.
grep "^devteam" /etc/group
يؤدي هذا إلى استخراج إدخال “devteam” من الملف وإدراج جميع أعضاء المجموعة. أم أنه لا يفعل ذلك؟
الأمر getent
ال getent
يتحقق الأمر من قواعد بيانات متعددة للحصول على معلومات عن مجموعات المستخدمين، وليس فقط “/etc/group”. سنستخدم getent
لإظهار لنا مجموعات المستخدمين.
getent group
استخدام getent
مع group
ينتج الخيار – على جهاز الاختبار هذا – نفس النتائج التي نحصل عليها عند استخدام ملف “/etc/group”. وذلك لأننا لا نستخدم LDAP أو أي خدمة تسمية مركزية أخرى. لذا، لا توجد مصادر أخرى لـ getent
للإشارة إلى.
ليس من المستغرب إذن أن تتطابق النتائج مع تلك الموجودة في ملف “/etc/group”. ربما ما نراه هو في الواقع حقيقة الموقف. ربما كل شيء واضح ومباشر ـ على هذا الكمبيوتر ـ ما تراه هو ما تحصل عليه؟ دعنا نحجز الحكم على هذا.
ال getent
يمكن للأمر أن ينظر إلى مجموعة واحدة من أجلنا. سننظر إلى مجموعة “devteam”.
getent group devteam
لقد حصلنا على نفس النتائج تمامًا كما حدث من قبل. ولكن هناك طريقة للبحث بشكل أعمق.
أمر الغطاء
ال lid
الأمر هو جزء من libuser
مجموعة من الأدوات. تم تثبيتها بالفعل على جهاز الكمبيوتر التجريبي الذي يعمل بنظام Fedora 36 ولكن كان لا بد من تثبيتها على أجهزة الكمبيوتر التي تعمل بنظام Ubuntu 22.04 وManjaro 21.
كما أن الأمر يسمى lid
على Fedora وManjaro، ولكن على Ubuntu، تحتاج إلى استخدام libuser-lid
.
لتثبيت الأمر على أوبونتو، اكتب:
sudo apt install libuser
على مانجارو، libuser
يتم تثبيته من AUR، لذا ستحتاج إلى استخدام مساعد AUR المفضل لديك. لقد استخدمنا yay
.
yay libuser
يمكنك استخدام libuser-lid
لعرض معلومات المجموعة حول المجموعات أو المستخدمين. لإظهار المجموعات التي ينتمي إليها شخص ما، مرر اسم حساب المستخدم الخاص به على سطر الأوامر. في Fedora وManjaro، تذكر استخدام lid
بدلاً من libuser-lid
.
sudo libuser-lib dave
لرؤية أعضاء المجموعة، استخدم -g
خيار (المجموعة) مع اسم المجموعة.
sudo libuser-lid -g devteam
والآن، ظهر مستخدم يُدعى “فرانسيس” كعضو في القائمة. هذه هي المرة الأولى التي نراه فيها. لم يتم إدراجه في “/etc/group” getent
ولم يكتشفوه أيضًا.
دعونا نلقي نظرة على عدد قليل من المستخدمين الذين لديهم groups
يأمر.
groups abigail
groups hayden
groups francis
- المستخدم “abigail” موجود في مجموعة تسمى “abigail” ومجموعتين أخريين، “resteam” و”devteam”.
- المستخدم “hayden” موجود في مجموعة تسمى “hayden” ومجموعتين أخريين، “pvqteam” و “docteam”.
- المستخدم “francis” موجود في مجموعة واحدة، وهي مجموعة “devteam”. ومن الجدير بالذكر أنه ليس في مجموعة باسم “francis”.
نحن نعلم أن كل مستخدم يجب أن يكون عضوًا في مجموعة أساسية، وأن المجموعة الأساسية لها بشكل افتراضي معرف مجموعة واسم يتطابقان مع معرف المستخدم واسم الحساب الخاصين بالمستخدم. ويبدو أن هناك شيئًا مختلفًا فيما يتعلق بالمستخدم “francis”.
دعونا نستخدم id
الأمر ورؤية ما يخبرنا به UID وGIDs.
id abigail
id francis
المستخدم “abigail” لديه معرف مستخدم 1002 ومعرف مجموعة 1002. وهم مقسمون إلى ثلاث مجموعات، واحدة منها تسمى “abigail”. ومعرف المجموعة 1002. هذه هي مجموعتهم الأساسية الافتراضية.
المستخدم “francis” لديه معرف مجموعة 1019، والذي يتطابق مع معرف مجموعة المجموعة “devteam”. إما أن هذا المستخدم قد تم تعيينه لمجموعة أساسية جديدة، أو أن مجموعة “devteam” تم تعيينها كمجموعة أساسية له عندما تمت إضافة هذا المستخدم إلى النظام.
أيهما كان، فقط libuser-lid
تم اكتشافهم والإبلاغ عن وجودهم في مجموعة “devteam”.
الشيطان يكمن في التفاصيل
لذا فمن المهم رؤية التفاصيل الحقيقية.
تعتبر المجموعات طريقة رائعة لإعداد التعاون، طالما أنك تعرف من ستفتحه معه.