Gỡ lỗi các trường hợp vi phạm quyền

Lỗi vi phạm quyền truy cập xảy ra khi một dịch vụ cố gắng thực hiện một hành động mà dịch vụ đó không được phép thực hiện. Ở chế độ thực thi permissionsOnly tiêu chuẩn, khung Xe được xác định bằng phần mềm (SDV) sẽ kiểm tra xem đối tượng hoặc máy ảo (VM) của đối tượng đó có quyền cần thiết được khai báo trong chính sách của đối tượng hay không.

Bạn phải đánh giá thông báo vi phạm trong bối cảnh bảo mật của chúng. Không phải lỗi vi phạm nào cũng cho biết lỗi hoặc nỗ lực truy cập trái phép.

Tất cả quyết định về quyền truy cập đều được ghi lại. Để xem các quyết định đó, hãy tìm thông báo kiểm tra trong đầu ra logcat:

adb -s $SERIAL logcat | grep 'audit message'

Uỷ quyền thành công

Các lượt kiểm tra thành công được ghi lại ở cấp debug.

Điều này cho biết đối tượng có quyền cần thiết được khai báo:

D SdvServiceManagerServer: instance2:com.sdv.google.sample.bar.ServiceBundleBar/instance declares permission to access com.sdv.google.sample.foo.ServiceBundleFoo#foo-rpc, audit message: ...

Lỗi vi phạm và thiếu quyền

Lỗi vi phạm xảy ra khi thiếu quyền.

Điều này xảy ra khi đối tượng thiếu quyền cần thiết, chẳng hạn như client, server, publisher hoặc subscriber, trong chính sách uỷ quyền của đối tượng hoặc VM của đối tượng thiếu quyền đó trong chính sách ở cấp VM.

Lỗi này được ghi lại ở cấp error:

E SdvServiceManagerServer: Authz violation. instance2:com.sdv.google.sample.bar.ServiceBundleBar/instance does not declare permission to access com.sdv.google.sample.foo.ServiceBundleFoo#foo-rpc, audit message: Subject lacks 'client' permission...

Cách khắc phục

audit message (thông báo kiểm tra) của nhật ký thường chứa một đề xuất hữu ích về những nội dung cần thêm để giải quyết lỗi vi phạm.

Ví dụ: bạn có thể thấy lỗi về quyền như sau:

Subject 'vm:com.client.Bundle/default' lacks 'client' permission for service 'com.server.TargetType' with channel 'my-unit'. Add 'client { service: "com.server.TargetType" channel: "my-unit" }' to the subject's Authz policy

Khắc phục lỗi này bằng cách thêm quy tắc vào textproto chính sách uỷ quyền của đối tượng:

client {
    service: "com.server.TargetType"
    channel: "my-unit"
}

Nếu thông báo lỗi cho biết thiếu quyền trong VM của đối tượng, bạn phải thêm quyền đó vào chính sách ở cấp VM, chẳng hạn như <vm_name>.textproto hoặc .default.textproto trong APEX com.oem.sdv.authz:

allow_server {
    service: "com.server.TargetType"
    channel: "my-unit"
}

Di chuyển từ ACL

Để đảm bảo khả năng tương thích ngược và di chuyển, khung này hỗ trợ các chế độ ACLs only, LenientStrict (chỉ ACL, Nới lỏng và Nghiêm ngặt) có tính đến các danh sách kiểm soát quyền truy cập (ACL) trước đó.

Chế độ chỉ ACL

Ở chế độ ACLs only, quyền truy cập chỉ được cho phép nếu ACL cho phép. Quyền sẽ bị bỏ qua. Nếu ACL từ chối quyền truy cập, thì lỗi sẽ được ghi lại:

E SdvServiceManagerServer: Authz violation. com.sdv.google.sample.foo.ServiceBundleFoo#foo-rpc denies access to instance2:com.sdv.google.sample.bar.ServiceBundleBar/instance, audit message: ...

Chế độ nới lỏng

Ở chế độ Lenient, quyền truy cập được cho phép nếu ACL hoặc quyền cho phép. Nếu quyền truy cập được cấp bằng ACL nhưng thiếu quyền, thì lỗi này sẽ được ghi lại dưới dạng lỗi vi phạm nhẹ ở cấp debug để giúp bạn xác định các quyền bị thiếu trong khi vẫn duy trì chức năng của hệ thống:

D SdvServiceManagerServer: Permissions Authz violation (access granted by ACLs): instance2:com.sdv.google.sample.bar.ServiceBundleBar/instance does not declare permission to access com.sdv.google.sample.foo.ServiceBundleFoo#foo-rpc, audit message: ...

Nếu cả ACL và quyền đều không thành công, thì lỗi sẽ được ghi lại cho cả hai:

E SdvServiceManagerServer: Authz violation. com.sdv.google.sample.foo.ServiceBundleFoo#foo-rpc denies access to instance2:com.sdv.google.sample.bar.ServiceBundleBar/instance, audit message: ...
E SdvServiceManagerServer: Authz violation. instance2:com.sdv.google.sample.bar.ServiceBundleBar/instance does not declare permission to access com.sdv.google.sample.foo.ServiceBundleFoo#foo-rpc, audit message: ...

Chế độ nghiêm ngặt

Ở chế độ Strict, cả ACL và quyền đều phải cho phép truy cập. Nếu ACL hoặc quyền không thành công, thì quyền truy cập sẽ bị từ chối và lỗi sẽ được ghi lại.