Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

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

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

  • Android 8.1 và thấp hơn - /system
  • Android 9 và cao hơn - /system, /product, /vendor

Trong suốt trang này, /etc/permissions/priv-app giải quyết để partition /etc/permissions/priv-app .

Về mặt lịch sử, các nhà sản xuất thiết bị có ít quyền kiểm soát mà chữ ký | quyền ưu tiên 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 một cách rõ ràng quyền ưu tiên trong các tập tin XML cấu hình hệ thống trong /etc/permissions thư mục. 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.

Các privapp-permissions.xml tập tin chỉ có thể cấp hoặc từ chối cấp phép 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 /product phân vùng yêu cầu quyền đặc quyền, yêu cầu có thể chỉ được cấp hoặc bị từ chối bởi một privapp-permissions.xml tập tin đó cũng trên /product .

Thêm danh sách cho phép

Allowlists phép cho các ứng dụng có thể được liệt kê trong một XML đơn hoặc trong nhiều file XML nằm trong frameworks/base/etc/permissions thư mục 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 thực hiện 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 được allowlisted. 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:

  • Cấp phép cho các ứng dụng đã được bao gồm trong (AOSP) cây dự án mã nguồn mở Android được liệt kê trong /etc/permissions/privapp-permissions-platform.xml .
  • Cấp phép cho ứ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, tác phẩm sử dụng dưới hình thức: /etc/permissions/privapp-permissions- DEVICE_NAME .xml .

Tạo danh sách cho phép

Để tự động tạo ra một allowlist cho tất cả các ứng dụng có sẵn trên hệ thống hình ảnh, sử dụng công cụ dòng lệnh AOSP tại development/tools/privapp_permissions/privapp_permissions.py . Để tạo ra một phiên bản ban đầu của thiết bị cụ thể privapp-permissions.xml :

  1. Xây dựng một hệ thống hình ảnh:
        . build/envsetup.sh
        lunch PRODUCT_NAME
        make -j
  2. Chạy privapp_permissions.py kịch bản để tạo ra một privapp-permissions.xml tập tin đó liệt kê tất cả chữ ký | quyền ưu tiên yêu cầu phải được allowlisted:
    development/tools/privapp_permissions/privapp_permissions.py
    này in công cụ nội dung XML có thể được sử dụng như một tập tin duy nhất, hoặc chia thành nhiều file trong /etc/permissions đường dẫn thư mục. Nếu thiết bị đã bao gồm allowlists trong /etc/permissions thư mục, công cụ này chỉ in những khác biệt (ví dụ như chữ ký mất tích | quyền ưu tiên bạn cần phải thêm vào allowlist). Điều này cũng hữu ích cho mục đích kiểm tra: Khi một phiên bản mới của ứng dụng được thêm vào, công cụ sẽ phát hiện các quyền bổ sung cần thiết.
  3. Sao chép các tập tin được tạo ra để thích hợp /etc/permissions thư mục, nơi mà hệ thống sẽ đọc file trong quá trình khởi động.

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. Cấp phép cho các ứng dụng bao gồm trong AOSP đã allowlisted trong /etc/permissions/privapp-permissions-platform.xml .

Theo mặc định, privapp_permissions.py kịch bản tạo ra tự động cấp bất kỳ giấy phép theo yêu cầu của một ứng dụng đặc quyền. 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 còn 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 và thấp hơn, các ứng dụng bị ảnh hưởng bị từ chối cấp phép thiếu ngay cả khi họ đang có trong priv-app con đường.
  • Trên Android 9 và cao hơn, vi phạm (các điều khoản ưu tiên) có nghĩa là các thiết bị không thực hiện khởi động. Bạn phải dứt khoát cho phép hoặc từ chối tất cả các quyền ưu tiên

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

Sau allowlists được đưa ra, cho phép thực thi thời gian chạy bằng cách thiết lập thuộc tính build ro.control_privapp_permissions=enforce .