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

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

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

การตรวจสอบ

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