كمسؤول نظام، سيكون أولويتنا الأولى هي حماية البيانات وتأمينها من الوصول غير المصرح به. نحن جميعًا على علم بالأذونات التي نقوم بتعيينها باستخدام بعض الأوامر المفيدة في نظام Linux مثل chmod، chown، chgrp… الخ. ومع ذلك، تحتوي مجموعات الأذونات الافتراضية على بعض القيود وأحيانًا قد لا تعمل وفقًا لاحتياجاتنا. على سبيل المثال، لا يمكننا تعيين مجموعات أذونات مختلفة لمستخدمين مختلفين على نفس الدليل أو الملف. وبالتالي، تم تنفيذ قوائم التحكم في الوصول (ACLs).

على سبيل المثال، لديك ثلاثة مستخدمين، ‘tecmint1’، ‘tecmint2’ و ‘tecmint3’. كل منهم ينتمي إلى مجموعة مشتركة تسمى ‘acl’. يرغب المستخدم ‘tecmint1’ في أن يكون فقط المستخدم ‘tecmint2’ قادرًا على قراءة و الوصول إلى الملفات التي يمتلكها ‘tecmint1’ ولا ينبغي لأي شخص آخر الوصول إليها.
قوائم التحكم في الوصول (ACLs) تتيح لنا فعل نفس الشيء. تتيح لنا هذه القوائم منح الأذونات لمستخدم، المجموعة وأي مجموعة من المستخدمين الذين ليست في قائمة المجموعة لمستخدم ما.
ملاحظة: وفقًا لوثائق منتج Redhat، يتوفر دعم ACL لنظام ملفات ext3 وأنظمة الملفات المصدرة عبر NFS.
كيفية التحقق من دعم ACL في أنظمة Linux
قبل المضي قدمًا، يجب أن يكون لديك دعم لقوائم التحكم في الوصول على النواة الحالية وأنظمة الملفات المُركّبة.
1. التحقق من دعم النواة لقوائم التحكم في الوصول
قم بتشغيل الأمر التالي للتحقق من دعم ACL لنظام الملفات والخيار POSIX_ACL=Y (إذا كان هناك N بدلاً من Y، فهذا يعني أن النواة لا تدعم ACL ويجب إعادة تجميعها).
[root@linux ~]# grep -i acl /boot/config* CONFIG_EXT4_FS_POSIX_ACL=y CONFIG_REISERFS_FS_POSIX_ACL=y CONFIG_JFS_POSIX_ACL=y CONFIG_XFS_POSIX_ACL=y CONFIG_BTRFS_FS_POSIX_ACL=y CONFIG_FS_POSIX_ACL=y CONFIG_GENERIC_ACL=y CONFIG_TMPFS_POSIX_ACL=y CONFIG_NFS_V3_ACL=y CONFIG_NFSD_V2_ACL=y CONFIG_NFSD_V3_ACL=y CONFIG_NFS_ACL_SUPPORT=m CONFIG_CIFS_ACL=y CONFIG_9P_FS_POSIX_ACL=y
2. تحقق من الحزم المطلوبة
قبل البدء في استخدام ACLs تأكد من تثبيت الحزم المطلوبة. أدناه الحزم المطلوبة التي يجب تثبيتها باستخدام yum أو apt-get.
[root@linux ~]# yum install nfs4-acl-tools acl libacl [on RedHat based systems]
[tecmint@linux ~]$ sudo apt-get install nfs4-acl-tools acl [on Debian based systems]
3. تحقق من نظام الملفات المُركب لدعم ACLs
الآن، قم بالتحقق من نظام الملفات المُركب إذا كانت تمتلك خيار ACL أم لا. يمكننا استخدام الأمر ‘mount‘ للتحقق من ذلك كما هو موضح أدناه.
[root@linux ~]# mount | grep -i root /dev/mapper/fedora-root on / type ext4 (rw,relatime,data=ordered)
ولكن في حالتنا لا يظهر الخيار acl افتراضيًا. لذلك، لدينا الآن خيار لإعادة تركيب القسم المُركب مرة أخرى باستخدام خيار acl. ولكن، قبل المضي قدمًا، لدينا خيار آخر للتأكد مما إذا كان القسم المُركب يحمل خيار acl أم لا، لأنه في أنظمة حديثة قد يتم دمجه مع خيار تركيب الافتراضي.
[root@linux ~]# tune2fs -l /dev/mapper/fedora-root | grep acl Default mount options: user_xattr acl
في الناتج أعلاه، يمكنك أن ترى أن خيار التركيب الافتراضي يدعم بالفعل ACL. الخيار الآخر هو إعادة تركيب القسم على النحو الموضَّح أدناه.
[root@linux ~]# mount -o remount,acl /
ثم، قم بإضافة الإدخال التالي إلى ملف ‘/etc/fstab’ لجعله دائمًا.
/dev/mapper/fedora-root / ext4 defaults,acl 1 1
مرة أخرى، قم بإعادة تركيب القسم.
[root@linux ~]# mount -o remount /
4. بالنسبة لخادم NFS
في خادم NFS، إذا كان نظام الملفات الذي يتم تصديره بواسطة خادم NFS يدعم ACL ويمكن للعملاء NFS قراءة ACLs، يتم استخدام ACLs من قبل نظام العميل.
لتعطيل ACLs على NFS share، يجب عليك إضافة الخيار “no_acl” في ملف “/etc/exportfs” على خادم NFS. لتعطيله على جانب العميل مرة أخرى، استخدم الخيار “no_acl” أثناء وقت التحميل.
كيفية تنفيذ دعم ACL في أنظمة Linux
هناك نوعان من ACLs:
- Access ACLs: تُستخدم لمنح الأذونات على أي ملف أو دليل.
- Default ACLs: تُستخدم لمنح/ضبط قائمة التحكم في الوصول على دليل معين فقط.
الفرق بين Access ACL و Default ACL:
- يمكن استخدام Default ACL على مستوى الدليل فقط.
- أي دليل فرعي أو ملف يتم إنشاؤه ضمن هذا الدليل سيورث ACLs من دليله الرئيسي. من ناحية أخرى، يرث الملف ACLs الافتراضية ك ACLs الوصول الخاصة به.
- نستخدم “–d” لضبط Default ACLs و Default ACLs اختيارية.
قبل ضبط Default ACLs
لتحديد ACLs الافتراضية لملف أو دليل معين، استخدم أمر ‘getfacl‘. في المثال أدناه، يتم استخدام getfacl للحصول على ACLs الافتراضية لمجلد ‘Music‘.
[root@linux ~]# getfacl Music/ # file: Music/ # owner: root # group: root user::rwx group::r-x other::r-x default:user::rwx default:group::r-x default:other::rw-
بعد ضبط Default ACLs
لضبط ACLs الافتراضية لملف أو دليل معين، استخدم أمر ‘setfacl‘. في المثال أدناه، سيقوم أمر setfacl بضبط ACLs جديدة (قراءة و تنفيذ) على مجلد ‘Music’.
[root@linux ~]# setfacl -m d:o:rx Music/ [root@linux ~]# getfacl Music/ # file: Music/ # owner: root # group: root user::rwx group::r-x other::r-x default:user::rwx default:group::r-x default:other::r-x
كيفية تعيين صلاحيات التحكم في الوصول الجديدة
استخدم أمر ‘setfacl‘ لتعيين أو تعديل على أي ملف أو دليل. على سبيل المثال، لمنح أذونات القراءة و الكتابة للمستخدم ‘tecmint1’.
# setfacl -m u:tecmint1:rw /tecmint1/example
كيفية عرض صلاحيات التحكم في الوصول
استخدم أمر ‘getfacl‘ لعرض صلاحيات التحكم في الوصول على أي ملف أو دليل. على سبيل المثال، لعرض صلاحيات التحكم في الوصول على ‘/tecmint1/example’ استخدم الأمر التالي.
# getfacl /tecmint1/example # file: tecmint1/example/ # owner: tecmint1 # group: tecmint1 user::rwx user:tecmint1:rwx user:tecmint2:r-- group::rwx mask::rwx other::---
كيفية إزالة صلاحيات التحكم في الوصول
لإزالة صلاحيات التحكم في الوصول من أي ملف/دليل، نستخدم الخيارات x و b كما هو موضح أدناه.
# setfacl -x ACL file/directory # remove only specified ACL from file/directory. # setfacl -b file/directory #removing all ACL from file/direcoty
لنقم بتطبيق صلاحيات التحكم في الوصول على السيناريو التالي
مستخدمان (tecmint1 و tecmint2)، كلاهما لديهما مجموعة ثانوية مشتركة تسمى ‘acl‘. سنقوم بإنشاء دليل واحد يمتلكه ‘tecmint1’ وسنوفر أذونات القراءة و التنفيذ على ذلك الدليل للمستخدم ‘tecmint2’.
الخطوة 1: إنشاء مستخدمين وإزالة كلمة مرور من كلاهما
[root@linux ~]# for user in tecmint1 tecmint2 > do > useradd $user > passwd -d $user > done Removing password for user tecmint1. passwd: Success Removing password for user tecmint2. passwd: Success
الخطوة 2: إنشاء مجموعة ومستخدمين للمجموعة الثانوية
[root@linux ~]# groupadd acl [root@linux ~]# usermod -G acl tecmint1 [root@linux ~]# usermod -G acl tecmint2
الخطوة 3: إنشاء دليل /tecmint وتغيير ملكية الدليل إلى tecmint1.
[root@linux ~]# mkdir /tecmint1 [root@linux ~]# chown tecmint1 /tecmint1/
[root@linux ~]# ls -ld /tecmint1/ drwxr-xr-x 2 tecmint1 root 4096 Apr 17 14:46 /tecmint1/
[root@linux ~]# getfacl /tecmint1 getfacl: Removing leading '/' from absolute path names # file: tecmint1 # owner: tecmint1 # group: root user::rwx group::r-x other::r-x
الخطوة 4: تسجيل الدخول مع tecmint1 وإنشاء دليل في مجلد /tecmint.
[tecmint@linux ~]$ su - tecmint1 Last login: Thu Apr 17 14:49:16 IST 2014 on pts/4
[tecmint1@linux ~]$ cd /tecmint1/ [tecmint1@linux tecmint1]$ mkdir example
[tecmint1@linux tecmint1]$ ll total 4 drwxrwxr-x 2 tecmint1 tecmint1 4096 Apr 17 14:50 example
[tecmint1@linux tecmint1]$ whoami tecmint1
الخطوة 5: الآن، ضع سيطرة الوصول باستخدام ‘setfacl’، بحيث يحصل ‘tecmint1’ على كافة أذونات rwx، ‘tecmint2’ سيكون لديه إذن القراءة فقط على مجلد ‘example’ والآخرين لن يمتلكون أي أذونات.
$ setfacl -m u:tecmint1:rwx example/ $ setfacl -m u:tecmint2:r-- example/ $ setfacl -m other:--- example/ $ getfacl example/ # file: example # owner: tecmint1 # group: tecmint1 user::rwx user:tecmint1:rwx user:tecmint2:r-- group::r-x mask::rwx other::---
الخطوة 6: الآن، قم بتسجيل الدخول بمستخدم آخر أي ‘tecmint2’ على نافذة أوامر أخرى وانتقل إلى دليل ‘tecmint1’. حاول الآن عرض المحتويات باستخدام الأمر ‘ls’ ومن ثم حاول تغيير الدليل وانظر الفرق كما هو موضح أدناه.
[tecmint@linux ~]$ su - tecmint2 Last login: Thu Apr 17 15:03:31 IST 2014 on pts/5
[tecmint2@linux ~]$ cd /tecmint1/ [tecmint2@linux tecmint1]$ ls -lR example/ example/: total 0
[tecmint2@linux tecmint1]$ cd example/ -bash: cd: example/: Permission denied
[tecmint2@linux tecmint1]$ getfacl example/ # file: example # owner: tecmint1 # group: tecmint1 user::rwx user:tecmint1:rwx user:tecmint2:r-- group::rwx mask::rwx other::---
الخطوة 7: الآن، قم بإعطاء إذن ‘تنفيذ’ لـ ‘tecmint2’ على مجلد ‘example’ ومن ثم استخدم الأمر ‘cd’ لرؤية التأثير. الآن ‘tecmint2’ لديه أذونات لعرض وتغيير الدليل، ولكن ليس لديه أذونات لكتابة أي شيء.
[tecmint1@linux tecmint1]$ setfacl -m u:tecmint2:r-x example/ [tecmint1@linux tecmint1]$ getfacl example/ # file: example # owner: tecmint1 # group: tecmint1 user::rwx user:tecmint1:rwx user:tecmint2:r-x group::rwx mask::rwx other::---
[tecmint@linux ~]$ su - tecmint2 Last login: Thu Apr 17 15:09:49 IST 2014 on pts/5
[tecmint2@linux ~]$ cd /tecmint1/ [tecmint2@linux tecmint1]$ cd example/ [tecmint2@linux example]$ getfacl .
[tecmint2@linux example]$ mkdir test mkdir: cannot create directory ‘test’: Permission denied
[tecmint2@linux example]$ touch test touch: cannot touch ‘test’: Permission denied
ملاحظة: بعد تطبيق سيطرة الوصولات، ستلاحظ إشارة إضافية ‘+’ في نتيجة ‘ls -l’ كما هو موضح أدناه.
[root@linux tecmint1]# ll total 4 drwxrwx---+ 2 tecmint1 tecmint1 4096 Apr 17 17:01 example
روابط المرجع
Source:
https://www.tecmint.com/secure-files-using-acls-in-linux/