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.
Trang này được dịch bởi Cloud Translation API.
Switch to English

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 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, nhà sản xuất phải cấp rõ ràng các quyền đặc quyền trong 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 /vendor 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 privapp-permissions.xml cũng trên /vendor .

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ẽ để 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 đượ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 ứ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ạo danh sách cho phép

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

  1. Xây dựng hình ảnh hệ thống:
        . build/envsetup.sh
        lunch PRODUCT_NAME
        make -j
  2. Chạy tập lệnh privapp_permissions.py để tạo privapp-permissions.xml liệt kê tất cả chữ ký | quyền đặc quyền cần thiết để được allowlist:
    development/tools/privapp_permissions/privapp_permissions.py
    Công cụ này in nội dung XML có thể được sử dụng như một tệp duy nhất hoặc chia thành nhiều tệp trong đường dẫn thư mục /etc/permissions . Nếu thiết bị đã bao gồm danh sách /etc/permissions thư mục /etc/permissions , thì công cụ chỉ in các điểm khác biệt mà thôi (chẳng hạn như thiếu chữ ký | quyền đặc quyền mà bạn cần thêm vào danh sách cho phép). Đ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 đã tạo vào thư mục /etc/permissions thích hợp, nơi hệ thống đọc các tệp trong khi 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. Quyền đối với các ứng dụng có trong AOSP đã được cho phép trong /etc/permissions/privapp-permissions-platform.xml .

Theo mặc định, tập lệnh privapp_permissions.py tạo đầu ra tự động cấp bất kỳ quyền nào được yêu cầu bởi một ứng dụng đặc quyền. Nếu có các quyền bị từ chối, hãy chỉnh sửa XML để sử dụng thẻ "từ chối quyền" thay vì thẻ "quyền". Thí dụ:

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

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

Để tìm các hoán vị bị thiếu khi mang 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 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 xây dựng ro.control_privapp_permissions=enforce .