ความสามารถช่วยให้กระบวนการของ Linux ทิ้งสิทธิ์ที่เหมือนรูทส่วนใหญ่ในขณะที่ยังคงรักษาสิทธิ์บางส่วนที่พวกเขาต้องการเพื่อทำหน้าที่ของตน การใช้งานความสามารถดั้งเดิมทำให้กระบวนการ fork+exec'd ไม่สามารถสืบทอดความสามารถได้ เว้นแต่ว่าไฟล์ที่กำลังดำเนินการมีการกำหนดค่าความสามารถของไฟล์ ในทางกลับกัน ความสามารถของไฟล์ทำให้เกิดความเสี่ยงด้านความปลอดภัย เนื่องจากกระบวนการใดๆ ที่เรียกใช้ไฟล์ด้วยความสามารถของไฟล์จะสามารถรับความสามารถเหล่านั้นได้
ความสามารถรอบข้างช่วยให้บริการระบบที่เปิดตัวโดย init สามารถกำหนดค่าความสามารถในไฟล์ .rc
ของตน โดยนำการกำหนดค่าเป็นไฟล์เดียวแทนที่จะแยกการกำหนดค่าในไฟล์ fs_config.c
ซึ่งหมายความว่าสำหรับบริการใดๆ ที่เปิดตัวโดย init คุณสามารถใช้ไฟล์ .rc
ที่เชื่อมโยงกับบริการเพื่อกำหนดค่าความสามารถสำหรับบริการนั้น
ความสามารถรอบข้างเป็นกลไกที่ต้องการสำหรับการตั้งค่าความสามารถสำหรับบริการที่เปิดตัวโดย init (วิธีนี้จะเก็บทุกแง่มุมสำหรับการกำหนดค่าบริการไว้ในไฟล์ .rc
ไฟล์เดียว) เราขอแนะนำให้ใช้ความสามารถรอบข้างแทนการ กำหนดค่าความสามารถของระบบไฟล์โดยใช้ส่วน 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 ที่เกี่ยวข้องทั้งหมดแล้ว
แพทช์ความสามารถรอบข้างหลัก https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58319057b7847667f0c9585b9de0e8932b0fdb08 ได้รับ backported ใน:
- หุ่นยนต์-3.18:
- แอนดรอยด์-4.1:
การแก้ไขความปลอดภัยเล็กน้อย https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3 ได้รับการสนับสนุนใน:
- หุ่นยนต์-3.18:
- แอนดรอยด์-4.1:
การตรวจสอบความถูกต้อง
การทดสอบหน่วยไบโอนิค รวมถึงการทดสอบหน่วยสำหรับความสามารถรอบข้าง นอกเหนือจากนั้น การใช้คำหลัก "ความสามารถ" ใน Android init สำหรับบริการ จากนั้นตรวจสอบว่าบริการได้รับความสามารถที่คาดหวังไว้หรือไม่ จะทำให้สามารถทดสอบรันไทม์ของคุณลักษณะนี้ได้