اذهب إلى المحتوى

التحكم بالوصول إلى الأقراص الخارجية في لينكس


Hassan Hedr

يقدم التخزين السحابي العديد من المزايا، لكن لن يغنيك ذلك عن امتلاكك لبياناتك على قرص صلب فيزيائي خاص بك. عندما تخزن بياناتك على القرص الصلب ستعلم تماما أين بياناتك، ويمكنك الوصول اليها دائما عند الحاجة. الأمر الأفضل من ذلك حتى أن تخزن بياناتك على قرص محمول، مثل ذاكرة اليو اس بي USB Drive، لست فقط على علم أين تقع بياناتك بل يمكنك حملها معك لأي مكان. إذا كنت مستخدم جديد للينكس، أو كنت تحاول التعامل مع نظام ملفات لينكس على قرص خارجي، قد تجد الأقراص الخارجية أمرا مربكًا، ستكون عرضة لأخطاء في الصلاحيات أو التضارب فيها، أو حتى خسارة البيانات الوصفية للملفات metadata، هناك إجابتين "صحيحتين" لذلك: نظام ملفات ExFAT وقوائم التحكم بالوصول ACL.

نظام ملفات ExFAT

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

محاسن نظام ExFAT أنه عابر للمنصات (ويندوز، ماك، والعديد من الأجهزة المحمولة تستخدمه)، وقد تم تصميمه دون اعتبار لنظام الصلاحيات على الملفات. حيث يمكنك توصيل محرك خارجي بتنسيق ملفات ExFAT لأي جهاز حاسوب، وكل الملفات ستكون متاحة للجميع. سيُعد هذا أمرا أيجابيًا أو سلبيًا بحسب طريقة استخدامك، لكن بالنسبة للاستعمال مع ملفات الوسائط المتعددة ذلك يعد أمرا إيجابيا جدًا.

قوائم التحكم بالوصول ACL

يمكنك -إن كنت تفضل- استخدام نظام ملفات لينكس على محرك الملفات المحمول، لكن لجعل مشاركة الملفات أمرا سلسًا يجب استخدام قوائم التحكم بالوصول ACL اختصارًا إلى Access control lists.

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

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

على سبيل المثال، بينما حسابي بإسم حسان (بالمعرّف 1000) على جهازي المكتبي يملك مجلدًا على سطح المكتب، حساب آخر لي بإسم حسان على جهازي المحمول (بالمعرّف 500) من وجهة نظر نظام الملفات هو لا يملك نفس المجلد ولا يصل إليه، فقط لأن المعرّف لكل من الحسابين مختلف.

نفس المشكلة مع نظام تملّك المجموعات، مجموعة بالمعرّف 1000 قد تملك مجلدًا على جهاز، مجموعة أخرى على جهاز آخر بمعرّف مغاير (500 أو 10922) لن تصل إلى نفس المجلد. قائمة التحكم بالوصول تستطيع حل المشكلة بإضافة مُلّاك أفراد أو مجموعات ثانويين للمجلدات والملفات.

مشاهدة قائمة الوصول الحالية

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

يمكنك مشاهدتها عبر الطرفية بتنفيذ الأمر التالي:

$ getfacl ./example
# file: /run/media/drive/example
# owner: hassan
# group: users
user::rwx
group::rwx
other::r--

أسطر التعليق الظاهرة هي مرجع فقط، تدل على أسم الملف وحساب المالك والمجموعة المالكة للملف الحالي الذي تستعرض معلومات عنه حاليًا. الأسطر اللاحقة لذلك تُظهر القواعد المطبقة على هذا الملف أو المجلد. في المثال السابق، صلاحيات المستخدم المالك مضبوطة للقيمة rwx، ومثلها للمجموعة المالكة rwx، وللباقي --r. هذه الصلاحيات تعكس الصلاحيات الافتراضية لقائمة التحكم بالوصول الافتراضية لنظام الملفات:

$ ls -lA /run/media/drive
drwxrwxr-- 26 hassan users 4096 Jan 16 21:04 example
$ id
uid=1000(hassan) gid=100(users) groups=100(users)...

