إدارة المستخدمين والمجموعات على Red Hat Enterprise Linux


محمد أحمد العيل

تتطلّب إدارة خادوم Red Hat Enterprise Linux، مثل أي خادوم عموما، معرفة كيفيّة إضافة حسابات المستخدمين، تعديلها، تعليقها أو حذفها. ستحتاج أيضا خلال إدارة الخادوم لمعرفة كيف تمنح المستخدمين الصّلاحيات الضروريّة على الملفات، المجلّدات وموارد النّظام الأخرى حتى يتمكنوا من إنجاز مهامهم.

rhcsa-users-groups.png

إدارة حسابات المستخدمين

تحتاج حتى تتمكّن من إدارة المستخدمين أن تكون لديك صلاحيّات المدير الأعلى (الجذر root). لذا سنبدأ بالانتقال إلى المستخدم الجذر بتنفيذ الأمر:

$ su -
Password: 
Last login: Wed May 11 12:58:50 GMT 2016 on pts/0
[root@localhost ~]#

يُستخدَم الأمر su للتبديل بين حسابات المستخدمين؛ وعند تمرير المعطى - له فسينتقل للحساب الجذر بعد طلب كلمة السّر.

ملحوظة تشير العلامة # أمام الأمر إلى أنه يُنفَّذ من الحساب الجذر.

إضافة مستخدم جديد

يُستخدَم الأمران التاليان لإضافة حساب مستخدِم جديد:

# adduser username
# useradd username

حيثُ username هو اسم الحساب الجديد.

ملحوظة 1: إن كانت لديك تجربة سابقة مع توزيعات دبيانيّة (أوبونتو مثلا) فـ adduser هناك مختلف عنه هنا. الأمر adduser في RHEL (والتوزيعات المبنيّة على ردهات عموما) هو مجرّد وصلة رمزيّة للأمر useradd؛ بينما هو سكربت منفصل في دبيان؛ ولكنّه يعتمد على useradd وأوامر أخرى.

ملحوظة 2: ستحتاج أولا لتعيين كلمة سرّ للحساب قبل التمكن من البدء في استخدامه (سنرى كيف ذلك بعد قليل).

ينفّذ النظام المهامّ التاليّة عند إضافة مستخدم جديد:

  • إنشاء مجلّد شخصي للمستخدِم (مبدئيا على المسار home/username/ ما لم يُطلب منه غير ذلك).
  • تُنسَخ الملفات bash_logout. وbash_profile. وbashrc. (وهي ملفات مخفيّة) إلى المجلّد الشخصي للمستخدِم. تُستعمَل هذه الملفات لضبط الإعدادات الخاصّة بجلسة Session المستخدم.
  • إنشاء مجلّد خاص بمسلَك بريد Mail spool المستخدِم.
  • إنشاء مجموعة مستخدمين بنفس اسم الحساب وإضافته إليها.

ملحوظة: مسلك البريد هو ملفّ يخزّن رأسيات البريد (مثل عنوان المُرسِل، تاريخ التسليم، … إلخ) ومحتوياته. يوجد على المسار /var/spool/mail/ مجلّد فرعي لكلّ مستخدم على النّظام. يستخدم بعض عملاء البريد هذا المجلّد بينما لا يستخدمه البعض الآخر.

يُخزّن النظام معلومات عامّة عن جميع الحسابات في الملف etc/passwd/. توجد في هذا الملفّ أسطُر يمثّل كل واحد منها سجلّا لحساب مستخدِم. يأخذ كلّ سطر الصّيغة التاليّة:

[username]:[x]:[UID]:[GID]:[Comment]:[Home directory]:[Default shell]

السّطر مكوّن من حقول تفصل نقطتان : بين كل حقلين.

  • يضمّ الحقل الأول [username] اسمَ الحساب.
  • يشير الحقل الثاني [x] إلى أن الحساب محميّ بكلمة سرّ توجد معمّاةً Encrypted في الملفّ (etc/shadow/).
  • يوجد في الحقليْن الثالث والرابع ([UID] و[GID]) على التوالي معرّف المستخدِم ومعرّف المجموعة الأوليّة Primary group التي ينتمي إليها.
  • الحقل الخامس [Comment] هو تعليق حول الحساب؛ يوضع فيه عادة وصفٌ للحساب وعمله.
  • يعرّف الحقل السادس [Home directory] المسار المُطلق لمجلد المستخدِم الشخصي.
  • يحدّد الحقل السابع الأخير [Default shell] الصّدفة Shell التي تُسنَد للمستخدِم بعد ولوجه إلى النظام.

