Danh sách cho phép quyền đặc quyền

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

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

Trong lịch sử, các nhà sản xuất thiết bị có rất ít quyền kiểm soát chữ ký nào | quyền đặc quyền có thể được cấp cho các ứng dụng đặc quyền. Bắt đầu từ Android 8.0, nhà sản xuất có thể cấp 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 có thể cấp hoặc từ chối tất cả các quyền đặc quyền một cách rõ ràng. Nếu quyền đặc quyền không được cấp, thiết bị sẽ không khởi động.

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 quyền đặc quyền thì yêu cầu đó chỉ có thể được cấp hoặc từ chối bởi tệp privapp-permissions.xml trên /product .

Thêm danh sách cho phép

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

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

Không có quy tắc nghiêm ngặt nào áp dụng cho cách 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ả ứng dụng từ /system/priv-app đều nằm trong danh sách cho phép. Ví dụ: Google đã phát triển một danh sách cho phép duy nhất cho tất cả các ứng dụng đặc quyền. Chúng tôi đề nghị 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 .
  • Đối với các ứng dụng khác, hãy sử dụng các 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 việc triển khai danh sách cho phép có thể được tùy chỉnh nếu cần.

Nếu một quyền phải bị từ chối, hãy chỉnh sửa XML để sử dụng thẻ deny-permission thay vì thẻ permission . Ví 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 còn thiếu

Để tìm các quyền bị thiếu khi khởi động 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ý. Quyền không có đặc quyền được cấp. Làm như vậy đảm bảo thiết bị vẫn ở trạng thái hoạt động đồng thời vẫn cung cấp danh sách vi phạm. Định dạng thông báo lỗi như sau:

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

Mọi hành vi 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. Lưu ý rằng trong:

  • Android 9 trở lên, việc vi phạm quyền đặc quyền sẽ ngăn thiết bị khởi động. Thay vào đó, bạn phải cho phép hoặc từ chối tất cả các quyền đặc quyền một cách rõ ràng.
  • Android 8.0 trở xuống, các quyền bị thiếu sẽ không được cấp cho các ứng dụng bị ảnh hưởng mặc dù nằm trong đường dẫn priv-app .

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

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

Việc đưa vào danh sách cho phép chỉ bắt buộc đối với các quyền được khai báo bởi ứng dụng có package="android" . Trạng thái thuộc tính ro.control_privapp_permissions phải tuân thủ Mục 9.1 Các quyền trong Tài liệu Định nghĩa Tương thích (CDD).