كتيبات سطر الأوامر

Man » دليل acl عبر الإنترنت - وثائق مفصلة عبر الإنترنت لصفحة دليل acl

🌍
acl — قوائم التحكم في الوصول

الوصف

تصف صفحة الدليل هذه قوائم التحكم في الوصول POSIX، والتي تُستخدم لتحديد حقوق الوصول التقديرية الأكثر دقة للملفات والدلائل.

أنواع ACL

يمكن اعتبار كل كائن مرتبطًا به ACL يحكم الوصول التقديري إلى هذا الكائن؛ يُشار إلى هذا ACL على أنه ACL الوصول. بالإضافة إلى ذلك، قد يكون للدليل ACL مرتبط به يحكم ACL الوصول الأولي للكائنات التي تم إنشاؤها داخل هذا الدليل؛ يُشار إلى هذا ACL على أنه ACL افتراضي.

إدخالات ACL

يتكون ACL من مجموعة من إدخالات ACL. تحدد إدخال ACL أذونات الوصول على الكائن المرتبط لمستخدم معين أو مجموعة من المستخدمين كمجموعة من أذونات القراءة والكتابة والبحث/التنفيذ.

يحتوي إدخال ACL على نوع علامة الإدخال، ومحدد علامة الإدخال الاختياري، ومجموعة من الأذونات. نستخدم مصطلح "محدد" للإشارة إلى محدد علامة الإدخال لإدخال ACL.

يشير المحدد إلى معرف المستخدم أو المجموعة، للإدخالات التي تحتوي على أنواع علامات ACL_USER أو ACL_GROUP، على التوالي. لا تحتوي الإدخالات التي تحتوي على أنواع علامات أخرى غير ACL_USER أو ACL_GROUP على محددات معرفة.

يتم تحديد أنواع علامات الإدخال التالية:

ACL_USER_OBJ    يشير إدخال ACL_USER_OBJ إلى حقوق الوصول لمالك الملف.

ACL_USER        تشير إدخالات ACL_USER إلى حقوق الوصول للمستخدمين الذين يتم تحديدهم بواسطة محدد الإدخال.

ACL_GROUP_OBJ   يشير إدخال ACL_GROUP_OBJ إلى حقوق الوصول لمجموعة الملفات.

ACL_GROUP       تشير إدخالات ACL_GROUP إلى حقوق الوصول للمجموعات التي يتم تحديدها بواسطة محدد الإدخال.

ACL_MASK        يشير إدخال ACL_MASK إلى أقصى قدر من حقوق الوصول التي يمكن منحها بواسطة الإدخالات من النوع ACL_USER أو ACL_GROUP_OBJ أو ACL_GROUP.

ACL_OTHER       يشير إدخال ACL_OTHER إلى حقوق الوصول للعمليات التي لا تتطابق مع أي إدخال آخر في ACL.

عند إجراء فحص الوصول، يتم اختبار إدخالات ACL_USER_OBJ و ACL_USER مقابل معرف المستخدم الفعال. يتم اختبار معرف المجموعة الفعال، بالإضافة إلى جميع معرفات المجموعات التكميلية، مقابل إدخالات ACL_GROUP_OBJ و ACL_GROUP.

ACLs صالحة

يحتوي ACL صالح على إدخال واحد بالضبط لكل من أنواع علامات ACL_USER_OBJ و ACL_GROUP_OBJ و ACL_OTHER. قد تظهر إدخالات بعلامات ACL_USER و ACL_GROUP صفرًا أو أكثر من مرة في ACL. يجب أن يحتوي ACL الذي يحتوي على إدخالات بعلامات ACL_USER أو ACL_GROUP على إدخال واحد بالضبط من نوع علامة ACL_MASK. إذا لم يحتوي ACL على إدخالات من أنواع علامات ACL_USER أو ACL_GROUP، فإن إدخال ACL_MASK اختياري.

يجب أن تكون جميع مُعرّفات المستخدمين فريدة بين جميع إدخالات علامة ACL_USER، ويجب أن تكون جميع مُعرّفات المجموعات فريدة بين جميع إدخالات علامة ACL_GROUP.

تُرجع الدالة acl_get_file() قائمة تحكم في الوصول (ACL) تحتوي على صفر من إدخالات ACL كقائمة تحكم في الوصول الافتراضية للدليل، إذا لم يكن الدليل مرتبطًا بقائمة تحكم في الوصول الافتراضية. تقبل الدالة acl_set_file() أيضًا قائمة تحكم في الوصول (ACL) تحتوي على صفر من إدخالات ACL كقائمة تحكم في الوصول الافتراضية الصالحة للدلائل، مما يشير إلى أنه يجب عدم ربط الدليل بقائمة تحكم في الوصول الافتراضية. هذا يعادل استخدام الدالة acl_delete_def_file().

