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