كيفية تعيين قوائم التحكم في الوصول (ACL’s) وحصص القرص للمستخدمين والمجموعات

قوائم التحكم في الوصول (المعروفة أيضًا باسم ACLs) هي ميزة في نواة Linux تسمح بتحديد حقوق الوصول الأكثر دقة للملفات والمجلدات من تلك المحددة بأذونات ugo/rwx العادية.

على سبيل المثال، لا تسمح الأذونات القياسية ugo/rwx بتعيين أذونات مختلفة لمستخدمين فردين أو مجموعات مختلفة. من السهل نسبيًا القيام بذلك باستخدام ACLs، كما سنرى في هذا المقال.

التحقق من توافق نظام الملفات مع ACLs

لضمان دعم نظم الملفات الخاصة بك حاليًا لـ ACLs، يجب عليك التحقق من أنه تم تحميلها باستخدام خيار acl. للقيام بذلك، سنستخدم tune2fs لأنظمة الملفات ext2/3/4 كما هو موضح أدناه. استبدل /dev/sda1 بالجهاز أو نظام الملفات الذي تريد التحقق منه:

# tune2fs -l /dev/sda1 | grep "Default mount options:"

ملاحظة: مع XFS، يتم دعم قوائم التحكم في الوصول بشكل افتراضي.

في نظام الملفات ext4 التالي، يمكننا رؤية أنه تم تمكين ACLs لـ /dev/xvda2:

# tune2fs -l /dev/xvda2 | grep "Default mount options:"
Check ACL Enabled on Linux Filesystem

إذا لم يشير الأمر أعلاه إلى أن تم تحميل نظام الملفات بدعم لـ ACLs، فمن المحتمل أن يكون السبب في ذلك وجود الخيار noacl في /etc/fstab.

في هذه الحالة، قم بإزالته، وافصل نظام الملفات، ثم قم بإعادة تحميله، أو ببساطة أعد تشغيل النظام بعد حفظ التغييرات في /etc/fstab.

مقدمة ACLs في Linux

لتوضيح كيفية عمل ACLs، سنستخدم مجموعة تحت اسم developers ونضيف المستخدمين walterwhite و saulgoodman (نعم، أنا من معجبي مسلسل Breaking Bad) إليها.:

# groupadd developers
# useradd walterwhite
# useradd saulgoodman
# usermod -a -G developers walterwhite
# usermod -a -G developers saulgoodman

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

# id walterwhite
# id saulgoodman
Find User ID in Linux

لنقم الآن بإنشاء دليل يسمى test في /mnt، وملف يسمى acl.txt بالداخل (/mnt/test/acl.txt).

ثم سنقوم بتعيين مالك المجموعة إلى developers وتغيير الأذونات الافتراضية ugo/rwx إلى 770 بشكل متكرر (مما يمنح الإذن بالقراءة والكتابة والتنفيذ لكل من المالك ومالك المجموعة للملف):

# mkdir /mnt/test
# touch /mnt/test/acl.txt
# chgrp -R developers /mnt/test
# chmod -R 770 /mnt/test

كما هو متوقع، يمكنك كتابة /mnt/test/acl.txt كـ walterwhite أو saulgoodman:

# su - walterwhite
# echo "My name is Walter White" > /mnt/test/acl.txt
# exit
# su - saulgoodman
# echo "My name is Saul Goodman" >> /mnt/test/acl.txt
# exit
Verify ACL Rules on Users

حتى الآن كل شيء على ما يرام. ومع ذلك، سنرى قريبًا مشكلة عندما نحتاج إلى منح إذن كتابة لـ /mnt/test/acl.txt لمستخدم آخر ليس في مجموعة المطورين.

تتطلب الأذونات القياسية ugo/rwx أن يتم إضافة المستخدم الجديد إلى مجموعة المطورين، ولكن ذلك سيمنحه/سيمنحها نفس الأذونات على جميع الكائنات التي تمتلكها المجموعة. هنا تكمن فائدة ACLs تحديدًا.

ضبط ACLs في نظام Linux