العلاقة بين إدخالات قائمة تحكم في الوصول (ACL) وأجزاء أذونات الملف

الأذونات المحددة بواسطة قوائم تحكم في الوصول (ACL) هي مجموعة فرعية من الأذونات المحددة بواسطة أجزاء أذونات الملف.

توجد علاقة بين أذونات المالك والمجموعة والآخرين وأجزاء معينة من قائمة تحكم في الوصول (ACL): تتوافق أذونات المالك مع أذونات إدخال ACL_USER_OBJ. إذا كانت قائمة تحكم في الوصول (ACL) تحتوي على إدخال ACL_MASK، فإن أذونات المجموعة تتوافق مع أذونات إدخال ACL_MASK. وإلا، إذا كانت قائمة تحكم في الوصول (ACL) لا تحتوي على إدخال ACL_MASK، فإن أذونات المجموعة تتوافق مع أذونات إدخال ACL_GROUP_OBJ. تتوافق أذونات الآخرين مع أذونات إدخال ACL_OTHER.

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

إنشاء الكائن وقوائم تحكم في الوصول (ACL) الافتراضية

يتم تهيئة قائمة تحكم في الوصول (ACL) لكائن ملف عند إنشاء الكائن باستخدام أي من الدالات creat() أو mkdir() أو mknod() أو mkfifo() أو open(). إذا كانت قائمة تحكم في الوصول (ACL) الافتراضية مرتبطة بدليل، يتم استخدام معلمة الوضع في الدوال التي تنشئ كائنات الملف وقائمة تحكم في الوصول (ACL) الافتراضية للدليل لتحديد قائمة تحكم في الوصول (ACL) للكائن الجديد:

يتم وراثة قائمة تحكم في الوصول (ACL) الافتراضية للدليل الذي يحتويه كقائمة تحكم في الوصول (ACL) للكائن الجديد.

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

إذا لم تكن قائمة تحكم في الوصول (ACL) الافتراضية مرتبطة بدليل، يتم استخدام معلمة الوضع في الدوال التي تنشئ كائنات الملف وقناع إنشاء الملف (انظر umask(2)) لتحديد قائمة تحكم في الوصول (ACL) للكائن الجديد:

يتم تعيين قائمة تحكم في الوصول (ACL) للكائن الجديد تحتوي على إدخالات من أنواع العلامات ACL_USER_OBJ و ACL_GROUP_OBJ و ACL_OTHER. يتم تعيين أذونات هذه الإدخالات إلى الأذونات المحددة بواسطة قناع إنشاء الملف.

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

خوارزمية فحص الوصول

يمكن للعملية طلب الوصول للقراءة أو الكتابة أو التنفيذ/البحث إلى كائن ملف محمي بقائمة تحكم في الوصول (ACL). تحدد خوارزمية فحص الوصول ما إذا كان سيتم منح الوصول إلى الكائن.


    إذا تطابقت معرف المستخدم الفعلي للعملية مع معرف المستخدم الخاص بمالك ملف الكائن، فإنه:

إذا احتوت إدخال ACL_USER_OBJ على الأذونات المطلوبة، يتم منح الوصول،

وإلا يتم رفض الوصول.

وإلا إذا تطابق معرف المستخدم الفعلي للعملية مع المحدد الخاص بأي إدخال من النوع
ACL_USER، فإنه:

إذا احتوى إدخال ACL_USER المطابق وإدخال ACL_MASK على الأذونات المطلوبة، يتم منح الوصول،

وإلا يتم رفض الوصول.

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

إذا احتوت ACL على إدخال ACL_MASK، فإنه:

إذا احتوى إدخال ACL_MASK وأي من إدخالات ACL_GROUP_OBJ أو ACL_GROUP المطابقة على الأذونات المطلوبة، يتم منح الوصول،

وإلا يتم رفض الوصول.

وإلا (لاحظ أنه لا يمكن أن تكون هناك إدخالات ACL_GROUP بدون إدخال ACL_MASK):

إذا احتوى إدخال ACL_GROUP_OBJ على الأذونات المطلوبة، يتم منح الوصول،

وإلا يتم رفض الوصول.

وإلا إذا احتوى إدخال ACL_OTHER على الأذونات المطلوبة، يتم منح الوصول.

وإلا يتم رفض الوصول.

نماذج نصية لـ ACL

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

user     يحدد إدخال ACL الخاص بالمستخدم الوصول الممنوح إما لمالك الملف (علامة نوع إدخال ACL_USER_OBJ) أو لمستخدم محدد (علامة نوع إدخال ACL_USER).

