Cho phép Quyền Đặc quyền

Ứng dụng đặc quyền là ứng dụng hệ thống nằm trong thư mục priv-app trên một trong các phân vùng hình ảnh hệ thống. Các phân vùng được sử dụng cho các bản phát hành Android là

  • Android 8.1 trở xuống - /system
  • Android 9 trở lên - /system, /product, /vendor

Trong toàn bộ trang này, /etc/permissions/priv-app giải quyết thành partition /etc/permissions/priv-app .

Trước đây, các nhà sản xuất thiết bị có rất ít quyền kiểm soát đối với chữ ký | quyền đặc quyền nào có thể được cấp cho các ứng dụng đặc quyền. Bắt đầu từ Android 8.0, các nhà sản xuất phải cấp các quyền đặc quyền một cách rõ ràng trong các tệp XML cấu hình hệ thống trong thư mục /etc/permissions . Kể từ Android 9, người triển khai phải cấp hoặc từ chối rõ ràng tất cả các quyền đặc quyền, nếu không thiết bị sẽ không khởi động được.

Tệp privapp-permissions.xml chỉ có thể cấp hoặc từ chối quyền cho các ứng dụng đặc quyền trên cùng một phân vùng. Ví dụ: nếu một ứng dụng trên phân vùng /product yêu cầu các quyền đặc quyền, yêu cầu chỉ có thể được cấp hoặc từ chối bởi một privapp-permissions.xml cũng có trên /product .

Thêm danh sách cho phép

Danh sách cho phép quyền cho các ứng dụng có thể được liệt kê trong một XML duy nhất hoặc trong nhiều tệp XML nằm trong thư mục frameworks/base/etc/permissions như sau:

  • /etc/permissions/privapp-permissions- OEM_NAME .xml
  • /etc/permissions/privapp-permissions- DEVICE_NAME .xml

Không có quy tắc chặt chẽ cho việc tổ chức nội dung. Người triển khai thiết bị có thể xác định cấu trúc nội dung miễn là tất cả các ứng dụng từ /system/priv-app đều được liệt kê trong danh sách cho phép. Ví dụ: Google có một danh sách cho phép duy nhất cho tất cả các ứng dụng đặc quyền do Google phát triển và đề xuất tổ chức sau:

  • Quyền đối với các ứng dụng đã có trong cây Dự án nguồn mở Android (AOSP) được liệt kê trong /etc/permissions/privapp-permissions-platform.xml .
  • Quyền đối với các ứng dụng của Google được liệt kê trong /etc/permissions/privapp-permissions-google.xml .
  • Đối với các ứng dụng khác, hãy sử dụng tệp có dạng: /etc/permissions/privapp-permissions- DEVICE_NAME .xml .

Tùy chỉnh danh sách cho phép

AOSP bao gồm triển khai danh sách cho phép có thể được tùy chỉnh khi cần thiết. Quyền đối với các ứng dụng có trong AOSP đã được cho phép trong /etc/permissions/privapp-permissions-platform.xml .

Nếu có quyền bị từ chối, hãy chỉnh sửa XML để sử dụng thẻ "từ chối cấp phép" thay vì thẻ "quyền". Thí dụ:

<!-- 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>
    ...

Tìm các quyền bị thiếu

Để tìm các quyền bị thiếu khi mang một thiết bị mới, hãy bật chế độ nhật ký chuyển tiếp:

ro.control_privapp_permissions=log

Các vi phạm được báo cáo trong tệp nhật ký, nhưng các quyền không đặc quyền vẫn được cấp. Điều này giữ cho thiết bị ở trạng thái hoạt động đồng thời cung cấp danh sách các lỗi vi phạm. Đây là định dạng thông báo lỗi:

PackageManager: Privileged permission {PERMISSION_NAME} for package {PACKAGE_NAME} - not in privapp-permissions allowlist

Tất cả các vi phạm phải được giải quyết bằng cách thêm các quyền còn thiếu vào danh sách cho phép thích hợp.

  • Trên Android 8.0 trở xuống, các ứng dụng bị ảnh hưởng không được cấp các quyền còn thiếu ngay cả khi chúng nằm trong đường dẫn priv-app .
  • Trên Android 9 trở lên, vi phạm (các quyền đặc quyền) có nghĩa là thiết bị không khởi động được . Bạn phải rõ ràng cho phép hoặc từ chối tất cả các quyền đặc quyền

Thực thi danh sách cho phép

Sau khi danh sách cho phép có sẵn, hãy bật thực thi thời gian chạy bằng cách đặt thuộc tính bản dựng ro.control_privapp_permissions=enforce .