Ứ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
phân vùng hình ảnh hệ thống. Các phân vùng 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
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ý | đặc quyền nào có thể được cấp cho
ứng dụng đặc quyền. Kể từ Android 8.0, nhà sản xuất có thể cấp quyền 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, trình triển khai có thể
cấp hoặc từ chối một cách rõ ràng mọi quyền đặc quyền. Nếu không được cấp quyền đặc quyền,
thiết bị không khởi động được.
Tệp privapp-permissions.xml
chỉ có thể cho phép hoặc từ chối
các quyền dành 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,
chỉ privapp-permissions.xml
mới có thể chấp nhận hoặc từ chối yêu cầu
tệp trên /product
.
Thêm danh sách cho phép
Bạn có thể liệt kê danh sách các quyền cho ứng dụng trong một tệp XML duy nhất hoặc trong nhiều
Các 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 sắp xếp nội dung. Trình 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
có tên 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ó đặc quyền.
Bạn nên dùng tổ chức sau:
- Quyền cho các ứng dụng đã bao gồm trong
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 dùng các tệp có trong biểu mẫu,
/etc/permissions/privapp-permissions-DEVICE_NAME.xml
.
Tuỳ 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 tuỳ chỉnh khi cần.
Nếu một quyền phải bị từ chối, hãy chỉnh sửa XML để 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 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 đổi:
ro.control_privapp_permissions=log
Các lỗi vi phạm được báo cáo trong tệp nhật ký. Các quyền không có đặc quyền đã được cấp. Việc này giúp đảm bảo thiết bị vẫn ở trạng thái hoạt động trong khi vẫn cung cấp danh sách vi phạm. Thông báo lỗi có định dạng như sau:
PackageManager: Privileged permission {PERMISSION_NAME} for package {PACKAGE_NAME} - not in privapp-permissions allowlist
Bạn phải giải quyết tất cả các lỗi vi phạm 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 ý trong:
- Trên Android 9 trở lên, việc vi phạm quyền đặc quyền khiến thiết bị không thể bắt đầu. 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 còn 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 bản dựng
thuộc tính ro.control_privapp_permissions=enforce
.
Chỉ những quyền do ứng dụng có khai báo liên quan mới bắt buộc phải được đưa vào danh sách cho phép
package="android"
. ro.control_privapp_permissions
Trạng thái thuộc tính phải tuân thủ
Mục 9.1 Quyền
trong Tài liệu định nghĩa về khả năng tương thích (CDD).