النقاط الرئيسية
- تضمن أقنعة قائمة التحكم في الوصول (ACL) التوافق مع البرامج التي لا تتعرف على ACL، وترجمة إدخالات ACL إلى أذونات POSIX.
- تمثل أقنعة ACL الحد الأقصى للأذونات المسموح بها لأي كائن مستخدم أو مجموعة ليس المستخدم المالك أو المجموعة أو فئة “أخرى”.
- عند إضافة إدخالات ACL جديدة، يتم تعديل القناع تلقائيًا ليعكس الحد الأقصى للأذونات المسموح بها لجميع المستخدمين أو المجموعات المسماة.
هل تستخدم قوائم التحكم في الوصول (ACLs) ولكنك تشعر بالارتباك بشأن مفهوم الأقنعة؟ أنت لست وحدك. دعنا نتعمق في هذا المفهوم المهم من خلال إلقاء نظرة على ماهيتها وكيفية تفاعلها مع أذونات نظام الملفات في Linux.
ما هي أقنعة الرباط الصليبي الأمامي؟
أقنعة ACL هي طريقة لضمان توافق الأذونات مع البرامج والأدوات المساعدة التي لا تدعم ACL.
قناع ACL على ملف أو دليل يعادل الحد الأقصى الأذونات المسموح بها لأي كائن مستخدم أو مجموعة ليس المستخدم المالك أو المجموعة أو فئة “أخرى” لنموذج المستخدم/المجموعة/فئة أخرى. بعبارة أخرى، يترجم إدخالات ACL في أذونات POSIX من أجل التوافق مع الإصدارات السابقة.
دعونا نلقي نظرة على الملف الذي تم إنشاؤه حديثًا والذي سنعمل عليه في هذه المقالة، mysupersecretfile.txt:
ls -l mysupersecretfile.txt
أذونات واضحة جدًا لمثل هذه الوثيقة الحساسة، أليس كذلك؟
لاحظ النقطة (.) بعد مجموعة الأذونات. يشير هذا إلى سياق SELinux، الذي لا يرتبط بقوائم التحكم في الوصول أو أقنعة قوائم التحكم في الوصول.
من أجل التوضيح، دعنا أيضًا نفحص إدخالات قائمة التحكم في الوصول الخاصة بالملف، باستخدام الأمر getfacl:
getfacl mysupersecretfile.txt
يتم تعيين إدخالات قائمة التحكم في الوصول الحالية لإدخالات المستخدم والمجموعة المالكة مباشرةً إلى المستخدم والمجموعة المالكة الفعليين لملف POSIX. وهذا أمر طبيعي لأي ملف لا يحتوي على إدخالات قائمة التحكم في الوصول الموسعة، ويُطلق عليه “قوائم التحكم في الوصول الدنيا”.
لنفترض أننا تلقينا طلبًا لإضافة مستخدم يُدعى manager كإدخال قائمة التحكم في الوصول إلى هذا الملف، مع أذونات القراءة. سننجز ذلك باستخدام الأمر setfacl. بعد ذلك، دعنا نفحص أذونات قائمة التحكم في الوصول الجديدة باستخدام الأمرين ls وgetfacl:
setfacl -m u:manager:r mysupersecretfile.txt
ls -l mysupersecretfile.txt
getfacl mysupersecretfile.txt
ستلاحظ الآن علامة “+” بجوار إدخالات الأذونات في الأمر ls، مما يشير إلى وجود إدخالات ACL مرتبطة بالملف.
هل ترى قناع هل يوجد سطر في ناتج أمر getfacl الآن؟ بالإضافة إلى إدخال قائمة التحكم في الوصول الموسعة لمستخدم المدير، تم تعيين إدخال القناع هذا تلقائيًا. هذا ضروري؛ فهو يمثل الحد الأقصى للأذونات المسموح بها لأي مستخدم مسمى أو كائن مجموعة (مرة أخرى، بالإضافة إلى مستخدم المالك وكائنات المجموعة المالكة). في الوقت الحالي، يعادل إذن القراءة إذن القراءة للقناع الحالي.
الآن دعنا نضيف مستخدمًا آخر من طلب ثانٍ، وهو المتعاقد، إلى قائمة التحكم في الوصول الخاصة بملفنا. ولكن هذه المرة، نحتاج إلى منحه أذونات القراءة والكتابة. دعنا نرى كيف يؤثر ذلك على القناع:
setfacl -m u:contractor:rw mysupersecretfile.txt
getfacl mysupersecretfile.txt
الآن، بالإضافة إلى إدخال قائمة التحكم في الوصول للمدير (r)، نرى أيضًا إدخال المقاول (rw). ولكن لماذا تغير إدخال القناع إلى القراءة والكتابة؟
عندما أضفنا مستخدم المقاول بأذونات القراءة والكتابة، فقد أثر ذلك على قناع قائمة التحكم في الوصول لأنه، كما ذكرت أعلاه، يتعلق القناع بـ الحد الأقصى الأذونات المسموح بها لمستخدمي قائمة التحكم في الوصول وإدخالات المجموعة. نظرًا لأننا أضفنا أذونات الكتابة إلى إدخال قائمة التحكم في الوصول لمستخدم المتعاقد، فإن القناع يحصل أيضًا على إذن الكتابة.
عند العمل مع قوائم التحكم في الوصول، سترى أن دور أذونات فئة المجموعة (مثل إخراج ل س -ل تم إعادة تصميم الأمر (command) ليعكس قناع قائمة التحكم في الوصول (ACL). ولكن لا تقلق، حيث لا تزال أذونات مالك المجموعة تنعكس باعتبارها إدخال قائمة التحكم في الوصول “المجموعة المالكة”.
ضع في اعتبارك أنه إذا قمت بإضافة مستخدم آخر بأذونات أقل، على سبيل المثال القراءة فقط، فلن يرث أذونات القناع – تمامًا كما لم يحصل مستخدم المدير على إذن الكتابة عندما أضفنا إدخال قائمة التحكم في الوصول (ACL) لمستخدم المقاول.
الأذونات الفعالة
يمكننا ضبط أذونات إدخال القناع يدويًا باستخدام الأمر setfacl. سيسمح لنا هذا بتصفية أي أذونات مستخدم و/أو مجموعة مسماة تم ضبطها على الملف في نفس الوقت، أو لإدخالات قائمة التحكم في الوصول للمستخدمين الحاليين للملف، إلى القاسم المشترك الأدنى. يُطلق على هذا الأذونات الفعّالة.
دعنا نضبط القناع على ملفنا للقراءة فقط، ثم نلقي نظرة جديدة على إدخالات قائمة التحكم في الوصول (ACL):
setfacl -m m::r mysupersecretfile.txt
getfacl mysupersecretfile.txt
يتيح لنا التعليق الذي يوضح الأذونات الفعالة لمستخدم المقاول معرفة أنه على الرغم من منحهم أذونات القراءة والكتابة، إلا أنهم في الواقع لديهم أذونات القراءة فقط. تسبب تعديل القناع في حدوث ذلك. إذا نظرنا إلى الملف مرة أخرى باستخدام ل س -لسنرى أن أذونات فئة المجموعة (والتي تم إعادة تصميمها مرة أخرى لتعكس القناع) قد تغيرت:
ls -l mysupersecretfile.txt
إذا كنت تريد إضافة إدخال قائمة التحكم في الوصول لمستخدم أو مجموعة باسم، ولكنك لا تريد إعادة حساب القناع، فيمكنك استخدام -ن إلى جانب setfacl. سيؤدي هذا إلى تقييد قائمة التحكم في الوصول التي تضيفها إلى الحد الأقصى للأذونات المسموح بها بواسطة القناع (كما هو موضح من خلال الأذونات الفعّالة للإدخال). هذا ليس الإعداد الافتراضي، مع ذلك؛ ضع في اعتبارك أن القناع ليس شكلاً من أشكال التحكم في الوصول الإلزاميدعونا نحاول ذلك أدناه:
setfacl -n -m u:milton:rwx mysupersecretfile.txt
getfacl mysupersecretfile.txt
الأقنعة الافتراضية
عند العمل مع قوائم التحكم في الوصول، يكون مفهوم الأقنعة الافتراضية مشابهًا جدًا لإدخالات قوائم التحكم في الوصول الافتراضية. على سبيل المثال، عند إضافة قناع افتراضي إلى دليل، سترث جميع الملفات والدلائل الفرعية التي تم إنشاؤها حديثًا داخله نفس القناع (بالإضافة إلى إدخال القناع الافتراضي). ما عليك سوى استخدام -د المعلمة مع الأمر setfacl لتطبيق قناع افتراضي:
mkdir mysupersecretdirectory
setfacl -d -m m::rX mysupersecretdirectory/
getfacl mysupersecretdirectory/
mkdir mysupersecretdirectory/mysupersecretsubdirectory/
getfacl mysupersecretdirectory/mysupersecretsubdirectory/
الأقنعة الافتراضية، وإدخالات ACL الافتراضية، لا تنطبق إلا على الدلائل لأنها الكائنات الوحيدة التي يمكن أن تحتوي على ملفات و/أو دلائل أخرى بداخلها لتطبيق هذه الإدخالات القابلة للتوريث عليها.
أقنعة ACL هي طريقة لضمان التعامل مع أمان قوائم ACL بشكل صحيح، بغض النظر عن قدرات البرنامج الذي يتعامل معها.
مع استمرار التطور السريع للتكنولوجيا والبرمجيات ومفاهيم الأمان، من المهم أن نتذكر أن التوافق مع الإصدارات السابقة أمر بالغ الأهمية بالنسبة للعديد منا، ويجب احترامه جنبًا إلى جنب مع التطورات الجديدة. بالطبع، هذا لا يعني أنه لا يمكنك الحصول على ميزات جديدة، بل يعني فقط أن هذه الميزات الجديدة يجب أن تلتزم بالمعايير الحالية.