ความสามารถรอบด้าน

ความสามารถช่วยให้กระบวนการของ 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 ใน:

การแก้ไขความปลอดภัยเล็กน้อย https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3 ได้รับการสนับสนุนใน:

การตรวจสอบความถูกต้อง

การทดสอบหน่วยไบโอนิค รวมถึงการทดสอบหน่วยสำหรับความสามารถรอบข้าง นอกเหนือจากนั้น การใช้คำหลัก "ความสามารถ" ใน Android init สำหรับบริการ จากนั้นตรวจสอบว่าบริการได้รับความสามารถที่คาดหวังไว้หรือไม่ จะทำให้สามารถทดสอบรันไทม์ของคุณลักษณะนี้ได้