Chức năng môi trường xung quanh

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 giống như thư mục gốc 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. Cách triển khai ban đầu của 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. Do đó, các chức năng của tệp cũng gây ra rủi ro bảo mật vì bất kỳ quy trình nào thực thi tệp 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 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 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ì phân tách 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 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 môi trường xung quanh là cơ chế ưu tiên để thiết lập 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). Bạn nên sử dụng các tính năng môi trường xung quanh thay vì định cấu hình các tính năng hệ thống tệp bằng cách sử dụng phần caps trong tệp config.fs.

Khi thiết lập chức năng cho các dịch vụ không được khởi chạy bằng init, hãy tiếp tục định cấu hình chức năng hệ thống tệp bằng fs_config.c.

Bật các tính năng môi trường xung quanh

Để bật các tính năng môi trường xung quanh cho một dịch vụ nhất định, hãy sử dụng từ khoá capabilities trong phần khởi tạo. Để biết thông tin chi tiết về ngôn ngữ khởi chạy hiện tại, hãy tham khảo init README.md.

Ví dụ: để bật các tính năng môi trườ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 tính 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

Phương thức triển khai tham chiếu là hạt nhân chung 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 các nhánh nhân phổ biến liên quan của Android.

Bản vá tính 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ũ trong:

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ũ trong:

Xác nhận kết quả

Kiểm thử đơn vị Bionic bao gồm kiểm thử đơn vị cho các tính năng môi trường xung quanh. Ngoài ra, việc sử dụng từ khoá "capabilities" (chức năng) trong Android init 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.