سیستم عامل اندروید شامل ابزارهای استاندارد شبکه لینوکس مانند ifconfig
، ip
و ip6tables
است. این ابزارهای کمکی روی تصویر سیستم قرار دارند و پیکربندی کل پشته شبکه لینوکس را فعال می کنند. در دستگاههای دارای Android 7.x و پایینتر، کد فروشنده مجاز است مستقیماً این فایلهای باینری را فراخوانی کند که مشکلات زیر را به همراه دارد:
- از آنجا که ابزارهای شبکه در تصویر سیستم به روز می شوند، پیاده سازی پایداری را ارائه نمی دهند.
- دامنه ابزارهای شبکه به قدری گسترده است که تکامل تصویر سیستم در عین تضمین رفتار قابل پیش بینی دشوار است.
در دستگاههای دارای Android 8.0 و بالاتر، پارتیشن فروشنده ثابت میماند در حالی که پارتیشن سیستم بهروزرسانی دریافت میکند. برای دستیابی به این هدف، Android 8.0 توانایی تعریف یک رابط پایدار و نسخهدار را فراهم میکند و در عین حال از محدودیتهای SELinux استفاده میکند تا وابستگی متقابل فروشنده و تصویر سیستم را در یک مجموعه خوب شناختهشده حفظ کند.
فروشندگان می توانند از ابزارهای پیکربندی شبکه ارائه شده توسط پلتفرم برای پیکربندی پشته شبکه لینوکس استفاده کنند، اما این ابزارها هنوز دارای یک بسته بندی رابط HIDL نیستند. برای تعریف چنین رابطی، اندروید 8.0 شامل ابزار netutils-wrapper-1.0
است.
لفاف نتوتیلز
ابزار wrapper netutils
زیرمجموعه ای از پیکربندی پشته شبکه لینوکس را ارائه می دهد که تحت تأثیر به روز رسانی پارتیشن های سیستم قرار نمی گیرد. Android 8.0 حاوی نسخه 1.0 wrapper ها است که به شما امکان می دهد همان آرگومان های برنامه کاربردی را که در پارتیشن سیستم در /system/bin
نصب شده است، به صورت زیر ارسال کنید:
u:object_r:system_file:s0 /system/bin/ip-wrapper-1.0 -> netutils-wrapper-1.0 u:object_r:system_file:s0 /system/bin/ip6tables-wrapper-1.0 -> netutils-wrapper-1.0 u:object_r:system_file:s0 /system/bin/iptables-wrapper-1.0 -> netutils-wrapper-1.0 u:object_r:system_file:s0 /system/bin/ndc-wrapper-1.0 -> netutils-wrapper-1.0 u:object_r:netutils_wrapper_exec:s0 /system/bin/netutils-wrapper-1.0 u:object_r:system_file:s0 /system/bin/tc-wrapper-1.0 -> netutils-wrapper-1.0
Symlink ها ابزارهای شبکه را نشان می دهد که توسط لفاف netutils
پیچیده شده اند، که عبارتند از:
-
ip
-
iptables
-
ip6tables
-
ndc
-
tc
برای استفاده از این ابزارهای کمکی در اندروید 8.0 و بالاتر، پیاده سازی های فروشنده باید قوانین زیر را رعایت کنند:
- فرآیندهای فروشنده نباید
/system/bin/netutils-wrapper-1.0
را مستقیماً اجرا کنند. تلاش برای انجام این کار منجر به خطا می شود. - همه ابزارهای پیچیده شده توسط
netutils-wrapper-1.0
باید با استفاده از پیوندهای نمادین آنها راه اندازی شوند. به عنوان مثال، کد فروشنده ای را که قبلاً این کار را انجام داده است (/system/bin/ip <FOO> <BAR>
) به/system/bin/ip-wrapper-1.0 <FOO> <BAR>
تغییر دهید. - اجرای wrapper ها بدون انتقال دامنه در خط مشی پلتفرم SELinux ممنوع است. این قانون نباید تغییر کند و در مجموعه تست سازگاری Android (CTS) آزمایش شده است.
- اجرای مستقیم ابزارها (به عنوان مثال،
/system/bin/ip <FOO> <BAR>
) از فرآیندهای فروشنده نیز در خط مشی های پلتفرم SELinux ممنوع است. این قانون نباید تغییر کند و در CTS آزمایش شده است. - هر دامنه فروشنده (فرآیندی) که نیاز به راهاندازی wrapper دارد، باید قانون انتقال دامنه زیر را در خطمشی SELinux اضافه کند:
domain_auto_trans( VENDOR-DOMAIN-NAME , netutils_wrapper_exec, netutils_wrapper)
.
فیلترهای لفاف دار Netutils
ابزارهای پیچیده را می توان برای پیکربندی تقریباً هر جنبه ای از پشته شبکه لینوکس استفاده کرد. با این حال، برای اطمینان از امکان حفظ یک رابط پایدار و اجازه به روز رسانی به پارتیشن سیستم، تنها ترکیب خاصی از آرگومان های خط فرمان مجاز است. سایر دستورات رد می شوند.
رابط ها و زنجیره های فروشنده
Wrapper مفهومی از رابط های فروشنده دارد. اینها رابطهایی هستند که معمولاً توسط کد فروشنده مدیریت میشوند، مانند رابطهای داده سلولی. به طور معمول، انواع دیگر رابط ها (مانند Wi-Fi) توسط HAL ها و فریم ورک مدیریت می شوند. Wrapper رابط های فروشنده را با نام (با استفاده از یک عبارت منظم) تشخیص می دهد و به کد فروشنده اجازه می دهد تا عملیات زیادی را روی آنها انجام دهد. در حال حاضر، رابط های فروشنده عبارتند از:
- رابط هایی که نام آنها به "oem" و سپس یک عدد ختم می شود، مانند
oem0
یاr_oem1234
. - رابط های مورد استفاده توسط SOC و پیاده سازی های OEM فعلی، مانند
rmnet_data[0-9]
.
نامهای رابطهایی که معمولاً توسط چارچوب مدیریت میشوند (مانند wlan0
) هرگز واسط فروشنده نیستند.
لفاف دارای مفهوم مشابهی از زنجیره های فروشنده است. اینها در دستورات iptables
استفاده می شوند و با نام نیز شناخته می شوند. در حال حاضر، زنجیره های فروشنده:
- با
oem_
شروع کنید. - توسط پیاده سازی های فعلی SOC و OEM استفاده می شود، به عنوان مثال، زنجیره هایی که با
nm_
یاqcom_
شروع می شوند.
دستورات مجاز
دستورات مجاز در حال حاضر در زیر فهرست شده اند. محدودیت ها از طریق مجموعه ای از عبارات منظم در خطوط فرمان اجرا شده اجرا می شوند. برای جزئیات، به system/netd/netutils_wrappers/NetUtilsWrapper-1.0.cpp
مراجعه کنید.
آی پی
دستور ip
برای پیکربندی آدرس های IP، مسیریابی، رمزگذاری IPsec و تعدادی دیگر از پارامترهای شبکه استفاده می شود. wrapper دستورات زیر را می دهد:
- آدرس های IP را از رابط های مدیریت شده توسط فروشنده اضافه و حذف کنید.
- رمزگذاری IPsec را پیکربندی کنید.
iptables و ip6tables
دستورات iptables
و ip6tables
برای پیکربندی فایروال، مخفی کردن بستهها، NAT و سایر پردازشهای هر بسته استفاده میشوند. wrapper دستورات زیر را اجازه می دهد:
- زنجیره های فروشنده را اضافه و حذف کنید.
- در هر زنجیره ای که به بسته هایی که به (
-i
) یا خارج از (-o
) یک واسط فروشنده می روند، قوانین را اضافه و حذف کنید. - از هر نقطه در هر زنجیره دیگری به زنجیره فروشنده بروید.
ndc
ndc
برای برقراری ارتباط با شبح netd
استفاده می شود که اکثر تنظیمات شبکه را در اندروید انجام می دهد. wrapper دستورات زیر را اجازه می دهد:
- ایجاد و نابود کردن شبکه های OEM (
oemXX
). - رابط های مدیریت شده توسط فروشنده را به شبکه های OEM اضافه کنید.
- مسیرها را به شبکه های OEM اضافه کنید.
- فعال یا غیرفعال کردن ارسال IP در سطح جهانی و در واسط های فروشنده.
tc
دستور tc
برای پیکربندی صف بندی ترافیک و شکل دهی در رابط های فروشنده استفاده می شود.