طالما أن حساب المستخدم hassan (بالمعرف 1000) أو حساب عضو في المجموعة users (بالمعرف 100) يتعاملون مع المجلد example، فلهم صلاحية وصول كاملة. أي حساب آخر سيمتلك صلاحية القراءة r فقط.

تعيين قائمة التحكم بالوصول

لتعديل قائمة التحكم بالوصول، يمكنك استخدام الأمر setfacl أو عبر استخدام مدير ملفات يدعم قوائم التحكم بالوصول. يمكنك التعميم أو التخصيص عندما تعيّن قائمة التحكم بالوصول.

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

$ setfacl --modify g::r example
$ getfacl ./example | grep "group::"
group::r--
$ ls -l . | grep example
drwxr--r-- 26 hassan users 4096 Jan 16 21:04 example

العملية نفسها ممكنة عبر استعمال الأمر chmod:

$ chmod g+x example
$ getfacl ./example | grep "group::"
group::r-x
$ ls -l . | grep example
drwxr-xr-- 26 seth users 4096 Jan 16 21:04 example

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

للاستفادة من مزايا التي توفرها قوائم التحكم بالوصول يجب أن نستخدمها لإضافة صلاحيات إضافية مغايرة الصلاحيات الأصلية في يونكس. إذا سجلت الدخول على جهاز سطح المكتب من حسابي hassan ذو المعرّف 1000، وأعلم أنني أريد الوصول واستعمال مجلد مخزن على القرص المحمول من حساب hassan ذو المعرّف 500 من جهازي المحمول، لن يكون عندها كافيا أن أحدد مالك المجلد هو الحساب hassan فقط، لأن المعرّفين لكلا الحسابين ليسا متطابقين.

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

$ setfacl --modify u:500:rwx example
$ getfacl example
# file: /run/media/drive/example
# owner: hassan
# group: users
user::rwx
user:500:rwx
[...]

كما نلاحظ تم إضافة سطر قيد جديد خاص بالمستخدم ذو المعرّف 500 إلى قائمة التحكم بالوصول الخاصة بالمجلد. الآن أصبح من الممكن وصل مخزن الملفات المحمول الذي يحوي هذا المجلد على جهاز يونكس أو لينكس آخر وسيتم السماح للمستخدم بالمعرّف 500 بالوصول الى المجلد example.

يمكنك أيضا إضافة حسابات مستخدمين آخرين عبر اسم الحساب، أو مجموعات عبر اسم المجموعة أو معرّف المجموعة. المعرّفات هي المهمة مع الصلاحيات، لكن إذا كنت في بيئة مختلطة (مثلا بيئة خوادم RHEL و العملاء البدائيين)، فيجب التحقق من معرّفات الحسابات والمجموعات التي تضيفها، فالحسابات في هذه البيئات قد تبدو متشابهة بالإسم ولكنها تختلف بمعرّفاتها.

تعيين القواعد الافتراضية لقوائم التحكم بالوصول

إذا تعاملت مع قوائم التحكم بالوصول على أنها إعدادات لمرة واحدة، فسريعًا ما ستواجه مشاكل عندما يبدأ المستخدمون الآخرون بإنشاء الملفات والمجلدات. أي ملف أو مجلد سيتم إنشاءه من أي مستخدم سيورث تلقائيا إعدادات الصلاحيات الافتراضية للنظام (وقائمة التحكم بالوصول). هذا يعني عندما يقوم حساب hassan على الحاسب المحمول ذي المعرّف 500 بإنشاء ملف داخل مجلد تم مشاركته معه، لن يتمكن حساب hassan الآخر ذو المعرّف 1000 على جهاز سطح المكتب من الوصول إليه، لأن مالك الملف سيتم تعيينه للحساب ذي المعرّف 500 فقط.

