كيفية إدراج جميع المستخدمين في مجموعة على نظام Linux
نشرت: 2022-08-29في نظام Linux ، تحتوي الملفات على ثلاث مجموعات من الأذونات. مجموعة واحدة لمجموعة الملف. قبل تخصيص ملف لمجموعة ، قد ترغب في التحقق من أعضاء المجموعة.
أذونات الملفات والدليل
تحتوي الملفات والأدلة على Linux على مجموعة من الأذونات للمالك ، ومجموعة أخرى للمجموعة التي تم تخصيص الملف لها ، وأذونات لكل شخص ليس في إحدى الفئتين السابقتين.
تحدد كل مجموعة من الأذونات ما إذا كان بإمكان أعضاء تلك الفئة قراءة الملف أو كتابته أو تنفيذه. في حالة وجود دليل ، فإن إجراء التنفيذ يعادل القدرة على cd
في الدليل.
المجموعة الافتراضية لملف أو دليل هي المجموعة الافتراضية للمالك. هذا هو عادة الشخص الذي أنشأها. تُستخدم أذونات المجموعة للسماح لمجموعة من المستخدمين بالتحكم في الوصول إلى الملفات والأدلة الخاصة بالأعضاء الآخرين في تلك المجموعة.
على سبيل المثال ، قد يكون لديك فريق من المطورين وفريق توثيق وفريق بحث وما إلى ذلك. يمكن إضافة أعضاء كل فريق إلى مجموعة مسماة بشكل مناسب ، للمساعدة في التعاون. يمكن للمستخدمين أن يكونوا في عدة مجموعات في وقت واحد.
إنه مخطط بسيط ولكنه قوي. ولكن إذا كانت ملفاتك حساسة ، فقد تشعر بالسعادة عندما تتحقق من أعضاء المجموعة ، قبل أن تشارك عملك معهم. هناك طرق مختلفة للقيام بذلك. لكن لاحظ. الطريقتان الأكثر شيوعًا هي مشكلة.
ذات صلة: كيفية استخدام الأمر chgrp على نظام Linux
ملف / etc / groups
يحتوي الملف "/ etc / group" على نقطتين " :
" قائمة محددة بالمجموعات وأعضاء المجموعة. كل سطر يحتوي على أربعة حقول.
- الاسم : الاسم الفريد للمجموعة.
- كلمة المرور : غير مستخدمة. سيحمل هذا دائمًا "x".
- معرف المجموعة : معرف المجموعة الفريد.
- المستخدمون : قائمة بأعضاء المجموعة مفصولة بفواصل. عادة ما تكون القائمة فارغة لحسابات النظام والحسابات الخفية.
لتفريغ محتويات الملف في النافذة الطرفية ، يمكنك استخدام cat
، ولكن من الملائم أن تكون قادرًا على التمرير عبر محتويات الملف less
.
أقل / الخ / المجموعة
معظم الإدخالات الموجودة في أعلى القائمة لا تحتوي على أعضاء ، على الرغم من أن مجموعة "adm" بها عضوان ومجموعة "cdrom" بها عضو واحد.
إذا أردنا اكتشاف المجموعات التي ينتمي إليها مستخدم معين ، فيمكننا استخدام grep
للبحث عن إدخالات باسم حساب المستخدم الخاص بهم. هذه ليست مهمتنا في متناول اليد. نريد أن نرى كل من هو عضو في مجموعة ، وليس المجموعات التي ينتمي إليها شخص واحد. لكن من المفيد لنا أن نلقي نظرة.
grep "ديف" / الخ / المجموعة
يتم سرد الإدخالات التي تحتوي على سلسلة "ديف" بالنسبة لنا. والابتعاد بينهم هو علامة على أن الأشياء قد لا تكون بهذه البساطة التي كنا نظن.
عند إضافة مستخدم إلى Linux ، يكون الإجراء الافتراضي هو وضعه في مجموعة تحمل نفس اسم حساب المستخدم الخاص بهم. هذه هي مجموعتهم الأساسية . تُعرف أي مجموعات أخرى تمت إضافتهم إليها بالمجموعات الثانوية .
المشكلة هي أن المستخدمين غير مدرجين كأعضاء في مجموعاتهم الأساسية . هذا هو السبب في أن مجموعة “ديف” لا تظهر أي أعضاء ، على الرغم من أن المستخدم “ديف” هو عضو في تلك المجموعة.
بالطبع ، يمكن لمسؤولي النظام تغيير المجموعة الأساسية لأي مستخدم إلى مجموعة أخرى. هذا يعني أنه يمكن للمستخدم أن يكون عضوًا في أي مجموعة ولكن لن يتم إدراجه على هذا النحو في ملف "/ etc / group". هذه قضية واحدة.
المسألة الثانية هي أن ملف "etc / group" ليس مصدرًا وحيدًا للحقيقة. قد تخزن عمليات تثبيت Linux الحديثة معلومات المستخدم والمجموعة في أماكن أكثر من "/ etc / passwd" و "/ etc / group" ، خاصة في مواقف الشركات حيث يتم نشر خدمات مثل Lightweight Directory Access Protocol. من خلال النظر في مكان واحد فقط ، قد لا ترى الصورة الكبيرة.
في سيناريو الاختبار الخاص بنا ، أنشأنا أربع مجموعات لقسم التطوير. هم انهم:
- resteam : فريق البحث.
- devteam : فريق التطوير.
- pvqteam : فريق التحقق من المنتج والجودة.
- الطبيب : فريق التوثيق.
أضفنا أشخاصًا إلى هذه الفرق. بعض الناس في أكثر من فريق. إذا فتحنا ملف "/ etc / group" في less
وانتقلنا إلى أسفل الملف ، فسنرى المجموعات الجديدة وأعضاء المجموعة. على الأقل ، عدد الأعضاء الذين يعرفهم ملف "/ etc / group".
إذا أردنا استخراج مجموعة واحدة ، فيمكننا البحث باستخدام grep
. علامة الإقحام " ^
" تمثل بداية السطر.
grep "^ devteam" / etc / group
يؤدي هذا إلى استخراج إدخال "devteam" من الملف ويسرد جميع أعضاء المجموعة. أم هو كذلك؟
الأمر getent
يتحقق الأمر getent
من قواعد بيانات متعددة لمعلومات مجموعة المستخدمين ، وليس فقط "/ etc / group". سنستخدم getent
لتظهر لنا مجموعات المستخدمين.
مجموعة getent
ينتج عن استخدام getent
مع خيار group
- على جهاز الاختبار هذا - نفس النتائج مثل استخدام الملف "/ etc / group". هذا لأننا لا نستخدم LDAP أو أي خدمة تسمية مركزية أخرى. لذلك لا توجد مصادر أخرى يمكن getent
إليها.
ليس من المستغرب إذن أن تتطابق النتائج مع تلك الموجودة في الملف "/ etc / group". ربما ما نراه حقًا هو حقيقة الموقف. ربما يكون كل شيء واضحًا - وعلى هذا الكمبيوتر - ما تراه هو ما تحصل عليه؟ دعونا نحتفظ بالحكم على ذلك.
يمكن لأمر getent
أن ينظر إلى مجموعة واحدة لنا. سنلقي نظرة على مجموعة "devteam".
فريق تطوير المجموعة getent
نحصل بالضبط على نفس النتائج كما كان من قبل. هناك طريقة للحفر أعمق بالرغم من ذلك.
ذات صلة: كيفية سرد المستخدمين في Linux
أمر الغطاء
يعد الأمر lid
جزءًا من مجموعة أدوات libuser
. تم تثبيته بالفعل على حاسوب الاختبار Fedora 36 الخاص بنا ولكن كان لابد من تثبيته على نظامي Ubuntu 22.04 و Manjaro 21.
أيضًا ، يُطلق على الأمر اسم lid
في Fedora و Manjaro ، ولكن في Ubuntu ، تحتاج إلى استخدام libuser-lid
.
لتثبيت الأمر على Ubuntu ، اكتب:
sudo apt تثبيت libuser
في Manjaro ، يتم تثبيت libuser
من AUR ، لذلك ستحتاج إلى استخدام مساعد AUR المفضل لديك. استخدمنا yay
.
yay libuser
يمكنك استخدام libuser-lid
لعرض معلومات المجموعة حول المجموعات أو المستخدمين. لإظهار المجموعات التي ينتمي إليها الفرد ، قم بتمرير اسم حساب المستخدم الخاص بهم في سطر الأوامر. تذكر في Fedora و Manjaro استخدام lid
بدلاً من libuser-lid
.
sudo libuser-lib ديف
لرؤية أعضاء المجموعة ، استخدم الخيار -g
(المجموعة) مع اسم المجموعة.
sudo libuser-lid -g devteam
حسنًا ، ظهر مستخدم يُدعى "francis" كعضو في القائمة. هذه أول مرة نراه فيها. إنه غير مدرج في "/ etc / group" ولم يكتشفه getent
أيضًا.
لنلقِ نظرة على عدد قليل من المستخدمين باستخدام أمر groups
.
مجموعات أبيجيل
مجموعات hayden
مجموعات فرنسيس
- المستخدم "أبيجيل" موجود في مجموعة تسمى "أبيجيل" ومجموعتين أخريين ، "ريستيم" و "ديفتيم".
- المستخدم "hayden" موجود في مجموعة تسمى "hayden" ومجموعتين أخريين ، "pvqteam" و "decteam".
- المستخدم "francis" موجود في مجموعة واحدة ، مجموعة "devteam". من الملاحظ أنهم ليسوا في مجموعة اسمها "فرانسيس".
نحن نعلم أن كل مستخدم يجب أن يكون عضوًا في مجموعة أساسية وأن المجموعة الأساسية لديها افتراضيًا GID واسم يتطابق مع UID واسم الحساب للمستخدم. يبدو أن هناك شيئًا مختلفًا بشأن المستخدم "francis".
دعنا نستخدم الأمر id
ونرى ما يخبرنا به UID و GID.
معرف أبيجيل
معرف فرانسيس
المستخدم "أبيجيل" لديه معرّف فريد 1002 ومعرف GID من 1002. وهم مقسمون إلى ثلاث مجموعات ، واحدة منها تسمى "أبيجيل". لديها معرّف GID يبلغ 1002. هذه هي مجموعتهم الأساسية الافتراضية .
المستخدم "francis" لديه معرّف GID 1019 ، والذي يتطابق مع GID لمجموعة "devteam". تم تعيين مجموعة أساسية جديدة لهذا المستخدم ، أو تم تعيين مجموعة "devteam" كمجموعة أساسية عند إضافة هذا المستخدم إلى النظام.
أيًا كان الأمر ، libuser-lid
فقط وأبلغ عن وجودها في مجموعة "devteam".
الشيطان في التفاصيل
لذلك من المهم أن ترى التفاصيل الحقيقية.
تعد المجموعات طريقة رائعة لإعداد التعاون ، طالما أنك تعرف من تفتحه معه.
ذات صلة: كيفية تغيير بيانات المستخدم باستخدام chfn و usermod على نظام Linux