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

نشرت: 2022-08-29
كمبيوتر محمول Linux يعرض موجه bash
fatmawati achmad zaenuri / Shutterstock.com

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

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

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

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

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

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

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

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

ملف / etc / groups

يحتوي الملف "/ etc / group" على نقطتين " : " قائمة محددة بالمجموعات وأعضاء المجموعة. كل سطر يحتوي على أربعة حقول.

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

لتفريغ محتويات الملف في النافذة الطرفية ، يمكنك استخدام cat ، ولكن من الملائم أن تكون قادرًا على التمرير عبر محتويات الملف less .

 أقل / الخ / المجموعة 

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

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

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

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

 grep "ديف" / الخ / المجموعة 

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

يتم سرد الإدخالات التي تحتوي على سلسلة "ديف" بالنسبة لنا. والابتعاد بينهم هو علامة على أن الأشياء قد لا تكون بهذه البساطة التي كنا نظن.

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

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

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

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

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

  • resteam : فريق البحث.
  • devteam : فريق التطوير.
  • pvqteam : فريق التحقق من المنتج والجودة.
  • الطبيب : فريق التوثيق.

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

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

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

 grep "^ devteam" / etc / group 

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

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

الأمر getent

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

 مجموعة getent 

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

ينتج عن استخدام getent مع خيار group - على جهاز الاختبار هذا - نفس النتائج مثل استخدام الملف "/ etc / group". هذا لأننا لا نستخدم LDAP أو أي خدمة تسمية مركزية أخرى. لذلك لا توجد مصادر أخرى يمكن getent إليها.

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

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

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

 فريق تطوير المجموعة getent 

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

نحصل بالضبط على نفس النتائج كما كان من قبل. هناك طريقة للحفر أعمق بالرغم من ذلك.

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

أمر الغطاء

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

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

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

 sudo apt تثبيت libuser 

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

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

 yay libuser 

تثبيت libuser على Manjaro

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

 sudo libuser-lib ديف 

استخدام libuser-lid لإظهار المجموعات التي ينتمي إليها المستخدم

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

 sudo libuser-lid -g devteam 

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

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

لنلقِ نظرة على عدد قليل من المستخدمين باستخدام أمر groups .

 مجموعات أبيجيل
 مجموعات hayden
 مجموعات فرنسيس 

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

  • المستخدم "أبيجيل" موجود في مجموعة تسمى "أبيجيل" ومجموعتين أخريين ، "ريستيم" و "ديفتيم".
  • المستخدم "hayden" موجود في مجموعة تسمى "hayden" ومجموعتين أخريين ، "pvqteam" و "decteam".
  • المستخدم "francis" موجود في مجموعة واحدة ، مجموعة "devteam". من الملاحظ أنهم ليسوا في مجموعة اسمها "فرانسيس".
أضف مستخدمًا إلى مجموعة (أو مجموعة ثانية) على نظام Linux
ذات صلة أضف مستخدمًا إلى مجموعة (أو مجموعة ثانية) على نظام Linux

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

دعنا نستخدم الأمر id ونرى ما يخبرنا به UID و GID.

 معرف أبيجيل
 معرف فرانسيس 

استخدام الأمر id على المستخدمين أبيجيل وفرانسيس

المستخدم "أبيجيل" لديه معرّف فريد 1002 ومعرف GID من 1002. وهم مقسمون إلى ثلاث مجموعات ، واحدة منها تسمى "أبيجيل". لديها معرّف GID يبلغ 1002. هذه هي مجموعتهم الأساسية الافتراضية .

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

أيًا كان الأمر ، libuser-lid فقط وأبلغ عن وجودها في مجموعة "devteam".

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

لذلك من المهم أن ترى التفاصيل الحقيقية.

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

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