group    يحدد إدخال ACL الخاص بالمجموعة الوصول الممنوح إما لمجموعة الملف (علامة نوع إدخال ACL_GROUP_OBJ) أو لمجموعة محددة (علامة نوع إدخال ACL_GROUP).

mask     يحدد إدخال ACL الخاص بالقناع الحد الأقصى من الوصول الذي يمكن منحه بواسطة أي إدخال ACL باستثناء إدخال المستخدم الخاص بمالك الملف وإدخال "الآخر" (علامة نوع إدخال ACL_MASK).

other    يحدد إدخال ACL الخاص بـ "الآخر" الوصول الممنوح لأي عملية لا تتطابق مع أي من إدخالات ACL للمستخدم أو المجموعة (علامة نوع إدخال ACL_OTHER).

يحتوي الحقل الثاني على معرف المستخدم أو معرف المجموعة الخاص بالمستخدم أو المجموعة المرتبطين بإدخال ACL للإدخالات من نوع علامة إدخال ACL_USER أو ACL_GROUP، ويكون فارغًا لجميع الإدخالات الأخرى. يمكن أن يكون معرف المستخدم اسم مستخدم أو رقم تعريف مستخدم عشري. يمكن أن يكون معرف المجموعة اسم مجموعة أو رقم تعريف مجموعة عشري.

يحتوي الحقل الثالث على أذونات الوصول التقديرية. يتم تمثيل أذونات القراءة والكتابة والبحث / التنفيذ بالأحرف r و w و x، بهذا الترتيب. يتم استبدال كل من هذه الأحرف بالحرف "-" للإشارة إلى أن الإذن مفقود في إدخال ACL. عند التحويل من النموذج النصي إلى التمثيل الداخلي، لا يلزم تحديد الأذونات المفقودة.

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

النموذج النصي الطويل

