ความสามารถของโหมดแอมเบียนท์

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

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

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

Bionic unit tests มีการทดสอบหน่วยสำหรับความสามารถโดยรอบ นอกจากนี้ การใช้คีย์เวิร์ด "capabilities" ใน init ของ Android สำหรับบริการ แล้วตรวจสอบว่าบริการได้รับความสามารถที่คาดไว้จะช่วยให้ทดสอบฟีเจอร์นี้ในรันไทม์ได้