يوجد ملفّ آخر يشبه etc/passwd/ من المهمّ التعوّد عليه وهو etc/group/. يحتفظ النظام في هذا الملفّ بمعلومات مجموعات المستخدِمين، سطر لكلّ مجموعة. صيغة السّطر هي كالتالي:

[Group name]:[Group password]:[GID]:[Group members]
  • يحدّد الحقل الأول [Group name] اسم المجموعة.
  • يُخصّص الحقل الثاني [Group password] لكلمة سر المجموعة في حال وجودها. توجد غالبا علامة x في هذا الحقل دلالةً على عدم وجود كلمة سر.
  • الحقل الثالث [GID] مطابق للحقل الرابع [GID] في ملف etc/passwd.
  • يقدّم الحقل الرابع [Group members] لائحة بالمستخدمين المنضوين تحت هذه المجموعة. يفصل بين أسماء الحسابات بفاصلة ,.

تعيين كلمة سر للمستخدم

يبقى الحساب المنشَأ حديثا بالأمر useradd (أو adduser) معطّلا إلى أن نعيّن له كلمة سرّ؛ نستخدم أمر passwd لهذا الغرض:

# passwd username

سيُطلب منك إدخال كلمة سر للحساب ثم تكرارها؛ كما في المثال التالي:

# useradd academy
# passwd academy
Changing password for user academy.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

طلب تغيير كلمة السر عند أول دخول

يدير الأمر chage معلومات تاريخ الحساب مثل عدد الأيام التي يجب بعدها تغيير كلمة سرّ الحساب وتاريخ آخر تغيير لكلمة السّر. يحدّد الخيّار d-، إذا ذُكر بعده تاريخٌ بالصيغة YYYY-MM-DD، تاريخ آخر مرة غُيِّرت فيها كلمة السّر؛ أما إذا ذكر بعده عدد فيفترض أن آخر تعديل تمّ بعد تاريخ 1 يناير 1970 بهذا العدد من الأيام (chage -d 1 تعني أن التعديل كان يوم 2 يناير 1970، chage -d 2 تعني أن التعديل كان يوم 3 يناير 1970 وهكذا). يفرض تمريرُ القيمة 0 للخيّار d- مع الأمر chage على المستخدِم تغيير كلمة السّر بعد الولوج إلى الحساب.

نعدّل في المثال التالي تاريخ التعديل الأخير لكلمة السّر ثم نحاول الدخول إلى الحساب academy بكلمة السّر التي عيّناها في الفقرة السابقة (اخرج من الحساب الجذر إن سبق لك تسجيل الدّخول به؛ واستخدم حسابا عاديًّا بعد تنفيذ الأمر chage):

# chage -d 0 academy
# exit
logout
$ su academy
Password: 
You are required to change your password immediately (root enforced)
Changing password for academy.
(current) UNIX password:
New password: 
Retype new password: 
$

ننتقل بالأمر su لاستخدام اسم الحساب الممرّر له (academy في حالتنا)؛ ستُطلب منا كلمة السّر التي عيناها سابق ثم بعد الولوج تظهر رسالة تطلب منا تعديل كلمة السّر. ندخل كلمة السر الحالية للاستمرار ثم نختار كلمة سر جديدة ونكرّرها.

التعديل على الحساب

يمكن بعد إضافة مستخدم تعديل حسابه في أي وقت بالأمر usermod:

# usermod options username

تحدّد خياراتٌ options سلوك الأمر و username الحساب الذي تُطبَّق عليه.

تحديد تاريخ انتهاء صلاحيّة لحساب مستخدِم

يتيح خيّار expiredate-- عند استخدامه مع الأمر usermod تحديد تاريخ يُعطَّل بعده الحساب.

ننتقل في المثال التالي إلى استخدام الحساب الإداري (الجذر root)، ثم ننشئ حسابا جديدا باسم academy1:

$ su -
Password: 
# useradd academy1

يمكننا إظهار معلومات تاريخ الحساب بالأمر التالي:

# chage -l academy1
Last password change                    : May 11, 2016
Password expires                    : never
Password inactive                   : never
Account expires                     : never
Minimum number of days between password change      : 0
Maximum number of days between password change      : 99999
Number of days of warning before password expires   : 7

