ความสามารถช่วยให้กระบวนการ Linux ละทิ้งสิทธิพิเศษที่เหมือนกับรูทส่วนใหญ่ ในขณะที่ยังคงรักษาสิทธิ์ชุดย่อยที่จำเป็นสำหรับการทำงานของพวกเขา การใช้งานความสามารถดั้งเดิมทำให้กระบวนการ fork+exec ไม่สามารถสืบทอดความสามารถได้ เว้นแต่ว่าไฟล์ที่กำลังดำเนินการจะมีการกำหนดค่าความสามารถของไฟล์ไว้ ความสามารถของไฟล์ในทางกลับกันก็ทำให้เกิดความเสี่ยงด้านความปลอดภัย เนื่องจากกระบวนการใดๆ ที่รันไฟล์ที่มีความสามารถด้านไฟล์จะสามารถได้รับความสามารถเหล่านั้น
ความสามารถโดยรอบช่วยให้บริการระบบที่เปิดใช้งานโดย init สามารถกำหนดค่าความสามารถในไฟล์ .rc
ได้ โดยนำการกำหนดค่าไปไว้ในไฟล์เดียว แทนที่จะแยกการกำหนดค่าในไฟล์ fs_config.c
ซึ่งหมายความว่าสำหรับบริการใดๆ ที่เปิดตัวโดย init คุณสามารถใช้ไฟล์ .rc
ที่เกี่ยวข้องกับบริการเพื่อกำหนดค่าความสามารถสำหรับบริการนั้นได้
ความสามารถโดยรอบเป็นกลไกที่ต้องการสำหรับการตั้งค่าความสามารถสำหรับบริการที่เรียกใช้โดย init (วิธีนี้จะเก็บทุกแง่มุมสำหรับการกำหนดค่าบริการไว้ในไฟล์ .rc
ไฟล์เดียว) เราขอแนะนำให้ใช้ความสามารถโดยรอบแทน การกำหนดค่าความสามารถของระบบไฟล์โดยใช้ส่วนตัวพิมพ์ใหญ่ ในไฟล์ config.fs
เมื่อตั้งค่าความสามารถสำหรับเซอร์วิส ที่ไม่ได้เปิดใช้งานโดย init ให้กำหนดค่าความสามารถของระบบไฟล์ต่อไปโดยใช้ fs_config.c
เปิดใช้งานความสามารถโดยรอบ
หากต้องการเปิดใช้งานความสามารถโดยรอบสำหรับบริการที่กำหนด ให้ใช้คำสำคัญ capabilities
ใน 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 ได้รับการ backported ใน:
- หุ่นยนต์-3.18:
- หุ่นยนต์-4.1:
การตรวจสอบ
การทดสอบหน่วยไบโอนิค รวมถึงการทดสอบหน่วยสำหรับความสามารถโดยรอบ นอกเหนือจากนั้น การใช้คีย์เวิร์ด "ความสามารถ" ใน Android init สำหรับบริการ จากนั้นตรวจสอบว่าบริการได้รับความสามารถที่คาดหวัง จะช่วยให้สามารถทดสอบรันไทม์ของคุณสมบัตินี้ได้