هناك نوعان من ACLs: ACLs للوصول (التي تُطبق على ملف أو دليل)، و ACLs الافتراضية (اختيارية)، والتي يمكن تطبيقها فقط على دليل.

إذا كانت الملفات داخل دليل تم تعيين ACL افتراضي ولم يكن لديها ACL الخاص بها، فإنها ترث ACL الافتراضي للدليل الأصلي.

لنمنح المستخدم gacanepa صلاحية القراءة والكتابة إلى /mnt/test/acl.txt. قبل القيام بذلك، دعنا نلقي نظرة على إعدادات ACL الحالية في ذلك الدليل باستخدام:

# getfacl /mnt/test/acl.txt

ثم قم بتغيير ACLs على الملف، استخدم u: تليه اسم المستخدم و :rw للإشارة إلى صلاحيات القراءة / الكتابة:

# setfacl -m u:gacanepa:rw /mnt/test/acl.txt

وقم بتشغيل getfacl على الملف مرة أخرى للمقارنة. توضح الصورة التالية “قبل” و “بعد”:

# getfacl /mnt/test/acl.txt
Set ACL on Linux Users

بعد ذلك، سنحتاج إلى منح الآخرين أذونات تنفيذ على الدليل /mnt/test:

# chmod +x /mnt/test

تذكر أنه من الضروري أن يكون لدى مستخدم عادي أذونات تنفيذ على الدليل للوصول إلى محتوياته.

يجب أن يكون بإمكان المستخدم gacanepa الآن كتابة إلى الملف. قم بالتبديل إلى حساب المستخدم ذلك وقم بتنفيذ الأمر التالي للتأكد:

# echo "My name is Gabriel Cánepa" >> /mnt/test/acl.txt

لتعيين ACL افتراضي لدليل (سيورث محتوياته ما لم يتم تجاوزها بشكل آخر)، أضف d: قبل القاعدة وحدد دليلاً بدلاً من اسم ملف:

# setfacl -m d:o:r /mnt/test
# getfacl /mnt/test/

سيسمح ACL أعلاه للمستخدمين الذين ليسوا في مجموعة المالك بالوصول إلى قراءة محتويات /mnt/test في المستقبل. لاحظ الفرق في الإخراج بين getfacl /mnt/test قبل وبعد التغيير:

Set Default ACL to Linux Directory

لإزالة ACL معين، استبدل -m في الأوامر أعلاه بـ -x. على سبيل المثال،

# setfacl -x d:o /mnt/test

بالإمكان أيضًا استخدام الخيار -b لإزالة جميع قواعد التحكم في خطوة واحدة:

# setfacl -b /mnt/test

لمزيد من المعلومات والأمثلة حول استخدام قواعد التحكم في الوصول، يرجى الرجوع إلى الفصل 10، القسم 2، من دليل أمان openSUSE (متوفر أيضًا للتنزيل مجانًا بتنسيق PDF).

تعيين حصص تخزين Linux على المستخدمين وأنظمة الملفات

المساحة التخزينية هي مورد آخر يجب استخدامه ومراقبته بعناية. يمكن تعيين حصص على أساس نظام الملفات، سواء للمستخدمين الفرديين أو للمجموعات.

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

أول ما يجب عليك فعله لتمكين الحصص على نظام ملفات هو تثبيته بخيارات usrquota أو grpquota (لحصص المستخدم والمجموعة، على التوالي) في /etc/fstab.

على سبيل المثال، دعنا نمكّن الحصص على أساس المستخدمين على /dev/vg00/vol_backups والحصص على أساس المجموعات على /dev/vg00/vol_projects.

يرجى ملاحظة أن UUID يُستخدم لتحديد كل نظام ملفات.

UUID=f6d1eba2-9aed-40ea-99ac-75f4be05c05a /home/projects ext4 defaults,grpquota 0 0
UUID=e1929239-5087-44b1-9396-53e09db6eb9e /home/backups ext4 defaults,usrquota 0 0

افصل النظامين من التثبيت وأعد تثبيتهما:

