كيفية إدراج جميع المستخدمين في مجموعة على Linux

في Linux، تحتوي الملفات على ثلاث مجموعات من الأذونات. مجموعة واحدة مخصصة لمجموعة الملف. قبل تخصيص ملف لمجموعة، قد ترغب في التحقق من أعضاء المجموعة.




أذونات الملفات والدلائل

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

تحدد كل مجموعة من الأذونات ما إذا كان أعضاء هذه الفئة قادرين على قراءة الملف أو كتابته أو تنفيذه. وفي حالة الدليل، فإن إجراء التنفيذ يعادل القدرة على

cd 

إلى الدليل.

المجموعة الافتراضية لملف أو دليل هي المجموعة الافتراضية للمالك. وهو عادةً الشخص الذي أنشأه. تُستخدم أذونات المجموعة للسماح لمجموعة من المستخدمين بالوصول المتحكم فيه إلى الملفات والدلائل الخاصة بالأعضاء الآخرين في تلك المجموعة.

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


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

ذات صلة: كيفية استخدام الأمر chgrp على Linux

ملف /etc/groups

يحتوي ملف “/etc/group” على علامة النقطتين ”

: 

“قائمة محددة من المجموعات وأعضاء المجموعة. يحتوي كل سطر على أربعة حقول.

  • اسم:الاسم الفريد للمجموعة.
  • كلمة المرور:لم يتم استخدامه. سيحمل هذا دائمًا “x”.
  • معرف المجموعة:معرف المجموعة الفريد.
  • المستخدمون:قائمة مفصولة بفاصلة لأعضاء المجموعة. عادةً ما تكون القائمة فارغة بالنسبة لحسابات النظام والخادم.

لإفراغ محتويات الملف إلى نافذة المحطة الطرفية، يمكنك استخدام

cat 

ولكن من الأفضل أن تتمكن من التمرير عبر محتويات الملف باستخدام less.

less /etc/group


استخدام cat لرؤية محتويات ملف /etc/group

معظم الإدخالات الموجودة في أعلى القائمة ليس لها أعضاء، على الرغم من أن المجموعة “adm” بها عضوين، ومجموعة “cdrom” بها عضو واحد.

الجزء الأول من ملف /etc/groups في عارض الملفات less

إذا أردنا اكتشاف المجموعات التي ينتمي إليها مستخدم معين، فيمكننا استخدام grep البحث عن الإدخالات التي تحمل اسم حساب المستخدم. هذه ليست مهمتنا. نريد أن نرى كل من هو عضو في مجموعة، وليس المجموعات التي ينتمي إليها شخص ما. لكن من المفيد لنا أن نلقي نظرة.

grep "dave" /etc/group


قائمة المجموعات التي يكون المستخدم dave عضوًا فيها

تم إدراج الإدخالات التي تحتوي على السلسلة “dave” لنا. ومن بين هذه الإدخالات توجد إشارة إلى أن الأمور قد لا تكون بهذه البساطة كما كنا نظن.

عند إضافة مستخدم إلى Linux، يكون الإجراء الافتراضي هو وضعه في مجموعة تحمل نفس اسم حساب المستخدم الخاص به. هذه هي مجموعته الأساسية. تُعرف أي مجموعات أخرى يُضاف إليها بالمجموعات الثانوية.

المشكلة هي أن المستخدمين غير مدرجين كأعضاء في مجموعاتهم الأساسية. ولهذا السبب لا تعرض المجموعة “dave” أي أعضاء، على الرغم من أن المستخدم “dave” عضو في تلك المجموعة.

بالطبع، يمكن لمسؤولي النظام تغيير المجموعة الأساسية لأي مستخدم إلى أي مجموعة أخرى. وهذا يعني أن المستخدم يمكن أن يكون عضوًا في أي مجموعة، ولكن لن يتم إدراجه على هذا النحو في ملف “/etc/group”. وهذه مشكلة واحدة.


المشكلة الثانية هي أن ملف “/etc/group” ليس مصدرًا واحدًا للحقيقة. قد تخزن أنظمة Linux الحديثة معلومات المستخدم والمجموعة في أماكن أكثر من “/etc/passwd” و”/etc/group”، وخاصة في المواقف المؤسسية حيث يتم توفير خدمات مثل بروتوكول الوصول إلى الدليل الخفيف يتم نشرها. من خلال النظر في مكان واحد فقط، قد لا تتمكن من رؤية الصورة الكبيرة.

في سيناريو الاختبار الخاص بنا، قمنا بإنشاء أربع مجموعات لقسم التطوير. وهي:

  • إعادة التبخير:فريق البحث.
  • فريق التطوير:فريق التطوير.
  • فريق pvq:فريق التحقق من المنتج والجودة.
  • فريق الطبيب:فريق التوثيق.

لقد أضفنا أشخاصًا إلى هذه الفرق. بعض الأشخاص في أكثر من فريق. إذا فتحنا ملف “/etc/group” في less وبالانتقال إلى أسفل الملف، سنرى المجموعات الجديدة وأعضاء المجموعة. على الأقل، سنرى عددًا من الأعضاء بقدر ما يعرفه ملف “/etc/group”.


الجزء السفلي من ملف /etc/group في عارض الملفات less

إذا أردنا استخراج مجموعة واحدة، يمكننا البحث باستخدام grep.العلامة “^“يمثل بداية السطر.

grep "^devteam" /etc/group

استخدام grep لاستخراج الأعضاء لمجموعة واحدة

يؤدي هذا إلى استخراج إدخال “devteam” من الملف وإدراج جميع أعضاء المجموعة. أم أنه لا يفعل ذلك؟

الأمر getent

