แอพที่มีสิทธิพิเศษคือแอพระบบที่อยู่ในไดเร็กทอรี priv-app
บนพาร์ติชั่นอิมเมจระบบตัวใดตัวหนึ่ง พาร์ติชั่นที่ใช้สำหรับรุ่น Android คือ
- Android 8.1 และต่ำกว่า -
/system
- Android 9 ขึ้นไป -
/system, /product, /vendor
ตลอดทั้งหน้านี้ /etc/permissions/priv-app
แก้ไข partition /etc/permissions/priv-app
ในอดีต ผู้ผลิตอุปกรณ์ควบคุมได้เพียงเล็กน้อยว่าจะให้สิทธิ์ ลายเซ็น|สิทธิ์พิเศษ ใดแก่แอปที่มีสิทธิพิเศษ เริ่มต้นใน Android 8.0 ผู้ผลิตต้องให้สิทธิ์ที่มีสิทธิพิเศษอย่างชัดเจนในไฟล์ XML การกำหนดค่าระบบในไดเร็กทอรี /etc/permissions
สำหรับ Android 9 ผู้ปรับใช้ต้องให้สิทธิ์หรือปฏิเสธสิทธิ์ที่มีสิทธิพิเศษทั้งหมดอย่างชัดแจ้ง มิฉะนั้นอุปกรณ์จะไม่สามารถบู๊ตได้
ไฟล์ privapp-permissions.xml
สามารถให้หรือปฏิเสธการอนุญาตสำหรับแอพที่มีสิทธิพิเศษในพาร์ติชั่นเดียวกันเท่านั้น ตัวอย่างเช่น หากแอปบนพาร์ติชั่น /product
ร้องขอสิทธิ์ที่มีสิทธิพิเศษ คำขอสามารถได้รับหรือปฏิเสธโดยไฟล์ privapp-permissions.xml
ที่อยู่ใน /product
เท่านั้น
การเพิ่มรายการที่อนุญาต
รายการที่อนุญาตสำหรับแอปสามารถแสดงเป็น XML เดียวหรือในไฟล์ XML หลายไฟล์ที่อยู่ในไดเร็กทอรี frameworks/base/etc/permissions
ดังนี้
-
/etc/permissions/privapp-permissions- OEM_NAME .xml
-
/etc/permissions/privapp-permissions- DEVICE_NAME .xml
ไม่มีกฎเกณฑ์ที่เข้มงวดในการจัดระเบียบเนื้อหา ผู้ปรับใช้อุปกรณ์สามารถกำหนดโครงสร้างเนื้อหาได้ตราบใดที่แอปทั้งหมดจาก /system/priv-app
ได้รับอนุญาต ตัวอย่างเช่น Google มีรายการที่อนุญาตเพียงรายการเดียวสำหรับแอปที่มีสิทธิพิเศษทั้งหมดที่พัฒนาโดย Google และแนะนำองค์กรต่อไปนี้
- สิทธิ์สำหรับแอพที่รวมอยู่ในแผนผัง Android Open Source Project (AOSP) อยู่ในรายการ
/etc/permissions/privapp-permissions-platform.xml
- สิทธิ์สำหรับแอป Google แสดงอยู่ใน
/etc/permissions/privapp-permissions-google.xml
- สำหรับแอปอื่นๆ ให้ใช้ไฟล์ในรูปแบบ:
/etc/permissions/privapp-permissions- DEVICE_NAME .xml
การปรับแต่งรายการที่อนุญาต
AOSP มีการใช้งานรายการที่อนุญาตซึ่งสามารถปรับแต่งได้ตามต้องการ อนุญาตสำหรับแอพที่รวมอยู่ใน AOSP ได้รับอนุญาตแล้วใน /etc/permissions/privapp-permissions-platform.xml
หากมีการอนุญาตที่ควรถูกปฏิเสธ ให้แก้ไข XML เพื่อใช้แท็ก "deny-permission" แทนแท็ก "permission" ตัวอย่าง:
<!-- This XML file declares which signature|privileged permissions to grant to privileged apps that come with the platform --> <permissions> <privapp-permissions package="com.android.backupconfirm"> <permission name="android.permission.BACKUP"/> <permission name="android.permission.CRYPT_KEEPER"/> </privapp-permissions> <privapp-permissions package="com.android.cellbroadcastreceiver"> <!-- Don't allow the application to interact across users --> <deny-permission name="android.permission.INTERACT_ACROSS_USERS"/> <permission name="android.permission.MANAGE_USERS"/> <permission name="android.permission.MODIFY_PHONE_STATE"/> <permission name="android.permission.READ_PRIVILEGED_PHONE_STATE"/> <permission name="android.permission.RECEIVE_EMERGENCY_BROADCAST"/> </privapp-permissions> ...
ค้นหาสิทธิ์ที่ขาดหายไป
หากต้องการค้นหาการอนุญาตที่ขาดหายไปเมื่อเปิดอุปกรณ์ใหม่ ให้เปิดใช้งานโหมดบันทึกเฉพาะกาล:
ro.control_privapp_permissions=log
มีการรายงานการละเมิดในล็อกไฟล์ แต่ยังคงให้สิทธิ์ที่ไม่มีสิทธิพิเศษ สิ่งนี้ทำให้อุปกรณ์อยู่ในสถานะใช้งานได้ในขณะที่แสดงรายการการละเมิด นี่คือรูปแบบข้อความแสดงข้อผิดพลาด:
PackageManager: Privileged permission {PERMISSION_NAME} for package {PACKAGE_NAME} - not in privapp-permissions allowlist
การละเมิดทั้งหมดต้องได้รับการแก้ไขด้วยการเพิ่มสิทธิ์ที่ขาดหายไปลงในรายการที่อนุญาตที่เหมาะสม
- บน Android 8.0 และต่ำกว่า แอพที่ได้รับผลกระทบจะไม่ได้รับสิทธิ์ที่ขาดหายไป แม้ว่าจะอยู่ในเส้นทาง
priv-app
ก็ตาม - ใน Android 9 ขึ้นไป การละเมิด (ของ สิทธิ์ ที่มีสิทธิพิเศษ) หมายความว่า อุปกรณ์ไม่สามารถบู๊ต ได้ คุณต้องอนุญาตหรือปฏิเสธการอนุญาตที่ มีสิทธิพิเศษทั้งหมด อย่างชัดเจน
การบังคับใช้รายการที่อนุญาต
หลังจากที่รายการที่อนุญาตพร้อมใช้งานแล้ว ให้เปิดใช้งานการบังคับใช้รันไทม์โดยการตั้งค่าคุณสมบัติ ro.control_privapp_permissions=enforce