سياسات SELinux لاختبارات الأجهزة

عندما ينفّذ الأمر atest اختبارات الجهاز، ينقل atest ملف الاختبار الثنائي وموارده إلى قسم /data وينفّذه باستخدام adb shell. يستخدم ملف الاختبار القابل للتنفيذ نطاق SELinux shell، لذا يجب تلقّي سياسات SELinux المرتبطة بنطاق shell. عندما يعمل الجهاز في وضع SELinux المفروض، تفشل اختبارات الجهاز التي تنتهك هذه السياسات وتظهر رسالة خطأ في SELinux.

تجدر الإشارة إلى أنّ نطاق shell لا يتضمّن قواعد allow من أجل:

  • الوصول إلى الملفات في قسم /vendor، بما في ذلك الربط بالمكتبات المثبَّتة في قسم /vendor

  • استدعاء واجهة Binder عشوائية

إذا كان اختبار الجهاز يحتاج إلى أحد هذين الإذنين أو كليهما، يجب تشغيل الاختبار بأذونات root. عندما يكون لدى adbd أذونات `root`، يستخدم adbd نطاق SELinux su على الجهاز بدلاً من shell، الذي يتمتّع بـ امتيازات أكثر.

لتشغيل اختبار الجهاز باستخدام أذونات `root`، أضِف السمة require_root: true إلى تعريف وحدة Soong المعنيّة في ملف Android.bp.

// file: Android.bp

rust_test {
    name: "example_rust_test_that requires root",

    // ...

    rustlibs: [
        "some-vendor-lib",
    ],
    // This example test requires root permissions, because it calls Binder
    // interfaces unavailable for the shell, and also links with a vendor
    // library.
    require_root: true,
}