landlock_restrict_self(2)

الاسم
landlock_restrict_self - فرض مجموعة قواعد Landlock

المكتبة
مكتبة سي المعيارية (libc، -lc)

موجز
#include <linux/landlock.h>  /* تعريف ثوابت LANDLOCK_* */
#include <sys/syscall.h>     /* تعريف ثوابت SYS_* */

int syscall(SYS_landlock_restrict_self, int ruleset_fd,
            uint32_t flags);

الوصف
بمجرد ملء مجموعة قواعد Landlock بالقواعد المطلوبة، يفرض استدعاء النظام landlock_restrict_self() هذه المجموعة على الخيط المستدعي. انظر landlock(7) للحصول على نظرة عامة شاملة.

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

لفرض مجموعة قواعد، يجب أن يمتلك المستدعي صلاحية CAP_SYS_ADMIN في نطاق المستخدم الخاص به، أو يجب أن يكون الخيط قد ضبط بت no_new_privs مسبقًا. كما هو الحال مع seccomp(2)، يتجنب هذا السيناريوهات حيث يمكن للعمليات غير المميزة التأثير على سلوك الأطفال المميزين (مثل بسبب ثنائيات set-user-ID). إذا لم يكن هذا البت قد ضُبط من قبل سلف لهذا الخيط، يجب على الخيط إجراء الاستدعاء التالي:

        prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0);

ruleset_fd هو واصف ملف مجموعة قواعد Landlock تم الحصول عليه باستخدام landlock_create_ruleset(2) وتم ملؤه بالكامل بمجموعة من الاستدعاءات لـ landlock_add_rule(2).

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

ينطبق العلمان LANDLOCK_RESTRICT_SELF_LOG_SAME_EXEC_OFF و LANDLOCK_RESTRICT_SELF_LOG_NEW_EXEC_ON على نطاق Landlock المنشأ حديثًا.

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

LANDLOCK_RESTRICT_SELF_LOG_NEW_EXEC_ON
    يفعل تسجيل الوصولات المرفوضة بعد استدعاء execve(2)، مما يوفر رؤية لمحاولات الوصول غير المصرح بها من قبل البرامج المنفذة حديثًا داخل نطاق Landlock المنشأ. يُوصى بهذا العلم فقط عندما يُتوقع أن تلتزم جميع الملفات القابلة للتنفيذ المحتملة في النطاق بقيود الوصول، حيث أن إدخالات سجل التدقيق المفرطة قد تجعل من الصعب تحديد الأحداث الحرجة.

LANDLOCK_RESTRICT_SELF_LOG_SUBDOMAINS_OFF
    يعطل تسجيل الوصولات المرفوضة الناشئة عن نطاقات Landlock المتداخلة التي أنشأها المستدعي أو نسله. يجب ضبط هذا العلم وفقًا لتكوين وقت التشغيل، وليس بشكل ثابت في الكود، لتجنب كتم أحداث أمنية مهمة. إنه مفيد لبيئات تشغيل الحاويات أو أدوات العزل التي قد تشغل برامج تنشئ بدورها نطاقات Landlock وقد تولد سجلات مفرطة. على عكس LANDLOCK_RESTRICT_SELF_LOG_SAME_EXEC_OFF، يؤثر هذا العلم فقط على النطاقات المتداخلة المستقبلية، وليس النطاق الجاري إنشاؤه. يمكن استخدامه أيضًا مع قيمة ruleset_fd تساوي -1 لكتم سجلات النطاق الفرعي دون إنشاء نطاق.

يدعم العلم التالي فرض السياسة في العمليات متعددة الخيوط:

LANDLOCK_RESTRICT_SELF_TSYNC (منذ إصدار ABI Landlock 8)
    يطبق تكوين Landlock الجديد بشكل ذري على جميع خيوط العملية الحالية، بما في ذلك نطاق Landlock وتكوين التسجيل. يتجاوز هذا تكوين Landlock للخيوط الشقيقة، بغض النظر عن نطاقات Landlock وتكوينات التسجيل المحددة مسبقًا على تلك الخيوط.

    إذا كان الخيط المستدعي يعمل مع no_new_privs، فإن هذه العملية تفعل no_new_privs على الخيوط الشقيقة أيضًا.

قيمة الإرجاع
عند النجاح، تُرجع landlock_restrict_self() 0. عند الخطأ، تُرجع -1 ويُضبط errno للإشارة إلى الخطأ.

الأخطاء
يمكن أن تفشل landlock_restrict_self() للأسباب التالية:

E2BIG
    تم الوصول إلى الحد الأقصى لعدد مجموعات القواعد المركبة للخيط المستدعي. هذا الحد هو 64 حاليًا.

EBADF
    ruleset_fd ليس واصف ملف للخيط الحالي.

EBADFD
    ruleset_fd ليس واصف ملف مجموعة قواعد.

EINVAL
    قيمة غير صالحة في flags.

EOPNOTSUPP
    نواة الحاسوب تدعم Landlock لكنه عُطّل في وقت الإقلاع.

EPERM
    لا يمتلك ruleset_fd صلاحية قراءة لمجموعة القواعد الأساسية، أو أن الخيط المستدعي لا يعمل مع no_new_privs، أو لا يمتلك CAP_SYS_ADMIN في نطاق المستخدم الخاص به.

المعايير
لينكس.

التاريخ
لينكس 5.13.

أمثلة
انظر landlock(7).

انظر أيضًا
landlock_create_ruleset(2), landlock_add_rule(2), landlock(7)

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.