# umount /home/projects
# umount /home/backups
# mount -o remount /home/projects
# mount -o remount /home/backups 

ثم تحقق من وجود خيارات usrquota و grpquota في نتيجة الأمر mount (انظر المظلل أدناه):

# mount | grep vg00
Check Linux User Quota and Group Quota

وأخيرًا، قم بتشغيل الأوامر التالية لتهيئة وتمكين الحصص:

# quotacheck -avugc
# quotaon -vu /home/backups
# quotaon -vg /home/projects

لنقوم الآن بتعيين حصص لاسم المستخدم والمجموعة التي ذكرناها سابقًا. يمكنك في وقت لاحق تعطيل الحصص باستخدام quotaoff.

ضبط حصص القرص في Linux

لنبدأ بتعيين ACL على /home/backups للمستخدم gacanepa، والذي سيمنحه صلاحيات القراءة والكتابة والتنفيذ على ذلك الدليل:

# setfacl -m u:gacanepa:rwx /home/backups/

ثم مع،

# edquota -u gacanepa

سنقوم بتحديد الحد الأقصى الناعم limit=900 والحد الأقصى الصلب limit=1000 للكتل (1024 بايت/كتلة * 1000 كتلة = 1024000 بايت = 1 ميجابايت) من استخدام مساحة القرص.

يمكننا أيضًا وضع حد لـ 20 و 25 كحدود ناعمة وصلبة على عدد الملفات التي يمكن لهذا المستخدم إنشاؤها.

سيشغل الأمر أعلاه محرر النص ($EDITOR) مع ملف مؤقت حيث يمكننا تعيين الحدود المذكورة سابقًا:

Linux Disk Quota For User

سيؤدي هذا الإعداد إلى ظهور تحذير للمستخدم gacanepa عندما يصل إما إلى الحد الناعم 900 كتلة أو 20 inode لفترة سماح افتراضية تبلغ 7 أيام.

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

للتحقق، دعنا نطلب من المستخدم gacanepa محاولة إنشاء ملف فارغ بحجم 2 ميجابايت باسم test1 داخل /home/backups:

# dd if=/dev/zero of=/home/backups/test1 bs=2M count=1
# ls -lh /home/backups/test1
Verify Linux User Quota on Disk

كما يمكنك رؤية، فشلت عملية كتابة الملف بسبب تجاوز حصة القرص. نظرًا لأنه تم كتابة فقط الـ 1000 كيلوبايت الأولى على القرص، فإن النتيجة في هذه الحالة ستكون على الأرجح ملف تالف.

بالمثل، يمكنك إنشاء ACL لمجموعات المطورين من أجل منح أعضاء تلك المجموعة حق الوصول rwx إلى /home/projects:

# setfacl -m g:developers:rwx /home/projects/

وتعيين حدود الحصة مع:

# edquota -g developers

تمامًا كما فعلنا مع المستخدم gacanepa سابقًا.

يمكن تحديد فترة السماح لأي عدد من الثواني، الدقائق، الساعات، الأيام، الأسابيع، أو الشهور عن طريق تنفيذ.

# edquota -t

وتحديث القيم تحت فترة السماح بالكتلة وفترة السماح بالـ Inode.

على عكس استخدام الكتلة أو الـ inode (التي تُعين على أساس مستخدم أو مجموعة)، يتم تعيين فترة السماح على مستوى النظام.

للإبلاغ عن الحصص، يمكنك استخدام quota -u [user] أو quota -g [group] للحصول على قائمة سريعة أو repquota -v [/path/to/filesystem] للحصول على تقرير أكثر تفصيلًا وتنسيقًا جميلًا.

بالطبع، سترغب في استبدال [user]، [group]، و [/path/to/filesystem] بأسماء مستخدم / مجموعة محددة ونظام ملفات ترغب في التحقق منه.

ملخص

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

إذا كنت ترغب في معرفة المزيد حول الحصص، يمكنك الرجوع إلى دليل الحصص الصغير في مشروع توثيق Linux.

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

Source:
https://www.tecmint.com/set-access-control-lists-acls-and-disk-quotas-for-users-groups/