نلاحظ أن قيمة Account expires ( انتهاء صلاحيّة الحساب) هي never أي أنه لا يوجد تاريخ انتهاء صلاحيّة. نستخدم الخيار expiredate-- مع الأمر usermod لتحديد تاريخ انتهاء صلاحية للحساب academy1 ثم نعرض معلومات عمر الحساب من جديد:

# usermod --expiredate=2016-06-01 academy1
# chage -l academy1
Last password change                    : May 11, 2016
Password expires                    : never
Password inactive                   : never
Account expires                     : Jun 01, 2016
Minimum number of days between password change      : 0
Maximum number of days between password change      : 99999
Number of days of warning before password expires   : 7

لاحظ تغيّر قيمة Account expires.

إضافة مستخدم إلى مجموعة ثانية

يُستخدم الخياران aG- مع الأمر usermod لإضافة مستخدم موجود إلى مجموعة أخرى غير المجموعة الأوليّة. ننشئ في المثال التالي مجموعة باسم hsoub ثم نضيف إليها المستخدم academy:

# groupadd hsoub
# usermod -aG hsoub academy

لاحظ أن اسمَ المجموعة يسبق اسم الحساب. يمكن التأكد من إضافة الحساب إلى المجموعة بعرض المجموعات التي ينتمي إليها الحساب academy كالتالي:

# groups academy
academy : academy hsoub

أي أن الحساب academy ينتمي إلى المجموعتيْن academy (المجموعة الأوليّة) وhsoub.

حذف مستخدم من مجموعة

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

# usermod -G "" academy
# groups academy
academy : academy

إن كان المستخدم عضوا في أكثر من مجموعة ثانويّة فيمكن حذفه من بعضها بذكر تلك التي ينتمي إليها فقط مع الخيّار G-. مثلا ينتمي العضو academy للمجموعات hsoub2، hsoub1 وhsoub3، ونريد حذفه من hsoub2؛ ننفذ الأمر كالتالي:

# usermod -G hsoub1,hsoub3 academy

تعديل المسار المبدئي لمجلّد المستخدم أو الصّدفة المسندة إليه

استخدم الخيار d- متبوعا بمسار تريده مع الأمر usermod إن أردت تغيير مكان المجلّد الشّخصي للمستخدِم. 

# usermod -d /home/test academy

نفس المبدأ مع الصّدفة المبدئية (bash)؛ استخدم الخيار shell-- متبوعا بمسار صدفة أخرى (sh مثلا): 

# usermod --shell /bin/sh academy

قفل كلمة المرور

يمكن باستخدام الخيّار L- مع الأمر usermod قفل كلمة سر المستخدم وبالتالي منعه من الدخول إلى الحساب وتعطيله: 

# usermod -L academy

إن جرّبت الآن الدخول إلى الحساب academy (بعد الخروج من الحساب الجذر) فستظهر رسالة بوجود خطأ في عمليّة الاستيثاق:

$ su academy
Password: 
su: Authentication failure

عد إلى الحساب الجذر واستخدم الخيّار U- لإلغاء قفل كلمة المرور وتفعيل الحساب.

# usermod -U academy

يمكن الآن الدخول إلى الحساب academy.

حذف مجموعة أو مستخدِم

استخدِم الأمر groupdel لحذف مجموعة مستخدمين. بالنسبة لحساب مستخدم فالأمر المستخدَم هو userdel (إضافة الخيار r- تحذف أيضا محتوى المجلد الشخصي ومسلك البريد).

# groupdel group_name
# userdel -r user_name

إدارة أذونات Permissions المستخدمين

يعدّ أمر ls أحد أكثر الأوامر استخداما أثناء إدارة الخواديم. استخدم الخيّار l- مع ls لسرد قائمة مفصّلة بمحتويات مجلّد. يمكن أيضا تطبيق الأمر على ملفّ واحد لعرض تفاصيله. تظهر عند استخدام الأمر ls -l خاصيّات الملفّ ومن بينها وضعه Mode الذي يوجد في بداية كل مُخرَج؛ وهو مكون من عشرة محارف.

يحدّد المحرف الأول نوع الملف ويمكن أن يأخذ إحدى القيم التالية:

  • -: ملفّ عادي.
  • d: مجلّد.
  • l: وصلة رمزيّة.
  • c: جهاز طرفيّ محرفي Character device (يعالج تدفق البيانات محرفا محرفا؛ مثل الطرفيّة).
  • b: جهاز طرفيّ كتليّ Block device (يعالج البيانات على كتل، مثل وسائط التخزين).