ال getent يتحقق الأمر من قواعد بيانات متعددة للحصول على معلومات عن مجموعات المستخدمين، وليس فقط “/etc/group”. سنستخدم getent لإظهار لنا مجموعات المستخدمين.

getent group


استخدام getent لإدراج جميع المجموعات المحددة

استخدام getent مع group ينتج الخيار – على جهاز الاختبار هذا – نفس النتائج التي نحصل عليها عند استخدام ملف “/etc/group”. وذلك لأننا لا نستخدم LDAP أو أي خدمة تسمية مركزية أخرى. لذا، لا توجد مصادر أخرى لـ getent للإشارة إلى.

الناتج من مجموعة getent التي تظهر المجموعات والأعضاء

ليس من المستغرب إذن أن تتطابق النتائج مع تلك الموجودة في ملف “/etc/group”. ربما ما نراه هو في الواقع حقيقة الموقف. ربما كل شيء واضح ومباشر ـ على هذا الكمبيوتر ـ ما تراه هو ما تحصل عليه؟ دعنا نحجز الحكم على هذا.


ال getent يمكن للأمر أن ينظر إلى مجموعة واحدة من أجلنا. سننظر إلى مجموعة “devteam”.

getent group devteam

استخدام مجموعة getent لاستخراج تفاصيل مجموعة واحدة

لقد حصلنا على نفس النتائج تمامًا كما حدث من قبل. ولكن هناك طريقة للبحث بشكل أعمق.

ذات صلة: كيفية إدراج المستخدمين في Linux

أمر الغطاء

ال lid الأمر هو جزء من libuser مجموعة من الأدوات. تم تثبيتها بالفعل على جهاز الكمبيوتر التجريبي الذي يعمل بنظام Fedora 36 ولكن كان لا بد من تثبيتها على أجهزة الكمبيوتر التي تعمل بنظام Ubuntu 22.04 وManjaro 21.

كما أن الأمر يسمى lid على Fedora وManjaro، ولكن على Ubuntu، تحتاج إلى استخدام libuser-lid.

لتثبيت الأمر على أوبونتو، اكتب:

sudo apt install libuser


تثبيت libuser على أوبونتو

على مانجارو، libuser يتم تثبيته من AUR، لذا ستحتاج إلى استخدام مساعد AUR المفضل لديك. لقد استخدمنا yay.

yay libuser

تثبيت libuser على Manjaro

يمكنك استخدام libuser-lid لعرض معلومات المجموعة حول المجموعات أو المستخدمين. لإظهار المجموعات التي ينتمي إليها شخص ما، مرر اسم حساب المستخدم الخاص به على سطر الأوامر. في Fedora وManjaro، تذكر استخدام lid بدلاً من libuser-lid.

sudo libuser-lib dave

استخدام libuser-lid لإظهار المجموعات التي يكون المستخدم dave عضوًا فيها


لرؤية أعضاء المجموعة، استخدم -g خيار (المجموعة) مع اسم المجموعة.

sudo libuser-lid -g devteam

استخدام libuser-lid لإدراج أعضاء مجموعة devteam

والآن، ظهر مستخدم يُدعى “فرانسيس” كعضو في القائمة. هذه هي المرة الأولى التي نراه فيها. لم يتم إدراجه في “/etc/group” getent ولم يكتشفوه أيضًا.

دعونا نلقي نظرة على عدد قليل من المستخدمين الذين لديهم groups يأمر.

groups abigail

groups hayden

groups francis

استخدام أمر المجموعات لتحديد مجموعة من المستخدمين


  • المستخدم “abigail” موجود في مجموعة تسمى “abigail” ومجموعتين أخريين، “resteam” و”devteam”.
  • المستخدم “hayden” موجود في مجموعة تسمى “hayden” ومجموعتين أخريين، “pvqteam” و “docteam”.
  • المستخدم “francis” موجود في مجموعة واحدة، وهي مجموعة “devteam”. ومن الجدير بالذكر أنه ليس في مجموعة باسم “francis”.

ذات صلة: إضافة مستخدم إلى مجموعة (أو مجموعة ثانية) على Linux

نحن نعلم أن كل مستخدم يجب أن يكون عضوًا في مجموعة أساسية، وأن المجموعة الأساسية لها بشكل افتراضي معرف مجموعة واسم يتطابقان مع معرف المستخدم واسم الحساب الخاصين بالمستخدم. ويبدو أن هناك شيئًا مختلفًا فيما يتعلق بالمستخدم “francis”.

دعونا نستخدم id الأمر ورؤية ما يخبرنا به UID وGIDs.

id abigail

id francis

استخدام أمر id على المستخدمين abigail وfrancis


المستخدم “abigail” لديه معرف مستخدم 1002 ومعرف مجموعة 1002. وهم مقسمون إلى ثلاث مجموعات، واحدة منها تسمى “abigail”. ومعرف المجموعة 1002. هذه هي مجموعتهم الأساسية الافتراضية.

المستخدم “francis” لديه معرف مجموعة 1019، والذي يتطابق مع معرف مجموعة المجموعة “devteam”. إما أن هذا المستخدم قد تم تعيينه لمجموعة أساسية جديدة، أو أن مجموعة “devteam” تم تعيينها كمجموعة أساسية له عندما تمت إضافة هذا المستخدم إلى النظام.

أيهما كان، فقط libuser-lid تم اكتشافهم والإبلاغ عن وجودهم في مجموعة “devteam”.

الشيطان يكمن في التفاصيل

لذا فمن المهم رؤية التفاصيل الحقيقية.

تعتبر المجموعات طريقة رائعة لإعداد التعاون، طالما أنك تعرف من ستفتحه معه.

ذات صلة: كيفية تغيير بيانات المستخدم باستخدام chfn وusermod على Linux

أضف تعليق