ความสามารถช่วยให้กระบวนการ Linux ลดสิทธิ์ส่วนใหญ่ที่คล้ายกับสิทธิ์ของรูทได้ในขณะที่ ยังคงสิทธิ์ย่อยที่จำเป็นต่อการทำหน้าที่ของตนไว้ การใช้งานความสามารถในตอนแรกทำให้กระบวนการที่ fork+exec ไม่สามารถรับช่วงความสามารถได้ เว้นแต่ไฟล์ที่กำลังดำเนินการมีการกำหนดค่าความสามารถของไฟล์ ความสามารถของไฟล์จึงมีความเสี่ยงด้านความปลอดภัย เนื่องจากกระบวนการใดก็ตามที่เรียกใช้ไฟล์ที่มีความสามารถของไฟล์จะได้รับ ความสามารถเหล่านั้น
ความสามารถโดยรอบช่วยให้บริการของระบบที่เปิดตัวโดย init สามารถกำหนดค่าความสามารถในไฟล์ .rc
ได้ ซึ่งจะนำการกำหนดค่าไปไว้ในไฟล์เดียวแทนที่จะแยกการกำหนดค่าในไฟล์ fs_config.c
ซึ่งหมายความว่าสำหรับบริการที่เปิดตัวโดย
init คุณสามารถใช้ไฟล์ .rc
ที่เชื่อมโยงกับบริการเพื่อ
กำหนดค่าความสามารถสำหรับบริการนั้นได้
ความสามารถโดยรอบเป็นกลไกที่ต้องการสำหรับการตั้งค่าความสามารถ
สำหรับบริการที่เปิดตัวโดย init (วิธีนี้จะเก็บทุกแง่มุมสำหรับการกำหนดค่าบริการ
ไว้ในไฟล์ .rc
เดียว) เราขอแนะนำให้ใช้ความสามารถของ Ambient แทนการกำหนดค่าความสามารถของระบบไฟล์โดยใช้ส่วน caps ในไฟล์ config.fs
เมื่อตั้งค่าความสามารถสำหรับบริการที่ไม่ได้เปิดตัวโดย init
ให้กำหนดค่าความสามารถของระบบไฟล์ต่อไปโดยใช้
fs_config.c
เปิดใช้ความสามารถของแอมเบียนท์
หากต้องการเปิดใช้ความสามารถรอบข้างสำหรับบริการหนึ่งๆ ให้ใช้คีย์เวิร์ด
capabilities
ใน init ดูรายละเอียดภาษา init ปัจจุบันได้ที่
init README.md
ตัวอย่างเช่น หากต้องการเปิดใช้ความสามารถโดยรอบสำหรับบริการ AOSP
wificond
ไฟล์.rc
สำหรับบริการ wificond
จะตั้งค่าผู้ใช้และกลุ่มที่เหมาะสม
และให้ความสามารถที่ระบุแก่บริการโดยใช้คีย์เวิร์ด capabilities
ดังนี้
service wificond /system/bin/wificond class main user wifi group wifi net_raw net_admin capabilities NET_RAW NET_ADMIN
การใช้งานอ้างอิง
การใช้งานอ้างอิงคือเคอร์เนลทั่วไปของ Android https://android.googlesource.com/kernel/common/
แพตช์ที่จำเป็น
เราได้ย้อนกลับการแก้ไขที่จำเป็นไปยังสาขาเคอร์เนลทั่วไปของ Android ที่เกี่ยวข้องทั้งหมด แล้ว
แพตช์ความสามารถหลักของ Ambient https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58319057b7847667f0c9585b9de0e8932b0fdb08 ได้รับการย้อนกลับใน
- android-3.18:
- android-4.1:
มีการพอร์ตการแก้ไขด้านความปลอดภัยเล็กๆ น้อยๆ https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3 กลับไปใน
- android-3.18:
- android-4.1:
การตรวจสอบความถูกต้อง
Bionic unit tests มีการทดสอบหน่วยสำหรับความสามารถโดยรอบ นอกจากนี้ การใช้คีย์เวิร์ด "capabilities" ใน init ของ Android สำหรับบริการ แล้วตรวจสอบว่าบริการได้รับความสามารถที่คาดไว้จะช่วยให้ทดสอบฟีเจอร์นี้ในรันไทม์ได้