تحدّد المحارف التسعة التاليّة الأذونات المطبّقة على الملفّ. تُقسّم المحارف التسعة إلى ثلاث مجموعات، تحوي كل مجموعة ثلاثة محارف. تمثّل المحارف الثلاثة أذونات الملف وهي، من اليسار إلى اليمين، القراءة (r)، الكتابة (w) والتنفيذ (x). تشير المجموعات الثلاثة على التوالي (من اليسار إلى اليمين) إلى أذونات المستخدِم صاحب الملفّ (user, u)، مجموعة المستخدمين مالكة الملفّ (Group, g) وبقيّة المستخدمين (Other, o). يظهر الحرف الموافق للإذن إذا كان الإذن معيّنا وإلا تظهر مكانه علامة -.

راجع المقالات التاليّة لمزيد من التفاصيل عن أذونات المستخدمين:

يُستخدَم الأمر chmod لتغيير أذونات الملفّ كالتالي: 

# chmod new_mode file

حيث new_mode رمز عددي أو عبارة تحدّد الأذون الجديدة.

يُحسَب الرمز العددي بناء على المكافئ العددي لكلّ إذن (4 للقراءة، 2 للكتابة و1 لإذن التنفيذ، و0 عند غياب الإذن) حيثُ تجمع المكافئات بالنسبة لصاحب الملفّ، المجموعة المالكة للملف وبقيّة المستخدمين.

01_file_permissions.png

توضّح الصورة أعلاه مثالا على حساب الرمز العددي للإذن: توجد ثلاثة مجموعات كلّ واحدة مكوّنة من ثلاثة محارف. تشير المجموعة الأولى ابتداءً من اليسار لأذون مالك الملفّ، الثانيّة لأذون المجموعة والثالثة لأذون بقيّة المستخدمين. تشير المحارف في كلّ مجموعة لإذن معيّن: القراءة (المحرف الأول في كلّ مجموعة من اليسار)، الكتابة (المحرف الثاني) والتنفيذ (المحرف الثالث). إذا كان الإذن موجودا يُشار إليه بالحرف الموافق (w، r أو x) وإلا توضع مكانه علامة -. للحصول على الرمز العددي نجمع المكافئات بالنسبة لكل مجموعة ثم نضعها معا بالترتيب المذكور: المستخدم صاحب الملف في اليسار، المجموعة في الوسط وبقية المستخدمين على اليمين.

نستخدم أمر chmod لتعيين الأذون الجديدة. ننشئ في المثال التالي ملفّا باسم myfile ثم نعرض معلوماته، نلاحظ أن الأذون هي:

rw-rw-r--

والرمز العددي الموافق لها هو 664. ثم نستخدم أمر chmod لتعيين الأذون الجديدة باستخدام الرمز 744 وفي الأخير نعرض معلومات الملفّ من جديد ونلاحظ التغيّر.

$ touch myfile
$ ls -l myfile 
-rw-rw-r--. 1 academy academy 0 May 11 14:55 myfile
$ chmod 744 myfile 
$ ls -l myfile 
-rwxr--r--. 1 academy academy 0 May 11 14:55 myfile

تعيين إذن لجميع المستخدمين

يمكنك جعل إذن على ملف متاحا لجميع المستخدمين (صاحب الملف، المجموعة والبقيّة) بالأمر chmod. نفرض مثلا أن لديك سكربت تريد إتاحة إمكانية تنفيذه للجميع؛ استخدم الأمر chmod كالتالي: 

# chmod a+x script.sh

يُقرأ الأمر "امنح الإذن x (التنفيذ) لجميع المستخدمين a". يمكن أيضا استخدام نفس الطريقة مع المستخدم مالك الملف، المجموعة أو بقية المستخدمين:

  • امنح إذن الكتابة w للمستخدم صاحب الملف o:
# chmod o+w script.sh
  • امنح إذن القراءة r للمجموعة g:
# chmod g+r script.sh
  • امنح أذون القراءة r، الكتابة w والتنفيذ x للمجموعة:
# chmod g+rwx script.sh
  • أما إذا أردنا نزع الإذن فنستخدم علامة - بدلا من + كالتالي:
# chmod o-r script.sh

تغيير ملكية ملف

يظهر عند سرد ملفات مجلّد أو تفاصيل ملفّ (بأمر ls -l) المستخدِم صاحب الملف والمجموعة التي ينتمي إليها. مثلا:

