Google is committed to advancing racial equity for Black communities. See how.
หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

การอนุญาตสิทธิ์พิเศษ

แอพที่มีสิทธิ์เป็นแอพระบบที่อยู่ในไดเร็กทอรี 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 สามารถให้หรือปฏิเสธสิทธิ์สำหรับแอปที่มีสิทธิพิเศษบนพาร์ติชันเดียวกันเท่านั้น ตัวอย่างเช่นหากแอปบนพาร์ติชัน /vendor ร้องขอสิทธิ์ที่มีสิทธิพิเศษคำขอจะได้รับอนุญาตหรือปฏิเสธโดยไฟล์ privapp-permissions.xml ที่อยู่ใน /vendor

การเพิ่มรายการที่อนุญาตพิเศษ

รายการอนุญาตพิเศษสำหรับแอปสามารถแสดงรายการใน 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 ที่ development/tools/privapp_permissions/privapp_permissions.py ในการสร้างเวอร์ชันเริ่มต้นของ privapp-permissions.xml เฉพาะอุปกรณ์:

  1. สร้างอิมเมจระบบ:
        . build/envsetup.sh
        lunch PRODUCT_NAME
        make -j
  2. รันสคริปต์ privapp_permissions.py เพื่อสร้างไฟล์ privapp-permissions.xml ที่แสดงรายการลายเซ็นทั้งหมด | สิทธิ์ที่มีสิทธิพิเศษที่จำเป็นเพื่อให้อยู่ในรายการที่อนุญาตพิเศษ:
    development/tools/privapp_permissions/privapp_permissions.py
    เครื่องมือนี้จะพิมพ์เนื้อหา XML ที่สามารถใช้เป็นไฟล์เดียวหรือแยกออกเป็นหลายไฟล์ใน เส้นทางไดเร็กทอรี /etc/permissions หากอุปกรณ์มีรายการที่อนุญาตพิเศษในไดเร็กทอรี /etc/permissions แล้วเครื่องมือจะพิมพ์เฉพาะความแตกต่างเท่านั้น (เช่นลายเซ็นที่หายไป | สิทธิ์พิเศษที่คุณต้องเพิ่มลงในรายการที่อนุญาต) นอกจากนี้ยังมีประโยชน์สำหรับวัตถุประสงค์ในการตรวจสอบ: เมื่อมีการเพิ่มแอปเวอร์ชันใหม่เครื่องมือจะตรวจพบสิทธิ์เพิ่มเติมที่จำเป็น
  3. คัดลอกไฟล์ที่สร้างไปยังไดเร็กทอรี /etc/permissions ที่เหมาะสมโดยระบบจะอ่านไฟล์ระหว่างการบู๊ต

การกำหนดรายการที่อนุญาตพิเศษ

AOSP มีการใช้งานรายการที่อนุญาตพิเศษซึ่งสามารถปรับแต่งได้ตามต้องการ สิทธิ์สำหรับแอพที่รวมอยู่ใน AOSP อยู่ในรายการที่อนุญาตพิเศษแล้วใน /etc/permissions/privapp-permissions-platform.xml

โดยค่าเริ่มต้นสคริปต์ privapp_permissions.py จะสร้างเอาต์พุตที่ให้สิทธิ์ที่ร้องขอโดยแอปพลิเคชันที่มีสิทธิพิเศษโดยอัตโนมัติ หากมีการอนุญาตที่ควรถูกปฏิเสธให้แก้ไข XML เพื่อใช้แท็ก "ปฏิเสธสิทธิ์" แทนแท็ก "อนุญาต" ตัวอย่าง:

<!--
    This XML file declares which signature|privileged permissions should be
    granted 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 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 whitelist

การละเมิดทั้งหมดต้องได้รับการแก้ไขโดยการเพิ่มสิทธิ์ที่ขาดหายไปในรายการที่อนุญาตพิเศษที่เหมาะสม

  • ใน Android 8.0 และต่ำกว่าแอปที่ได้รับผลกระทบจะไม่ได้รับสิทธิ์ที่ขาดหายไปแม้ว่าจะอยู่ในเส้นทางส่วนตัวของ priv-app ก็ตาม
  • ใน Android 9 ขึ้นไปการละเมิด (ของ สิทธิ์พิเศษ ) หมายความว่า อุปกรณ์ไม่บูต คุณต้องอนุญาตหรือปฏิเสธการอนุญาตที่มี สิทธิพิเศษทั้งหมด อย่างชัดเจน

บังคับใช้รายการที่อนุญาตพิเศษ

หลังจากอยู่ในรายการที่อนุญาตแล้วให้เปิดใช้งานการบังคับใช้รันไทม์โดยการตั้งค่าคุณสมบัติการสร้าง ro.control_privapp_permissions=enforce