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

ความสามารถช่วยให้กระบวนการ Linux ยกเลิกสิทธิ์ส่วนใหญ่ที่คล้ายกับสิทธิ์ของรูทได้ พร้อมกับเก็บสิทธิ์ชุดย่อยที่จำเป็นต่อการทำงานไว้ การใช้งานความสามารถเดิมทำให้กระบวนการที่แยกกระบวนการย่อยและดำเนินการนั้นรับความสามารถมาไม่ได้ เว้นแต่ไฟล์ที่ดำเนินการจะได้รับการกําหนดค่าความสามารถของไฟล์ ความสามารถของไฟล์ก็ก่อให้เกิดความเสี่ยงด้านความปลอดภัยเช่นกัน เนื่องจากกระบวนการใดก็ตามที่เรียกใช้ไฟล์ที่มีความสามารถของไฟล์จะรับความสามารถเหล่านั้นได้

ความสามารถแบบแอมเบียนท์ช่วยให้บริการของระบบที่เปิดโดย init กำหนดค่าความสามารถในไฟล์ .rc ได้ ซึ่งจะรวมการกำหนดค่าไว้ในไฟล์เดียวแทนการแยกการกำหนดค่าในไฟล์ fs_config.c ซึ่งหมายความว่าสําหรับบริการที่เปิดโดย init คุณสามารถใช้ไฟล์ .rc ที่เชื่อมโยงกับบริการดังกล่าวเพื่อกําหนดค่าความสามารถของบริการนั้นได้

ความสามารถแบบแอมเบียนท์เป็นกลไกที่แนะนำสำหรับการตั้งค่าความสามารถสำหรับบริการที่เปิดโดย init (วิธีนี้จะเก็บแง่มุมทั้งหมดสำหรับการกำหนดค่าบริการไว้ในไฟล์ .rc ไฟล์เดียว) เราขอแนะนำให้ใช้ความสามารถแบบแอมเบียนท์แทนการกำหนดค่าความสามารถของระบบไฟล์โดยใช้ส่วน CAPS ในไฟล์ 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 ไปยังรุ่นเก่าแล้วในรุ่นต่อไปนี้

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

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

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