$ cd 
$ ls -la
total 60
drwx------. 16 academy academy 4096 May 11 20:36 .
drwxr-xr-x. 11 root  root  4096 May 11 12:59 ..
drwxr-xr-x. 2 academy academy  6 Apr 15 00:42 Desktop
drwxr-xr-x. 2 academy academy  6 Apr 15 00:42 Documents
drwxr-xr-x. 2 academy academy  6 Apr 15 00:42 Downloads
drwxrwxr-x. 2 academy academy  6 Apr 27 20:51 folder
drwxrwxr-x. 2 academy academy 38 Apr 29 17:08 links_folder
drwxr-xr-x. 2 academy academy  6 Apr 15 00:42 Music
-rwxr--r--. 1 academy academy  0 May 11 14:55 myfile
drwxr-xr-x. 2 academy academy  6 Apr 15 00:42 Pictures
drwxr-xr-x. 2 academy academy  6 Apr 15 00:42 Public
drwxr-xr-x. 2 academy academy  6 Apr 15 00:42 Templates
drwxr-xr-x. 2 academy academy  6 Apr 15 00:42 Videos

انتقلنا في المثال أعلاه إلى المجلّد الشخصي للمستخدم الحالي (بتنفيذ أمر cd دون معطيات) ثم سردنا محتويات المجلّد بالأمر ls -la. يطلُب الخيّار a- من الأمر إظهار جميع المحتويات بما فيها الملفات المخفيّة (التي يبدأ اسمها بنقطة .). يظهر اسم المستخدم مالك الملف في العمود الثالث واسم المجموعة في العمود الرابع (جميع الملفات الظاهرة في نتيجة الأمر تعود للمستخدم academy والمجموعة academy ما عدا المجلّد .. الذي يشير إلى المجلّد الأعلى من المجلّد الحالي في البنية الشجرية والذي يملكه المستخدم والمجموعة root).

نستخدم الأمر chown لتغيير ملكيّة ملفّ. يمكن تغيير المستخدم المالك والمجموعة في نفس الوقت أو كلّ على حدة.

  • تغيير المستخدم المالك والمجموعة معا (لاحظ وجود النقطتين في الأمر):
# chown user:group file
  • تغيير المستخدم المالك دون تغيير المجموعة:
# chown user: file
  • تغيير المجموعة المالكة دون تغيير المستخدِم:
# chown :group file

نسخ أذون ملف وتطبيقها على آخر

إن أردت جعل أذون ملف مطابقة تماما لأذون ملفّ آخر فيمكنك استخدام الخيّار reference--مع الأمر chown على النحو التالي:

# chown --reference=ref_file file

حيث ref_file هو الملف المرجِع وfile الملف الذي تريد نسخ الأذون إليه. يؤدي الأمر أيضا إلى تغييرملكيّة الملف file.

إعداد الخيار الخاص بضبط معرف المجموعة setgid

صُمِّم خيار setgid لإتاحة إمكانية الوصول إلى ملفّ بصلاحيات مجموعة المستخدمين المالكة للملف بغضّ النظر عن المستخدِم الذي يصل إليه فعلا. يمكن أن يُقرأ الأمر على النحو التالي : “اجعل الوصول إلى هذا الملف متاحا وفق أذونات المجموعة التي تملكه بغضّ النظر عن المستخدم الذي يحاول الوصول إليه”.

يُطبّق ضبط معرّف المجموعة على النحو التالي:

# chmod g+s file

أو بإضافة الرقم 2 أمام الرمز العددي للأذون:

# chmod 2750 file

نفترض أن الأذون على الملف file هي 760 مما يعني أنه لا يُتاح إذن القراءة إلا للمستخدم مالك الملف أو المجموعة التي ينتمي إليها. إن حاول مستخدم غير المستخدم المالك ولا ينتمي للمجموعة قراءة محتوى الملف فلن يستطيع. إن ضبطنا خيار setgid بإحدى الطريقتين المذكورتين (g+s أو 2760) فسيمكن لأي مستخدم مهما كان قراءة الملف، لأنه أصبح يستفيد من صلاحيات المجموعة حتى ولو لم يكن واحدا منها؛ ولكنه لن يستطيع تنفيذ الملف لأن المجموعة لا تملك هذا الإذن.

راجع مقال شرح أذونات الملفات (File permissions) على لينكس ويونكس للمزيد عن معرّف المجموعة (ومعرّف المستخدم).

خاتمة

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

ترجمة -وبتصرّف- للمقال RHCSA Series: How to Manage Users and Groups in RHEL 7 – Part 3 لصاحبه Gabriel Cánepa.





تفاعل الأعضاء


لا توجد أيّة تعليقات بعد



يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن