ความสามารถช่วยให้กระบวนการของ 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 ได้รับการย้ายไปยังเวอร์ชันก่อนหน้าในสาขาต่อไปนี้
- android-3.18:
- android-4.1:
การแก้ไขด้านความปลอดภัยเล็กน้อย https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3 ได้รับการย้ายไปยังเวอร์ชันก่อนหน้าในสาขาต่อไปนี้
- android-3.18:
- android-4.1:
การตรวจสอบ
Unit Test ของ Bionic มี Unit Test สำหรับความสามารถแอมเบียนท์ นอกจากนี้ การใช้ คีย์เวิร์ด "capabilities" ใน init ของ Android สำหรับบริการ แล้วตรวจสอบว่า บริการได้รับความสามารถที่คาดไว้จะช่วยให้ทดสอบฟีเจอร์นี้ได้ใน รันไทม์