يحتوي النموذج النصي الطويل على إدخال واحد لقائمة التحكم في الوصول (ACL) في كل سطر. بالإضافة إلى ذلك، يمكن أن تبدأ علامة التجزئة (#) تعليقًا يمتد حتى نهاية السطر. إذا كان إدخال ACL_USER أو ACL_GROUP_OBJ أو ACL_GROUP في قائمة التحكم في الوصول (ACL) يحتوي على أذونات غير موجودة أيضًا في إدخال ACL_MASK، فيتم إضافة إشارة رقم (#) بعد الإدخال، ثم السلسلة "effective:"، والأذونات الفعالة المعرفة بواسطة هذا الإدخال. فيما يلي مثال على النموذج النصي الطويل:

user::rw-  #effective:r-
user:lisa:rw-         #effective:r-
group::r-
group:toolies:rw-     #effective:r-
mask::r-
other::r-

النموذج النصي القصير

النموذج النصي القصير هو سلسلة من إدخالات قائمة التحكم في الوصول (ACL) مفصولة بفواصل، ويستخدم للإدخال. لا يتم دعم التعليقات. يمكن أن تظهر كلمات رئيسية لأنواع علامات الإدخال إما في شكلها الكامل غير المختصر، أو في شكلها المختصر المكون من حرف واحد. الاختصار لكلمة "user" هو "u"، والاختصار لكلمة "group" هو "g"، والاختصار لكلمة "mask" هو "m"، والاختصار لكلمة "other" هو "o". يمكن أن تحتوي الأذونات على حرف واحد على الأكثر من الأحرف التالية في أي ترتيب: r، w، x. فيما يلي أمثلة على النموذج النصي القصير:

u::rw-,u:lisa:rw-,g::r--,g:toolies:rw-,m::r--,o::r-
g:toolies:rw,u:lisa:rw,u::wr,g::r,o::r,m::r

الأساس المنطقي

يحدد معيار IEEE 1003.1e الإصدار 17 قوائم التحكم في الوصول (ACL) التي تتضمن إدخالات من نوع ACL_MASK، ويحدد تعيينًا بين وحدات البت الخاصة بأذونات الملفات والتي ليست ثابتة. حددت مجموعة العمل الخاصة بالمعيار هذه الواجهة المعقدة نسبيًا لضمان استمرار عمل التطبيقات المتوافقة مع معيار IEEE 1003.1 ("POSIX.1") على الأنظمة التي تحتوي على قوائم التحكم في الوصول (ACL). يحتوي معيار IEEE 100.1e الإصدار 17 على الأساس المنطقي لاختيار هذه الواجهة في القسم B.23.

تغييرات في الأدوات المساعدة الخاصة بالملفات

على نظام يدعم قوائم التحكم في الوصول (ACL)، تتغير سلوك الأدوات المساعدة الخاصة بالملفات ls(1)، وcp(1)، وmv(1) بالطريقة التالية:

بالنسبة للملفات التي تحتوي على قائمة تحكم في الوصول (ACL) افتراضية أو قائمة تحكم في الوصول التي تحتوي على أكثر من ثلاثة إدخالات مطلوبة، تعرض الأداة المساعدة ls(1) في النموذج الطويل الذي يتم إنشاؤه بواسطة الأمر ls -l علامة زائد (+) بعد سلسلة الأذونات.

إذا تم تحديد العلامة -p، فإن الأداة المساعدة cp(1) تحفظ أيضًا قوائم التحكم في الوصول (ACL). إذا لم يكن ذلك ممكنًا، فسيتم عرض تحذير.

تحفظ الأداة المساعدة mv(1) دائمًا قوائم التحكم في الوصول (ACL). إذا لم يكن ذلك ممكنًا، فسيتم عرض تحذير.

يتم وصف تأثير الأداة المساعدة chmod(1)، واستدعاء النظام chmod(2) على قائمة التحكم في الوصول في "الارتباط بين إدخالات قائمة التحكم في الوصول ووحدات البت الخاصة بأذونات الملفات".

المعايير

يصف مستند IEEE 1003.1e الإصدار 17 ("POSIX.1e") العديد من الامتدادات الأمنية لمعيار IEEE 100.1. على الرغم من أن العمل على 1003.1e قد توقف، إلا أن العديد من الأنظمة التي تشبه UNIX تنفذ أجزاء من معيار POSIX.1e الإصدار 17، أو من الإصدارات السابقة.


تقوم قوائم التحكم في الوصول في نظام Linux بتنفيذ المجموعة الكاملة من الوظائف والأدوات المحددة لقوائم التحكم في الوصول في POSIX.1e، بالإضافة إلى العديد من الامتدادات. التنفيذ متوافق تمامًا مع المسودة 17 من POSIX.1e؛ يتم تمييز الامتدادات على هذا النحو. يتم تعريف وظائف معالجة قائمة التحكم في الوصول في مكتبة ACL (libacl، -lacl). يتم الإعلان عن الواجهات المتوافقة مع POSIX في الرأس . يتم الإعلان عن الامتدادات الخاصة بنظام Linux لهذه الوظائف في الرأس .

ملاحظات

أذونات الرفض ومساحات أسماء مستخدمي Linux

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

انظر أيضًا

chmod(1)، creat(2)، getfacl(1)، ls(1)، mkdir(2)، mkfifo(2)، mknod(2)، mount(8)، open(2)، setfacl(1)، stat(2)، umask(1)

POSIX 1003.1e مسودة 17

https://wt.tuxomania.net/publications/posix.1e/download.html

وظائف POSIX 1003.1e حسب الفئة

إدارة تخزين ACL acl_dup(3)، acl_free(3)، acl_init(3)

معالجة إدخالات ACL acl_copy_entry(3)، acl_create_entry(3)، acl_delete_entry(3)، acl_get_entry(3)، acl_valid(3)

acl_add_perm(3)، acl_calc_mask(3)، acl_clear_perms(3)، acl_delete_perm(3)،
acl_get_permset(3)، acl_set_permset(3)

acl_get_qualifier(3)، acl_get_tag_type(3)، acl_set_qualifier(3)، acl_set_tag_type(3)

معالجة ACL على كائن acl_delete_def_file(3)، acl_get_fd(3)، acl_get_file(3)، acl_set_fd(3)، acl_set_file(3)

ترجمة تنسيق ACL acl_copy_entry(3)، acl_copy_ext(3)، acl_from_text(3)، acl_to_text(3)، acl_size(3)

وظائف POSIX 1003.1e حسب التوفر

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

acl_delete_def_file(3)، acl_dup(3)، acl_free(3)، acl_from_text(3)، acl_get_fd(3)،
acl_get_file(3)، acl_init(3)، acl_set_fd(3)، acl_set_file(3)، acl_to_text(3)، acl_valid(3)

acl_add_perm(3)، acl_calc_mask(3)، acl_clear_perms(3)، acl_copy_entry(3)، acl_copy_ext(3)،
acl_copy_int(3)، acl_create_entry(3)، acl_delete_entry(3)، acl_delete_perm(3)، acl_get_entry(3)،
acl_get_permset(3)، acl_get_qualifier(3)، acl_get_tag_type(3)، acl_set_permset(3)،
acl_set_qualifier(3)، acl_set_tag_type(3)، acl_size(3)

ملحقات لينكس

تتوفر ملحقات غير قابلة للنقل هذه على أنظمة لينكس. acl_check(3), acl_cmp(3), acl_entries(3), acl_equiv_mode(3), acl_error(3), acl_extended_fd(3), acl_extended_file(3), acl_extended_file_nofollow(3), acl_from_mode(3), acl_get_perm(3), acl_to_any_text(3)

المؤلف

أندرياس غرونباخ، <_>