Các chức năng cho phép các quy trình Linux loại bỏ hầu hết các đặc quyền tương tự như đặc quyền của người dùng root trong khi vẫn giữ lại một số đặc quyền mà chúng cần để thực hiện chức năng của mình. Việc triển khai ban đầu các chức năng khiến các quy trình fork+exec không thể kế thừa các chức năng trừ phi các tệp đang được thực thi đã được định cấu hình chức năng tệp. Đến lượt, các chức năng của tệp lại gây ra rủi ro bảo mật vì mọi quy trình thực thi một tệp có các chức năng của tệp đều có thể có được các chức năng đó.
Các chức năng xung quanh cho phép các dịch vụ hệ thống do init khởi chạy định cấu hình các chức năng trong tệp .rc
, đưa cấu hình vào một tệp duy nhất thay vì chia cấu hình trong tệp fs_config.c
. Điều này có nghĩa là đối với mọi dịch vụ do init khởi chạy, bạn có thể sử dụng tệp .rc
được liên kết với dịch vụ đó để định cấu hình các chức năng cho dịch vụ đó.
Các chức năng xung quanh là cơ chế ưu tiên để thiết lập các chức năng cho các dịch vụ do init khởi chạy (phương thức này giữ tất cả các khía cạnh cho cấu hình dịch vụ trong một tệp .rc
duy nhất). Bạn nên sử dụng các chức năng xung quanh thay vì định cấu hình các chức năng của hệ thống tệp bằng cách sử dụng phần caps trong các tệp config.fs
.
Khi thiết lập các chức năng cho những dịch vụ không được khởi chạy bằng init, hãy tiếp tục định cấu hình các chức năng của hệ thống tệp bằng fs_config.c
.
Bật các chức năng ở chế độ môi trường xung quanh
Để bật các chức năng xung quanh cho một dịch vụ nhất định, hãy sử dụng từ khoá capabilities
trong init. Để biết thông tin chi tiết về ngôn ngữ khởi động hiện tại, hãy tham khảo init README.md.
Ví dụ: để bật các chức năng xung quanh cho dịch vụ AOSP wificond
, tệp.rc cho dịch vụ wificond
sẽ thiết lập người dùng và nhóm thích hợp, đồng thời cung cấp cho dịch vụ các chức năng được chỉ định bằng cách sử dụng từ khoá capabilities
:
service wificond /system/bin/wificond class main user wifi group wifi net_raw net_admin capabilities NET_RAW NET_ADMIN
Triển khai tham chiếu
Triển khai tham chiếu là hạt nhân chung của Android https://android.googlesource.com/kernel/common/
Các bản vá bắt buộc
Các bản vá bắt buộc đã được chuyển ngược về tất cả các nhánh kernel chung Android có liên quan.
Bản vá khả năng môi trường chính https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58319057b7847667f0c9585b9de0e8932b0fdb08 đã được chuyển ngược trong:
- android-3.18:
- android-4.1:
Một bản vá bảo mật nhỏ https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3 đã được chuyển ngược trong:
- android-3.18:
- android-4.1:
Xác nhận kết quả
Kiểm thử đơn vị Bionic bao gồm kiểm thử đơn vị cho các chức năng xung quanh. Ngoài ra, việc sử dụng từ khoá "capabilities" trong quá trình khởi động Android cho một dịch vụ, sau đó kiểm tra để đảm bảo dịch vụ đó có được các chức năng dự kiến sẽ cho phép kiểm thử thời gian chạy của tính năng này.