Google متعهد به پیشبرد برابری نژادی برای جوامع سیاه است. ببینید چگونه.
این صفحه به‌وسیله ‏Cloud Translation API‏ ترجمه شده است.
Switch to English

فروش اولیه

مراحل اولیه دارای مجوزهای تقریبا نامحدودی است و از اسکریپت های ورودی از سیستم و پارتیشن های فروشنده استفاده می کند تا سیستم را در طی فرآیند بوت شروع کند. این دسترسی باعث ایجاد سوراخ بزرگی در تقسیم سیستم / فروشنده Treble می شود ، زیرا اسکریپت های فروشنده ممکن است دستور دسترسی به فایلها ، ویژگی ها و غیره را که بخشی از رابط باینری برنامه پایدار سیستم-فروشنده (ABI) نیستند ، دستور دهند.

فروشنده فروشنده برای بستن این سوراخ با استفاده از یک دامنه تقویت شده امنیتی لینوکس (SELinux) vendor_init برای اجرای دستورات موجود در /vendor با مجوزهای خاص فروشنده طراحی شده است.

سازوکار

فروشنده اولیه یک فرایند اولیه را در مراحل اولیه بوت با متن SELinux ایجاد می کند u:r:vendor_init:s0 . این زمینه SELinux دارای مجوزهای قابل توجهی کمتری نسبت به زمینه اولیه پیش فرض است و دسترسی آن به پرونده ها ، ویژگی ها و غیره محدود می شود که یا خاص از فروشنده هستند یا بخشی از ABI سیستم پایدار سیستم فروشنده هستند.

در ابتدا هر اسکریپتی را که بارگیری می شود بررسی می کند تا ببیند مسیر آن با /vendor شروع می شود و اگر چنین است ، این نشانه را نشان می دهد که دستورات آن باید در متن اولیه فروشنده بچرخانند. هر ورودی داخلی با یک boolean حاشیه نویسی می شود که مشخص می کند فرمان باید در فرایند پردازنده فروشنده اجرا شود یا خیر:

  • اکثر دستوراتی که به سیستم فایل دسترسی دارند برای اجرای در خرده پردازش اولیه فروشنده از آن یادداشت می شوند و بنابراین در معرض فروشنده SEPolicy هستند.
  • اکثر دستوراتی که بر وضعیت اولیه داخلی تأثیر می گذارد (به عنوان مثال ، شروع و متوقف کردن خدمات) در فرایند اولیه عادی اجرا می شوند. این دستورات آگاه می شوند که یک اسکریپت فروشنده از آنها خواسته است تا کارهای غیر مجاز SELinux را انجام دهند.

حلقه پردازش اصلی این برگه شامل چک است که اگر یک فرمان برای اجرای در خرده فروش های فروشنده حاشیه نویسی باشد و از اسکریپت فروشنده منشأ گرفته شود ، آن فرمان از طریق ارتباطات بین فرایندی (IPC) به پردازشگر فروشنده فروشنده ارسال می شود ، که این دستور را اجرا می کند. و نتیجه را به ابتدای کار ارسال می کند.

با استفاده از Init فروشنده

فروشنده فروشنده به طور پیش فرض فعال شده است و محدودیت های آن برای کلیه اسکریپت های اولیه موجود در پارتیشن /vendor . فروشنده فروشنده باید شفاف باشد برای فروشندگانی که اسکریپت های آنها قبلاً فقط به پرونده ها ، خصوصیات و غیره به سیستم دسترسی ندارند.

اما ، اگر دستورات موجود در یک اسکریپت فروشنده خاص محدودیت های اولیه فروش را نقض کنند ، دستورات خراب می شوند. دستورات نقص در خط هسته در خط (با dmesg قابل مشاهده است) از ابتدا نشان می دهد که خرابی است. ممیزی SELinux با هر فرمان ناقصی که به دلیل خط مشی SELinux شکست خورده همراه است. نمونه ای از خرابی از جمله ممیزی SELinux:

type=1400 audit(1511821362.996:9): avc: denied { search } for pid=540 comm="init" name="nfc" dev="sda45" ino=1310721 scontext=u:r:vendor_init:s0 tcontext=u:object_r:nfc_data_file:s0 tclass=dir permissive=0
init: Command 'write /data/nfc/bad_file_access 1234' action=boot (/vendor/etc/init/hw/init.walleye.rc:422) took 2ms and failed: Unable to write to file '/data/nfc/bad_file_access': open() failed: Permission denied

اگر یک فرمان انجام نشود ، دو گزینه وجود دارد:

  • اگر این فرمان به دلیل محدودیت در نظر گرفته شده شکست بخورید (مانند اینکه دسترسی به یک فایل یا خاصیت سیستم دسترسی داشته باشد) ، این دستور باید به روش Treble پسندیده شده و تنها با رابطهای پایدار انجام شود. قوانین Neverallow از افزودن مجوزها برای دسترسی به فایلهای سیستم که جزئی از سیستم پایدار فروشنده سیستم ABI نیستند ، جلوگیری می کند.
  • اگر برچسب SELinux جدید باشد و در حال حاضر مجوزهایی در سیستم vendor_init.te یا مجوزهای مربوط به قوانین هرگز محروم نشده باشد ، ممکن است برچسب جدید در vendor_init.te خاص دستگاه vendor_init.te باشد.

برای راه اندازی دستگاه ها قبل از اندروید 9 ، قوانین بی سیم را می توان با اضافه کردن data_between_core_and_vendor_violators data_between_core_and_vendor_violators به ​​پرونده vendor_init.te خاص دستگاه vendor_init.te .

مکان کد

بخش عمده ای از منطق اولیه برای فروشنده IPC در سیستم / core / init / subcontext.cpp است .

جدول دستورات در کلاس BuiltinFunctionMap در system / core / init / buildins.cpp است و حاوی حاشیه نویسی است که نشان می دهد که آیا این دستور باید در زیر پروسه فروشنده فروشنده اجرا شود یا خیر.

SEPolicy برای فروشندگان کالا در فهرست / دایرکتوری های خصوصی ( سیستمی / پوپولی / خصوصی / vendor_init.te ) و عمومی ( سیستم / سپوولی / عمومی / vendor_init.te ) تقسیم شده است.