بدأنا في المقال السابق من سلسلة دروس RHCSA شرحَ كيفية إعداد وسائط التخزين المحليّة باستخدام parted و ssm وشرحنا كيفية إنشاء تجزئات معمّاة وتركيبها Mounting أثناء إقلاع النظام. نذكّر - كما أشرنا إلى ذلك خلال الدرس السابق - بخطورة تنفيذ مهام الإدارة الحرجة على أنظمة الملفّات أثناء تركيبها.
سنراجع في هذا الدرس أهمّ صيغ نظم الملفات المستخدمة في Red Hat Enterprise Linux 7 ثم نغطّي مواضيع تركيب أنظمة الملفات الشبكية (CIFS و NFS)، استخدامها وفصلها؛ إما يدويا أو تلقائيا. سنتطرّق أيضا لماهية قوائم التحكم في الوصول Access control litsts, ACL.
المتطلبات
تأكد قبل المواصلة مع هذا الدرس من توفّرك على خادوميْ NFS وSamba لتشارك الملفات؛ تمكنك مراجعة الدرسيْن التاليّيْن لإعدادها:
- إعداد تشارك الملفات على RedHat Enterprise Linux باستخدام Samba.
- تثبيت نظام الملفات الشبكي NFS وتركيبه على أوبونتو.
سنستخدم في هذا الدرس جهازيْن؛ الأول على العنوان 192.168.2.100
ويشغّل خدمتيْ Samba و NFS (لا يهمّ نظام التشغيل)؛ أما الثاني وهو العميل فيعمل بنظام RHEL 7 على العنوان 192.168.2.200
؛ وهو الذي سنطبق عليه الخطوات المشروحة هنا.
أنظمة الملفات على RHEL 7
اعتمد نظام التشغيل RHEL 7 نظام الملفات XFS مبدئيا نظرا لأدائه العالي وقابليته الكبيرة للتمدّد Scalability. يدعم XFS مبدئيا معيار user_xattr
(خاصيّات المستخدم الموسَّعة Extended user attributes) وقوائم التحكم في الوصول ACL؛ وهو ما يعني أنك لا تحتاج للتصريح برغبتك في استخدام هذه الخيارات حتى تكون متاحة؛ عكسَ ماهو كائن في أنظمة الملفّات ext3
وext4
(تنصح ردهات بعدم استخدام نظام ext2
للملفات على RHEL 7) التي يتوجّب فيها ذكر هذه الخاصيّات، في ملفّ fstab
على سبيل المثال.
خاصيّات المستخدم الموسَّعة هي تمديد لخاصيات الملف وتأخذ صيغة “خاصيّة:قيمة”. تُربَط هذه الخاصيّات بملفّ أو مجلَّد وتُستخدَم لإضافة وظائف جديدة إلى نظام الملفّات؛ ترميز Encoding الملفّ، أو نوع mime
الخاصّ به على سبيل المثال.
قوائم التحكم في الوصول
صُمّمت قوائم التحكم في الوصول ACL لتمكين مدير النظام من التحكّم في وصول المستخدمين إلى الملفّات بطريقة أكثر تفصيلا مما تتيحه الأذون التقليدية. سنعرض في الفقرات أدناه كيف تُستعمَل قوائم التحكّم في الوصول عمليا.
يوجد نوعان من قوائم التحكم في الوصول؛ قوائم التحكم في الوصول الخاصّة بالنفاذ Access ACLs التي يمكن تطبيقها سواءً على الملفّات أو المجلّدات، وتلك المبدئية Default ACLs التي لا تُطبَّق إلا على المجلّدات. إن لم تُعيَّن قوائم تحكّم في الوصول لملفّات موجودة في مجلّد فإنها تأخذ قوائم التحكّم في الوصول المبدئية المطبّقة على المجلّد الأب.
يمكن لقوائم التحكم في الوصول أن تُعدّ بالنسبة لمستخدم، مجموعة مستخدمين أو لمستخدم لا ينتمي لمجموعة المستخدمين المالكة للملفّ.
نستخدم الأمر setfacl
مع الخيار m-
لضبط قوائم التحكّم في الوصول؛ ومع الخيار x-
لحذفها.
ننشئ في ما يلي مجموعة مستخدمين باسم academy
ثم نضيف إليها المستخدمَيْن ahmed
و fatima
:
# groupadd academy # useradd ahmed # useradd fatima # passwd ahmed New password: Retype new password: # passwd fatima New password: Retype new password: # usermod -a -G academy ahmed # usermod -a -G academy fatima
ثم نتأكد من أن المستخدمَين ينتميان إلى المجموعة academy
:
# id ahmed uid=1006(ahmed) gid=1009(ahmed) groups=1009(ahmed),1008(academy) # id fatima uid=1007(fatima) gid=1010(fatima) groups=1010(fatima),1008(academy)
يظهر جيدا أن المستخدميْن ينتميان إلى المجموعة academy
إضافة لانتمائهما لمجموعة بنفس اسم المستخدم (تُنشَأ مع إنشاء المستخدم مجموعة تحمل نفس الاسم).
سننشئ الآن مجلدا باسم playground
داخل المجلّد mnt/
، وننشئ داخله ملفّا باسم testfile.txt
؛ ثم نجعل academy
هي المجموعة المالكة للملفّ ونحدّد الأذون عليه بـ770
(أذون القراءة، الكتابة والتنفيذ لكل من المالك والمجموعة المالكة، ولا أذون لبقية المستخدمين):
# mkdir /mnt/playground # touch /mnt/playground/testfile.txt # chown :academy /mnt/playground/testfile.txt # chmod 770 /mnt/playground/testfile.txt
ثم ننتقل إلى الحساب ahmed
ثم نكتب عن طريقه الجملة التالية في الملفّ mnt/playground/testfile.txt/
، ونعود إلى الحساب الجذر:
# su ahmed $ echo "My name is Ahmed" > /mnt/playground/testfile.txt $ exit
نكرّر نفس الشيء مع الحساب fatima
ولكن بكتابة جملة جديدة في آخر الملفّ:
# su fatima $ echo "My name is Fatima" >> /mnt/playground/testfile.txt $ exit
ملحوظة 1: استخدمنا عامل التوجيه <<
مع المستخدم الثاني (fatima
) حتى لا نحذف ما أضافه المستخدم الأول (ahmed
).
ملحوظة 2: يعود السبب في كون ahmed
و fatima
يستطيعان الكتابة في الملف mnt/playground/testfile.txt/
إلى انتمائهما للمجموعة academy
التي جعلناها مالكة الملف وأعطيناها كلّ الأذون عليه.
سننشئ مستخدما ثالثا samir
:
# useradd samir # passwd samir New password: Retype new password:
يريد samir
الكتابة في الملفّ mnt/playground/testfile.txt/
؛ ستخفق العمليّة كما هو متوقع نظرا لعدم امتلاكه إذن الكتابة في الملفّ.
لكن ماذا إن أردنا إتاحة إمكانيّة الكتابة على الملفّ mnt/playground/testfile.txt/
للمستخدم samir
، الذي لا ينتمي إلى المجموعة academy
؟ الإجابة الآنية هي إضافته للمجموعة academy
؛ لكن هذا سيمنحه إذن الكتابة على جميع الملفات التي تملكها المجموعة، وهو ما لا نرغب فيه.
يمكننا استخدام قوائم التحكم في الوصول لهذا الغرض.
يطلب الأمر setfacl
عند استخدام الخيار m-
التعديل على قوائم التحكم في الوصول الخاصّة بملفّ أو إضافتها، ويُستخدَم على النحو التالي:
setfacl -m <rules> <files>
حيث <files>
ملفّ أو مجموعة ملفّات، و<rules>
قواعد تأخذ إحدى الصيغ التاليّة:
-
u:<uid>:<perms>
: تضبُط قوائم التحكم في الوصول الخاصّة بالنفاذ على الملفّ بالنسبة لمستخدم؛ حيثuid
معرّف المستخدم أو اسمه وperms
الأذون التي نريد إعطاءها له. -
g:<gid>:<perms>
: تضبط قوائم التحكم في الوصول الخاصّة بالنفاذ على الملفّ بالنسبة لمجموعة مستخدمين؛ حيثgid
معرّف المجموعة أو اسمها وperms
الأذون التي نريد إعطاءها له. -
m:<perms>
: تحدّد قناع الأذون الفعلية Effective rights mask؛ وهي طريقة لتقييد الأذون الممنوحة للمستخدمين أو المجموعات غير المستخدم المالك والمجموعة المالكة -
o:<perms>
: تعيّن قوائم التحكم في الوصول الخاصّة بالنفاذ بالنسبة المستخدمين غير المنتمين للمجموعة المالكة للملفّ.
نحصُل على ما نريد بتطبيق القاعدة الأولى على الملفّ mnt/playground/testfile.txt/
:
# setfacl -m u:samir:rwx /mnt/playground/testfile.txt
يضيف الأمر أعلاه قائمة للتحكم في الوصول تعطي للمستخدم samir
أذون الكتابة w
، القراءة r
والتنفيذ x
على الملفّ mnt/playground/testfile.txt/
.
يمكن الآن للمستخدم samir
الكتابة في الملف mnt/playground/testfile.txt/
.
استخدم الأمر getfacl
لعرض قوائم التحكم في الوصول بالنسبة لملفّ أو مجلّد:
# getfacl /mnt/playground/testfile.txt getfacl: Removing leading '/' from absolute path names # file: mnt/playground/testfile.txt # owner: root # group: academy user::rwx user:samir:rwx group::rwx mask::rwx other::---
بالنسبة لقوائم التحكم في الوصول المبدئية فيمكن ضبطها بإضافة حرف d
قبل القاعدة على النحو التالي (حيث directory
مسار المجلّد):
# setfacl -m d:o:r <directory>
ستسمح قائمة التحكم في الوصول المبدئية التي عرّفها الأمر السابق لجميع المستخدمين غير الأعضاء في المجموعة المالكة بالحصول على إذن قراءة المحتويات التي ستضاف للمجلّد مستقبلا. تطبّق هذه القائمة على كل عنصر يُضاف إلى المجلّد ما لم تحدَّد له قائمة تحكم خاصّة به.
لاحظ الفرق في نتيجة تنفيذ الأمر getfacl
قبل ضبط قوائم التحكم في الوصول المبدئية وبعدها:
# getfacl /mnt/playground/ getfacl: Removing leading '/' from absolute path names # file: mnt/playground/ # owner: root # group: root user::rwx group::r-x other::r-x # setfacl -m d:o:r /mnt/playground # getfacl /mnt/playground/ getfacl: Removing leading '/' from absolute path names # file: mnt/playground/ # owner: root # group: root user::rwx group::r-x other::r-x default:user::rwx default:group::r-x default:other::r--
تركيب نظام الملفات الشبكي NFS
يُستخدَم الأمر showmount -e
لسرد مجلدات NFS المتاحة على الخادوم. يتوفّر الأمر ضمن حزمة nfs-utils
، لذا يجب أولا تثبيت هذه الحزمة:
# yum update && yum install nfs-utils
ثم ننفّذ الأمر:
# showmount -e 192.168.2.100 Export list for 192.168.2.100: /share 192.168.2.200
تشير نتيجة الأمر أعلاه إلى أن الخادوم على العنوان 192.168.2.100
يتشارك المجلّد share/
مع العنوان 192.168.2.200
(عنوان الجهاز الذي نستخدمه).
يمكن استخدام أمر mount
لتركيب مجلدات متشاركة عبر نظام NFS على نظام الملفّات المحلي كالتالي:
# mount -t nfs -o [options] remote_host:/remote/directory /local/directory
حيث options
خيارات التركيب (ليست ضرورية)، remote_host
عنوان الخادوم الذي توجد عليه الملفّات المتشاركة، remote/directory/
مسار الملفّ على الخادوم البعيد وlocal/directory/
مسار التركيب على نظام الملفّات المحلي. يُكتَب الأمر في حالتنا (share/
هو مسار المجلد على الخادوم، كما يظهر في نتيجة الأمر showmount
السابق؛ وmnt/nfs/
هو مجلد أنشأناه على نظام الملفات المحلي للتركيب عليه):
# mkdir /mnt/nfs # mount -t nfs 192.168.2.100:/share /mnt/nfs
ملحوظة: إن حصلت على خطأ Job for rpc-statd.service failed
فهذا يعني أن الخدمة rpcbind
التي يستغلها النظام للتواصل مع نظام الملفات الشبكي غير مشغَّلة. نفذ - في هذه الحالة - الأمرين التاليين لتشغيلها وتفعيلها مع إقلاع النظام:
# systemctl enable rpcbind.socket # systemctl restart rpcbind.service
ثم أعد تشغيل الجهاز وأعد تنفيذ أمر التركيب السابق.
يتيح الأمر mount
تركيب المجلدات للعمل عليها، لكن هذا التركيب لا يدوم لما بعد إعادة تشغيل النظام؛ إن أردنا جعل التركيب دائما فيجب أن نضيف سطرا جديدا إلى ملفّ etc/fstab/
المعدّ لهذا الغرض؛ يأخذ السطر الهيئة التالية:
remote_host:/remote/directory /local/directory nfs options 0 0
تمكن ملاحظة أن المتغيرات المستخدمة هي نفسها المستخدمة مع أمر mount
؛ المختلف هنا هو التموضع. يكون السطر - بعد تطبيق هذه الهيئة على حالتنا - على النحو التالي:
192.168.2.100:/share /mnt/nfs nfs defaults 0 0
تركيب ملفات Samba
يكثُر استخدام خادوم Samba لتشارك الملفات في البيئات المختلطة (أنظمة تشغيل مختلفة، مثل وندوز ولينكس). تتيح أداة smbclient
التي تأتي ضمن الحزمة samba-client
، عرض الملفات المتوفّرة للتشارك عن طريق Samba:
# smbclient -L 192.168.2.100 -U samba_user
Enter samba_user's password:
Domain=[MYGROUP] OS=[Windows 6.1] Server=[Samba 4.2.10]
Sharename Type Comment
--------- ---- -------
samba_share Disk Directory for collaboration
IPC$ IPC IPC Service (Samba Server Version 4.2.10)
samba_user Disk Home Directories
Domain=[MYGROUP] OS=[Windows 6.1] Server=[Samba 4.2.10]
Server Comment
--------- -------
Workgroup Master
--------- -------
سيُطلب منك إدخال كلمة سر المستخدم samba_user
؛ الذي هو عضو في مستخدمي Samba على الخادوم. راجع مقال إعداد تشارك الملفات على RedHat Enterprise Linux باستخدام Samba للمزيد من التفاصيل عن إعداد Samba لمشاركة الملفات.
ستحتاج من أجل تركيب مجلدات متشاركة عبر خادوم Samba لتثبيت الحزمة cifs-utils
على العميل (جهازك):
# yum update && yum install cifs-utils
ثم استخدم الأمر mount
على النحو التالي:
# mount -t cifs -o credentials=/path/to/credentials/file //remote_host/samba_share /local/directory
يحدّد الخيار credentials
ملفّا لمعلومات استثياق مستخدم يحقّ له الوصول إلى المجلدات المتشاركة على الخادوم، remote_host
هو عنوان الخادوم؛ samba_share
اسم المجلد المتشارَك على الخادوم كما يظهر في نتيجة الأمر smbclient
وlocal/directory/
مسار مجلد التركيب المحلي.
ننشئ قبل تنفيذ أمر التركيب مجلدا خاصا لهذا الغرض:
# mkdir /mnt/samba
ثم ننشئ ملفّ الاستيثاق smbcredentials.
، وهو ملفّ مخفي، في المجلد الشخصي للمستخدم الجذر (/root/
) مع تحديد الأذون بـ600
حتى لا يمكن لغير المستخدم الجذر قراءة محتواه. نضع داخل ملفّ الاستيثاق البيانات على النحو التالي:
username=samba_user password=samba_user password
تحدّد قيمة المعطى الأول اسمَ المستخدم، وقيمةُ المعطى الثاني كلمةَ السر.
# mount -t cifs -o credentials=/root/.smbcredentials //192.168.2.100/samba_share /mnt/samba
إن أردت جعل الملفّ متاحا تلقائيا فيمكنك إضافة سطر على النحو التالي إلى ملفّ etc/fstab/
:
//192.168.0.10/samba_share /mnt/samba cifs credentials=/root/.smbcredentials,defaults 0 0
يمكن حذف ملفّ الاستيثاق (خيار credentials
) إذا كان المجلد على الخادوم متاحا للعموم.
يجب الانتباه إلى أنه يجب ليُركَّب المجلّد - في حالتيْ NFS وSamba - أن يكون الخادوم حيث توجد مجلدات التشارك متاحا عبر الشبكة.
لا تكتف بقراءة الدرس؛ طبّق ما قرأته أكثر من مرة بطرق الخاصّة واستخدم قسم الأسئلة إن واجهتك مشكلة (مع تحديدها).
ترجمة -وبتصرّف- للمقال RHCSA Series: Using ACLs (Access Control Lists) and Mounting Samba / NFS Shares – Part 7 لصاحبه Gabriel Cánepa.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.