يمكن تطبيق قائمة تحكم بالوصول افتراضية للمجلدات حيث أن أي ملف أو مجلد سيتم إنشاؤه داخل هذا المجلد سيورّث تلقائيا قائمة التحكم بالوصول للمجلد الأب. يمكنك تعيين قائمة تحكم بالوصول افتراضية لمجلد عبر تمرير الخيار default-- كالتالي:

 $ setfacl --default --modify u:500:rwx example
 $ setfacl --default --modify u:1000:rwx example
 $ getfacl --omit-header example
 user::rwx
 user:500:rwx
 group::rw-
 mask::rwx
 other::r-x
 default:user::rwx
 default:group::rw-
 default:group:500:rwx
 default:group:1000:rwx
 default:mask::rwx
 default:other::r-x

الآن عندما يقوم مستخدم بإنشاء مجلد جديد داخل المجلد example، سيتم توريث قائمة التحكم بالوصول له لتكون نفسها للمجلد الأب:

$ cd example
$ mkdir penguins
$ getfacl --omit-header penguins
user::rwx
group::rw-
group:500:rwx
group:1000:rwx
mask::rwx
other::r-x
default:user::rwx
default:group::rw-
default:group:500:rwx
default:group:1000:rwx
default:mask::rwx
default:other::r-x

هذا يعني أن أي مجلد أو ملف سيرث تلقائيا نفس قائمة التحكم بالوصول، ولن يتم استثناء أي من الحسابين بالمعرّفات 500 أو 100 من الوصول للملفات أو المجلدات.

قائمة تحكم بالوصول عملية لمحركات الأقراص الخارجية

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

لنفرض مثلا لديك مخزن ملفات USB يدعى mydrive منسّق بنظام الملفات ext4. وتريد السماح بالوصول للملفات المخزنة فيه لكل من حساباتك على جهاز سطح المكتب والجهاز المحمول وأيضا زميلك أحمد.

أولا قم بإنشاء مجلد في أعلى مستوى من في مخزن الملفات:

$ mkdir /mnt/mydrive/umbrella

ثم قم بتطبيق قائمة تحكم بالوصول على ذلك المجلد لضمان الوصول لكل حسابات المستخدمين الذي تريد:

$ setfacl --modify \
  u:500:rwx,u:1000:rwx,u:ahmad:rwx \
  /mnt/mydrive/umbrella

أخيرًا تقوم بتطبيق قائمة تحكم بالوصول افتراضية ليتم توريثها لكل الملفات والمجلدات المنشأة داخل الملف umbrella (الأمر التالي يستخدم اختصار خيار modify--):

$ setfacl --default -m u:500:rwx,u:1000:rwx,u:ahmad:rwx \
  /mnt/mydrive/umbrella

تطبيق القواعد الافتراضية على نظام حالي

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

أولا نقوم بالبحث عن المجلدات التي نريدها ثم نطبق عليها قائمة التحكم بالوصول:

 $ find /mnt/mydrive/umbrella -type d | \
   parallel --max-args=6 setfacl \
   --default -m u:500:rwx,u:1000:rwx,u:ahmad:rwx

إن تطبيق صلاحية التنفيذ للملفات بشكل عشوائي أمر غير محبذ، لذا نبحث عن كل الملفات ونغير الصلاحيات لها إلى rw. الملفات التي تتطلب التنفيذ يمكن تعيين صلاحية التنفيذ لها إما بشكل يدوي أو عبر إضافة لاحقة لها:

 $ find /mnt/mydrive/umbrella -type f | \
   parallel --max-args=6 setfacl \
   --default -m u:500:rw,u:1000:rw,u:ahmad:rw

يمكنك تغيير المعاملات الممررة للأوامر السابقة بحسب حاجتك (لا تقم بتنفيذ الأمر الذي يقوم بمسح صلاحية التنفيذ على المجلد user/، أو على مجلد يحتوي فقط على ملفات تنفيذية).

المحركات الخارجية

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

ترجمة -وبتصرف- للمقال Access control lists and external drives on Linux: What you need to know لصاحبه Seth Kenlon.

اقرأ أيضًا


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

أفضل التعليقات

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



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...