หลังจากที่คุณผสานรวมฟังก์ชัน SELinux ระดับพื้นฐานและ วิเคราะห์ผลลัพธ์อย่างละเอียดแล้ว คุณสามารถเพิ่มการตั้งค่านโยบายของคุณเองเพื่อให้ครอบคลุม การกำหนดค่าลงในระบบปฏิบัติการ Android นโยบายเหล่านี้ยังต้อง เป็นไปตามโปรแกรมความเข้ากันได้กับ Android และต้องไม่นำการตั้งค่า SELinux เริ่มต้นออก
ผู้ผลิตไม่ควรนํานโยบาย SELinux ที่มีอยู่ออก มิฉะนั้น มีความเสี่ยงที่จะไม่สามารถใช้งาน SELinux ของ Android และแอปพลิเคชัน กํากับดูแล ซึ่งรวมถึงแอปพลิเคชันของบุคคลที่สามซึ่งอาจจำเป็น เพื่อให้สอดคล้องกับข้อกำหนดและใช้งานได้ แอปพลิเคชันต้องไม่มี แก้ไขเพื่อให้ทำงานต่อไปในอุปกรณ์ที่เปิดใช้ SELinux
เมื่อดำเนินการปรับแต่ง SELinux อย่าลืม
- เขียนนโยบาย SELinux สำหรับ Daemon ใหม่ทั้งหมด
- ใช้โดเมนที่กำหนดไว้ล่วงหน้าตามความเหมาะสม
- กำหนดโดเมนให้กับกระบวนการที่เกิดขึ้นเป็นบริการของ
init
- ทำความคุ้นเคยกับมาโครก่อนที่จะเขียนนโยบาย
- ส่งการเปลี่ยนแปลงนโยบายหลักไปยัง AOSP
และอย่าทำสิ่งต่อไปนี้
- สร้างนโยบายที่ใช้ร่วมกันไม่ได้
- อนุญาตการปรับแต่งนโยบายผู้ใช้ปลายทาง
- อนุญาตการปรับแต่งนโยบาย MDM
- ทำให้ผู้ใช้หวาดกลัวด้วยการละเมิดนโยบาย
- เพิ่มประตูหลัง
โปรดดูส่วนฟีเจอร์ความปลอดภัยของเคอร์เนลของ แอนดรอยด์ เอกสารคำจำกัดความความเข้ากันได้สำหรับข้อกำหนดที่เฉพาะเจาะจง
SELinux ใช้วิธีการอนุญาตพิเศษ ซึ่งหมายความว่าการเข้าถึงทั้งหมดต้องระบุอย่างชัดเจน ที่ได้รับอนุญาตในนโยบายเพื่อให้ได้รับอนุญาต เนื่องจาก SELinux เริ่มต้นของ Android นโยบายรองรับโปรเจ็กต์โอเพนซอร์ส Android อยู่แล้ว คุณไม่จำเป็นต้อง แก้ไขการตั้งค่า SELinux ด้วยวิธีใดก็ได้ หากคุณปรับแต่งการตั้งค่า SELinux ใช้ความระมัดระวังอย่างยิ่งที่จะไม่ทำให้แอปพลิเคชันที่มีอยู่เสียหาย วิธีเริ่มต้นใช้งาน
- ใช้เมนู Android รุ่นล่าสุด kernel
- ใช้ หลักการ ของสิทธิ์ขั้นต่ำที่สุด
- จัดการเฉพาะส่วนที่เพิ่มมาใน Android ของคุณเอง นโยบายเริ่มต้นจะทำงานร่วมกับ โอเพนซอร์สของ Android ฐานของโค้ดโปรเจ็กต์โดยอัตโนมัติ
- แยกส่วนต่างๆ ของส่วนประกอบซอฟต์แวร์ออกเป็นโมดูลที่ทำหน้าที่เอกพจน์ งาน
- สร้างนโยบาย SELinux ที่แยกงานเหล่านั้นออกจากสิ่งที่ไม่เกี่ยวข้อง
- ใส่นโยบายเหล่านั้นในไฟล์
*.te
(ส่วนขยายสำหรับ SELinux ไฟล์แหล่งที่มาของนโยบาย) ภายใน วันที่/device/manufacturer/device-name/sepolicy
และใช้ตัวแปรBOARD_SEPOLICY
เพื่อรวมตัวแปร งานสร้างของคุณ - กำหนดให้โดเมนใหม่อนุญาตในขั้นต้น ซึ่งทำได้โดยใช้ฟังก์ชัน
ในไฟล์
.te
ของโดเมน - วิเคราะห์ผลลัพธ์และปรับแต่งการกำหนดโดเมน
- นำการประกาศที่อนุญาตออกเมื่อไม่มีการปฏิเสธอื่นปรากฏใน userdebug งานสร้าง
หลังจากผสานรวมการเปลี่ยนแปลงนโยบาย SELinux แล้ว ให้เพิ่มขั้นตอนลงใน เวิร์กโฟลว์การพัฒนา เพื่อให้สามารถใช้งาน SELinux ได้ต่อไป อยู่ในอุดมคติ กระบวนการพัฒนาซอฟต์แวร์ นโยบาย SELinux มีการเปลี่ยนแปลงเฉพาะเมื่อซอฟต์แวร์ การเปลี่ยนแปลงโมเดล ไม่ใช่การนำไปใช้จริง
เมื่อเริ่มปรับแต่ง SELinux ให้ตรวจสอบส่วนเพิ่มเติมใน Android ก่อน ถ้า เมื่อคุณเพิ่มคอมโพเนนต์ที่สร้างฟังก์ชันใหม่ โปรดตรวจสอบว่าคอมโพเนนต์ดังกล่าว เป็นไปตามนโยบายความปลอดภัยของ Android เช่นเดียวกับนโยบายที่เกี่ยวข้องซึ่งจัดทำโดย OEM ก่อนเปิดโหมดการบังคับใช้
เพื่อป้องกันปัญหาที่ไม่จำเป็น เข้ากันเกินไป ยกเว้นมีความเข้มงวดมากเกินไป ใช้ร่วมกันไม่ได้ ซึ่งทำให้เสียหาย ฟังก์ชันของอุปกรณ์ ในทางกลับกัน หากการเปลี่ยนแปลงของคุณจะเป็นประโยชน์กับคนอื่นๆ คุณควร ส่งการแก้ไขนโยบาย SELinux เริ่มต้นเป็น patch หากแพตช์คือ ที่ใช้กับนโยบายความปลอดภัยเริ่มต้น คุณไม่จำเป็นต้องทำการเปลี่ยนแปลงนี้กับ Android รุ่นใหม่แต่ละรุ่น
ตัวอย่างคำแถลงนโยบาย
SELinux นั้นอิงตาม M4 ภาษาของคอมพิวเตอร์ ดังนั้นจึงสนับสนุนมาโครที่หลากหลายเพื่อประหยัดเวลา
ในตัวอย่างต่อไปนี้ โดเมนทั้งหมดได้รับสิทธิ์ในการอ่านจาก หรือ
เขียนถึง /dev/null
และอ่านจาก /dev/zero
# Allow read / write access to /dev/null allow domain null_device:chr_file { getattr open read ioctl lock append write}; # Allow read-only access to /dev/zero allow domain zero_device:chr_file { getattr open read ioctl lock };
คำสั่งเดียวกันนี้สามารถเขียนโดยใช้ SELinux *_file_perms
มาโคร (ย่อ):
# Allow read / write access to /dev/null allow domain null_device:chr_file rw_file_perms; # Allow read-only access to /dev/zero allow domain zero_device:chr_file r_file_perms;
นโยบายตัวอย่าง
ตัวอย่างนโยบายที่สมบูรณ์สำหรับ DHCP มีดังนี้
type dhcp, domain; permissive dhcp; type dhcp_exec, exec_type, file_type; type dhcp_data_file, file_type, data_file_type; init_daemon_domain(dhcp) net_domain(dhcp) allow dhcp self:capability { setgid setuid net_admin net_raw net_bind_service }; allow dhcp self:packet_socket create_socket_perms; allow dhcp self:netlink_route_socket { create_socket_perms nlmsg_write }; allow dhcp shell_exec:file rx_file_perms; allow dhcp system_file:file rx_file_perms; # For /proc/sys/net/ipv4/conf/*/promote_secondaries allow dhcp proc_net:file write; allow dhcp system_prop:property_service set ; unix_socket_connect(dhcp, property, init) type_transition dhcp system_data_file:{ dir file } dhcp_data_file; allow dhcp dhcp_data_file:dir create_dir_perms; allow dhcp dhcp_data_file:file create_file_perms; allow dhcp netd:fd use; allow dhcp netd:fifo_file rw_file_perms; allow dhcp netd:{ dgram_socket_class_set unix_stream_socket } { read write }; allow dhcp netd:{ netlink_kobject_uevent_socket netlink_route_socket netlink_nflog_socket } { read write };
ลองมาดูตัวอย่างกัน
ในบรรทัดแรก การประกาศประเภท Daemon ของ DHCP จะรับค่าจาก
นโยบายความปลอดภัยพื้นฐาน (domain
) จากแถลงการณ์ก่อนหน้า
เช่น DHCP จะอ่านและเขียนจาก /dev/null
ได้
ในบรรทัดที่ 2 DHCP จะถูกระบุเป็นโดเมนที่อนุญาต
ในบรรทัด init_daemon_domain(dhcp)
นโยบายจะระบุว่า DHCP คือ
สร้างจาก init
และได้รับอนุญาตให้สื่อสาร
ในบรรทัด net_domain(dhcp)
นโยบายจะอนุญาตให้ DHCP ใช้
ฟังก์ชันการทำงานทั่วไปของเครือข่ายจากโดเมน net
เช่น การอ่าน
และการเขียนแพ็กเก็ต TCP, การสื่อสารผ่านซ็อกเก็ต และดำเนินการ DNS
คำขอ
ในบรรทัด allow dhcp proc_net:file write;
นโยบายจะระบุว่า
ส่วน DHCP จะเขียนไปยังไฟล์ที่เฉพาะเจาะจงใน /proc
ได้ บรรทัดนี้แสดงให้เห็น
การติดป้ายกำกับไฟล์แบบละเอียดของ SELinux โดยใช้ป้ายกำกับ proc_net
เพื่อจำกัดสิทธิ์การเขียนเฉพาะไฟล์ที่อยู่ภายใต้ /proc/sys/net
บล็อคสุดท้ายของตัวอย่างซึ่งเริ่มต้นด้วย
allow dhcp netd:fd use;
แสดงวิธีที่อาจอนุญาตให้แอปพลิเคชัน
โต้ตอบกับกันและกัน นโยบายระบุว่า DHCP และอินเทอร์เน็ตอาจสื่อสารกับ
กันผ่านข้อบ่งชี้ไฟล์, ไฟล์ FIFO, ซ็อกเก็ต Datagram และสตรีม UNIX
Socket DHCP จะอ่านและเขียนได้จากซ็อกเก็ต Datagram และ UNIX เท่านั้น
ซ็อกเก็ตสตรีม โดยไม่สร้างหรือเปิด
การควบคุมที่ใช้ได้
ชั้น | สิทธิ์ |
---|---|
ไฟล์ |
ioctl read write create getattr setattr lock relabelfrom relabelto append unlink link rename execute swapon quotaon mounton |
ไดเรกทอรี |
add_name remove_name reparent search rmdir open audit_access execmod |
ซ็อกเก็ต |
ioctl read write create getattr setattr lock relabelfrom relabelto append bind connect listen accept getopt setopt shutdown recvfrom sendto recv_msg send_msg name_bind |
ระบบไฟล์ |
mount remount unmount getattr relabelfrom relabelto transition associate quotamod quotaget |
กระบวนการ |
fork transition sigchld sigkill sigstop signull signal ptrace getsched setsched getsession getpgid setpgid getcap setcap share getattr setexec setfscreate noatsecure siginh setrlimit rlimitinh dyntransition setcurrent execmem execstack execheap setkeycreate setsockcreate |
ความปลอดภัย |
compute_av compute_create compute_member check_context load_policy compute_relabel compute_user setenforce setbool setsecparam setcheckreqprot read_policy |
ความสามารถ |
chown dac_override dac_read_search fowner fsetid kill setgid setuid setpcap linux_immutable net_bind_service net_broadcast net_admin net_raw ipc_lock ipc_owner sys_module sys_rawio sys_chroot sys_ptrace sys_pacct sys_admin sys_boot sys_nice sys_resource sys_time sys_tty_config mknod lease audit_write audit_control setfcap |
เพิ่มเติม |
และอื่นๆ |
กฎ ไม่อนุญาต
กฎ neverallow
ของ SELinux ห้ามพฤติกรรมที่ไม่ควรเกิดขึ้น
ด้วยการทดสอบความเข้ากันได้
มีการบังคับใช้กฎ neverallow
ของ SELinux ในอุปกรณ์ต่างๆ แล้ว
หลักเกณฑ์ต่อไปนี้มีไว้เพื่อช่วยให้ผู้ผลิตหลีกเลี่ยงข้อผิดพลาด
เกี่ยวข้องกับกฎ neverallow
ข้อในระหว่างการปรับแต่ง หมายเลขกฎ
ที่ใช้ที่นี่สอดคล้องกับ Android 5.1 และอาจมีการเปลี่ยนแปลงตามรุ่น
กฎ 48: neverallow { domain -debuggerd -vold -dumpstate
-system_server } self:capability sys_ptrace;
ดูหน้าผู้ชายสำหรับ ptrace
sys_ptrace
จะให้ความสามารถ ptrace
ในกระบวนการต่างๆ ซึ่งช่วยให้
ของการควบคุมเหนือกระบวนการอื่นๆ และควรเป็นของระบบที่กำหนดเท่านั้น
คอมโพเนนต์ตามที่ระบุไว้ในกฎ ความต้องการความสามารถนี้มักจะบ่งชี้ว่า
การมีสิ่งที่ไม่ได้มีไว้สำหรับบิลด์ที่แสดงต่อผู้ใช้หรือ
ฟังก์ชันที่ไม่จำเป็น นำคอมโพเนนต์ที่ไม่จำเป็นออก
กฎ 76: neverallow { domain -appdomain -dumpstate
-shell -system_server -zygote } { file_type -system_file -exec_type }:file execute;
กฎนี้มีไว้เพื่อป้องกันการดำเนินการของโค้ดที่กำหนดเองในระบบ
กล่าวโดยเจาะจงคือ Google จะยืนยันว่าจะมีการดำเนินการเฉพาะโค้ดใน /system
เท่านั้น
ซึ่งทำให้มีการรับประกันความปลอดภัยด้วยกลไกต่างๆ เช่น การเปิดเครื่องที่ได้รับการยืนยัน
มักจะเป็นวิธีแก้ปัญหาที่ดีที่สุดเมื่อพบปัญหาเกี่ยวกับเรื่องนี้
กฎ neverallow
ข้อคือการย้ายโค้ดที่ไม่เหมาะสมไปยัง
พาร์ติชัน /system
การปรับแต่ง SEPolicy ใน Android 8.0 ขึ้นไป
ส่วนนี้จะแสดงหลักเกณฑ์สำหรับนโยบาย SELinux ของผู้ให้บริการใน Android 8.0 และ รวมถึงรายละเอียดเกี่ยวกับ SEPolicy สำหรับโครงการโอเพนซอร์ส Android (AOSP) และ ส่วนขยาย SEPolicy ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีเก็บนโยบาย SELinux ใช้งานร่วมกันได้ในพาร์ติชันและเวอร์ชัน Android โปรดดู ความเข้ากันได้
ตำแหน่งของนโยบาย
ใน Android 7.0 และรุ่นก่อนหน้า ผู้ผลิตอุปกรณ์จะเพิ่มนโยบายลงใน
BOARD_SEPOLICY_DIRS
รวมถึงนโยบายที่มีไว้เพื่อเสริมนโยบาย AOSP
จากอุปกรณ์ประเภทต่างๆ ใน Android 8.0 ขึ้นไป การเพิ่มนโยบายไปยัง
BOARD_SEPOLICY_DIRS
จะวางนโยบายไว้ในผู้ให้บริการเท่านั้น
รูปภาพ
ใน Android 8.0 ขึ้นไป นโยบายจะพร้อมให้ใช้งานในตำแหน่งต่อไปนี้ใน AOSP
- system/sepolicy/public รวมนโยบายที่ส่งออกเพื่อใช้งาน
ในนโยบายเฉพาะผู้ให้บริการ ทุกอย่างที่อยู่ใน Android 8.0
โครงสร้างพื้นฐานที่เข้ากันได้
นโยบายสาธารณะมีไว้เพื่อคงอยู่ในรุ่นต่างๆ เพื่อให้คุณรวมได้
อะไรก็ได้
/public
ในนโยบายที่กำหนดเอง ด้วยเหตุนี้ ประเภทของนโยบายที่ใส่ใน/public
ได้มีดังนี้ แบบจำกัด ลองดู API นโยบายที่ส่งออกของแพลตฟอร์ม: ดีลที่มีอินเทอร์เฟซระหว่าง/system
กับ/vendor
อยู่ที่นี่ - system/sepolicy/private รวมนโยบายที่จำเป็นสำหรับ การทำงานของอิมเมจระบบ แต่นโยบายอิมเมจของผู้ให้บริการรายใดควร ไม่รู้เลย
- ระบบ/sepolicy/ผู้ให้บริการ มีนโยบายสำหรับคอมโพเนนต์ที่
ไปที่
/vendor
แต่อยู่ในแผนผังแพลตฟอร์มหลัก (ไม่ใช่ ไดเรกทอรีเฉพาะอุปกรณ์) นี่เป็นอาร์ติแฟกต์จากองค์ประกอบ ความแตกต่างระหว่างอุปกรณ์กับคอมโพเนนต์ส่วนกลาง ในคอนเซ็ปต์นี่เป็น ของนโยบายเฉพาะอุปกรณ์ซึ่งอธิบายไว้ด้านล่าง - device/manufacturer/device-name/sepolicy รวมนโยบายเฉพาะอุปกรณ์ และยังรวมถึงการปรับแต่งอุปกรณ์ ใน Android 8.0 ขึ้นไปสอดคล้องกับนโยบายสำหรับคอมโพเนนต์ บนรูปภาพผู้ให้บริการ
ใน Android 11 ขึ้นไป พาร์ติชัน system_ext และพาร์ติชันผลิตภัณฑ์อาจรวม นโยบายเฉพาะพาร์ติชัน system_ext และนโยบายผลิตภัณฑ์ก็แบ่งออกเป็น สาธารณะและส่วนตัว และผู้ให้บริการสามารถใช้ system_ext และรายการสาธารณะของผลิตภัณฑ์ได้ เช่น นโยบายของระบบ
SYSTEM_EXT_PUBLIC_SEPOLICY_DIRS
รวมนโยบายที่ส่งออกสำหรับ ที่ใช้ในนโยบายเฉพาะผู้ให้บริการ ติดตั้งไปยังพาร์ติชัน system_ext แล้วSYSTEM_EXT_PRIVATE_SEPOLICY_DIRS
รวมนโยบายที่จำเป็น สำหรับการทำงานของรูปภาพ system_ext แต่ใช้อิมเมจของผู้ให้บริการ เข้าใจนโยบายไม่ได้ ติดตั้งไปยังพาร์ติชัน system_ext แล้วPRODUCT_PUBLIC_SEPOLICY_DIRS
รวมนโยบายที่ส่งออกสำหรับ ที่ใช้ในนโยบายเฉพาะผู้ให้บริการ ติดตั้งไปยังพาร์ติชันผลิตภัณฑ์แล้วPRODUCT_PRIVATE_SEPOLICY_DIRS
รวมนโยบายที่จำเป็นสำหรับ ฟังก์ชันการทำงานของรูปภาพผลิตภัณฑ์ แต่มีนโยบายรูปภาพของผู้ให้บริการรายใด ก็ไม่ควรรู้เลย ติดตั้งไปยังพาร์ติชันผลิตภัณฑ์แล้ว
สถานการณ์ของนโยบายที่รองรับ
ในอุปกรณ์ที่เปิดตัว Android 8.0 ขึ้นไป รูปภาพผู้ให้บริการต้องใช้งานได้ รูปภาพระบบ OEM และอิมเมจระบบ AOSP อ้างอิงที่ได้จาก Google (และส่ง CTS สำหรับรูปภาพอ้างอิงนี้) ข้อกำหนดเหล่านี้ช่วยให้มั่นใจได้ว่า การแยกระหว่างเฟรมเวิร์กและโค้ดของผู้ให้บริการ อุปกรณ์ดังกล่าวรองรับ สถานการณ์ต่อไปนี้
ส่วนขยายรูปภาพของผู้ให้บริการเท่านั้น
ตัวอย่าง: การเพิ่มบริการใหม่ไปยัง vndservicemanager
จากอิมเมจผู้ให้บริการที่รองรับกระบวนการจากอิมเมจผู้ให้บริการ
เช่นเดียวกับอุปกรณ์ที่เปิดตัวใน Android เวอร์ชันก่อนหน้า ให้เพิ่มข้อมูลเฉพาะอุปกรณ์
การปรับแต่งใน
device/manufacturer/device-name/sepolicy
นโยบายใหม่ที่ควบคุมวิธีที่คอมโพเนนต์ของผู้ให้บริการโต้ตอบกับผู้ให้บริการรายอื่น (เท่านั้น)
คอมโพเนนต์ ควรเกี่ยวข้องกับประเภทที่ปรากฏเฉพาะใน
device/manufacturer/device-name/sepolicy
นโยบายที่เขียนที่นี่อนุญาตให้โค้ดบนผู้ให้บริการทำงานได้ โดยจะไม่ได้รับการอัปเดตในฐานะส่วนหนึ่ง
OTA ที่ใช้เฉพาะเฟรมเวิร์กเท่านั้น และจะแสดงไว้ในนโยบายแบบรวมในอุปกรณ์
ด้วยอิมเมจระบบ AOSP อ้างอิง
การสนับสนุนรูปภาพผู้ให้บริการเพื่อทำงาน ด้วย AOSP
ตัวอย่าง: การเพิ่มกระบวนการใหม่ (ลงทะเบียนกับ
hwservicemanager
จากอิมเมจของผู้ให้บริการ) ที่ใช้คอมโพเนนต์
HAL ที่กำหนดโดย AOSP
เช่นเดียวกับอุปกรณ์ที่เปิดตัวด้วย Android เวอร์ชันก่อนหน้า ให้ทำดังนี้
การปรับแต่งเฉพาะอุปกรณ์ใน
device/manufacturer/device-name/sepolicy
นโยบายที่ส่งออกเป็นส่วนหนึ่งของ system/sepolicy/public/
พร้อมใช้งานแล้ว
เพื่อการใช้งาน และจัดส่งเป็นส่วนหนึ่งของนโยบายของผู้ให้บริการ ประเภทและแอตทริบิวต์จาก
อาจมีการนำนโยบายสาธารณะมาใช้ในกฎใหม่ที่ระบุการโต้ตอบกับ
บิตเฉพาะผู้ให้บริการตาม neverallow
ที่ให้ไว้
ข้อจำกัด สำหรับกรณีเฉพาะผู้ให้บริการ นโยบายใหม่ในส่วนนี้จะไม่ได้รับการอัปเดต
โดยเป็นส่วนหนึ่งของ OTA ที่ใช้เพียงเฟรมเวิร์กเท่านั้น และจะแสดงอยู่ในนโยบายรวมเกี่ยวกับ
อุปกรณ์ที่มีอิมเมจระบบ AOSP อ้างอิง
ส่วนขยายรูปภาพระบบเท่านั้น
ตัวอย่าง: การเพิ่มบริการใหม่ (ลงทะเบียนกับ Servicemanager) ที่เข้าถึงโดยกระบวนการอื่นๆ จากอิมเมจของระบบเท่านั้น
เพิ่มนโยบายนี้ลงใน system/sepolicy/private
คุณสามารถเพิ่ม
กระบวนการหรือออบเจ็กต์เพื่อเปิดใช้ฟังก์ชันการทำงานในอิมเมจระบบของพาร์ทเนอร์
บิตใหม่เหล่านั้นไม่จําเป็นต้องโต้ตอบกับคอมโพเนนต์ใหม่ในอิมเมจของผู้ให้บริการ
(โดยเฉพาะอย่างยิ่ง กระบวนการหรือออบเจ็กต์ดังกล่าวต้องทำงานได้อย่างสมบูรณ์โดยไม่มีนโยบายจาก
รูปภาพผู้ให้บริการ) นโยบายที่ส่งออกโดย system/sepolicy/public
คือ
สามารถใช้ได้ที่นี่ เช่นเดียวกับส่วนขยายที่แสดงเฉพาะรูปภาพของผู้ให้บริการ นโยบายนี้
ของอิมเมจระบบ และอาจอัปเดตใน OTA ที่ใช้เฉพาะเฟรมเวิร์ก แต่จะ
ปรากฏเมื่อใช้อิมเมจระบบ AOSP อ้างอิง
รูปภาพผู้ให้บริการ ส่วนขยายที่แสดงคอมโพเนนต์ AOSP แบบขยาย
ตัวอย่าง: ใหม่ที่ไม่ใช่ AOSP HAL สำหรับใช้โดยไคลเอ็นต์เสริมที่ มีอยู่ในอิมเมจระบบ AOSP ด้วย (เช่น ระบบเซิร์ฟเวอร์แบบขยาย)
นโยบายสำหรับการโต้ตอบระหว่างระบบและผู้ให้บริการจะต้องรวมอยู่ใน
device/manufacturer/device-name/sepolicy
จัดส่งในพาร์ติชันผู้ให้บริการ
คล้ายกับกรณีข้างต้นของการเพิ่มการสนับสนุนรูปภาพผู้ให้บริการลงในงาน
ที่มีรูปภาพ AOSP อ้างอิง ยกเว้นคอมโพเนนต์ AOSP ที่แก้ไขแล้วอาจ
ต้องมีนโยบายเพิ่มเติมเพื่อให้ทำงานกับส่วนอื่นๆ ในระบบได้อย่างเหมาะสม
พาร์ติชัน (ซึ่งก็ไม่เป็นไรตราบใดที่ยังมีประเภท AOSP แบบสาธารณะอยู่
)
นโยบายสำหรับการโต้ตอบของคอมโพเนนต์ AOSP สาธารณะกับอิมเมจระบบเท่านั้น
ส่วนขยายควรเป็น system/sepolicy/private
อิมเมจระบบ ส่วนขยายที่เข้าถึงเฉพาะอินเทอร์เฟซ AOSP
ตัวอย่าง: กระบวนการใหม่ของระบบที่ไม่ใช่ AOSP ต้องเข้าถึง HAL ใน ที่ AOSP ใช้อยู่
ซึ่งคล้ายกับ system-image-only
ตัวอย่างส่วนขยาย ยกเว้นคอมโพเนนต์ใหม่ของระบบที่อาจโต้ตอบ
อินเทอร์เฟซ system/vendor
นโยบายสำหรับคอมโพเนนต์ของระบบใหม่ต้อง
ไปใน system/sepolicy/private
ซึ่งยอมรับได้ในกรณีที่
ผ่านอินเทอร์เฟซที่สร้างโดย AOSP อยู่แล้วใน
system/sepolicy/public
(เช่น ประเภทและแอตทริบิวต์ที่จำเป็นสำหรับ
มีอยู่) แม้ว่านโยบายอาจรวมอยู่ในอุปกรณ์
ก็ไม่สามารถใช้ system/sepolicy/private
อื่นๆ ได้
ประเภทหรือการเปลี่ยนแปลง (ในการกระทบต่อนโยบายใดๆ ก็ตาม) ซึ่งเป็นผลมาจากเฟรมเวิร์กเท่านั้น
อัปเดต อาจมีการเปลี่ยนแปลงนโยบายใน OTA ที่ใช้เพียงเฟรมเวิร์กเท่านั้น แต่จะไม่มีการเปลี่ยนแปลง
ปรากฏเมื่อใช้อิมเมจระบบ AOSP (ซึ่งจะไม่มีระบบใหม่)
คอมโพเนนต์ใดองค์ประกอบหนึ่ง)
รูปภาพผู้ให้บริการ ส่วนขยายที่แสดงคอมโพเนนต์ใหม่ของระบบ
ตัวอย่าง: การเพิ่ม HAL ใหม่ที่ไม่ใช่ AOSP สำหรับใช้โดยกระบวนการของไคลเอ็นต์ ที่ไม่มีแอนะล็อก AOSP (จึงต้องมีโดเมนของตัวเอง)
คล้ายกับส่วนขยาย AOSP
ตัวอย่างเช่น นโยบายสำหรับการโต้ตอบระหว่างระบบและผู้ให้บริการต้องแสดงอยู่ใน
device/manufacturer/device-name/sepolicy
ไดเรกทอรีที่มีการจัดส่งบนพาร์ติชันผู้ให้บริการ
(เพื่อให้แน่ใจว่านโยบายระบบไม่มีความรู้เกี่ยวกับรายละเอียดเฉพาะผู้ให้บริการ) คุณ
สามารถเพิ่มประเภทสาธารณะใหม่ๆ ที่ขยายนโยบายได้
system/sepolicy/public
; ควรทำนอกเหนือจาก
นโยบาย AOSP ที่มีอยู่ กล่าวคือ ไม่นำนโยบายสาธารณะ AOSP ออก สาธารณะใหม่
สามารถใช้ประเภทสำหรับนโยบายใน system/sepolicy/private
และ
device/manufacturer/device-name/sepolicy
โปรดทราบว่าทุกครั้งที่เพิ่ม system/sepolicy/public
ด้วยการแสดงการรับประกันความเข้ากันได้ใหม่ที่ต้องติดตามใน
และอยู่ภายใต้ข้อจำกัดอื่นๆ เฉพาะประเภทใหม่และ
อาจเพิ่มกฎการอนุญาตที่เกี่ยวข้องใน system/sepolicy/public
และข้อความนโยบายอื่นๆ ไม่ได้รับการสนับสนุน นอกจากนี้ ยังมี
ไม่สามารถใช้ประเภทสาธารณะเพื่อติดป้ายกำกับวัตถุโดยตรงใน
นโยบาย /vendor
สถานการณ์เกี่ยวกับนโยบายที่ไม่รองรับ
อุปกรณ์ที่ใช้ Android 8.0 ขึ้นไปจะไม่รองรับรายการต่อไปนี้ สถานการณ์และตัวอย่างนโยบาย
ข้อมูลเพิ่มเติม ส่วนขยายไปยังอิมเมจระบบที่ต้องมีสิทธิ์ ไปยังคอมโพเนนต์ภาพผู้ให้บริการใหม่ๆ หลังจาก OTA ที่ใช้เฟรมเวิร์กเท่านั้น
ตัวอย่าง: กระบวนการใหม่ของระบบที่ไม่ใช่ AOSP ซึ่งต้องใช้กระบวนการของตนเอง มีการเพิ่มไว้ใน Android รุ่นถัดไปและต้องมีสิทธิ์เข้าถึง ไม่ใช่ AOSP HAL
คล้ายกับ
ใหม่
การโต้ตอบ (ไม่ใช่ AOSP) ของระบบและคอมโพเนนต์ของผู้ให้บริการ ยกเว้นระบบใหม่
ในแอตทริบิวต์
OTA ที่ใช้เฟรมเวิร์กเท่านั้น แม้ว่าสามารถเพิ่มประเภทใหม่ลงในนโยบายใน
system/sepolicy/public
ไม่ทราบเกี่ยวกับนโยบายผู้ให้บริการที่มีอยู่
ประเภทใหม่เนื่องจากกำลังติดตามเฉพาะนโยบายสาธารณะของระบบ Android 8.0
AOSP จัดการกับปัญหานี้ด้วยการเปิดเผยทรัพยากรที่ผู้ให้บริการมีให้ผ่านแอตทริบิวต์ (เช่น
hal_foo
) แต่เนื่องจากส่วนขยายพาร์ทเนอร์แอตทริบิวต์ไม่ใช่
สนับสนุนใน system/sepolicy/public
วิธีนี้ไม่สามารถใช้งานได้
นโยบายของผู้ให้บริการ สิทธิ์การเข้าถึงจะต้องมาจากประเภทสาธารณะที่มีอยู่แล้วก่อนหน้านี้
ตัวอย่าง: การเปลี่ยนแปลงในกระบวนการของระบบ (AOSP หรือที่ไม่ใช่ AOSP) เปลี่ยนวิธีโต้ตอบกับคอมโพเนนต์ของผู้ให้บริการใหม่ที่ไม่ใช่ AOSP
นโยบายเกี่ยวกับอิมเมจระบบจะต้องเขียนขึ้นโดยไม่มีความรู้เกี่ยวกับข้อมูลที่เฉพาะเจาะจง
การปรับแต่งผู้ให้บริการ ดังนั้น นโยบายเกี่ยวกับอินเทอร์เฟซเฉพาะใน AOSP จึง
เปิดเผยผ่านแอตทริบิวต์ในระบบ/นโยบาย/สาธารณะเพื่อให้นโยบายของผู้ให้บริการ
เลือกใช้นโยบายระบบในอนาคตที่ใช้แอตทริบิวต์เหล่านี้ อย่างไรก็ตาม
ส่วนขยายแอตทริบิวต์ใน system/sepolicy/public
ไม่เท่ากับ
รองรับ ดังนั้นนโยบายทั้งหมดเป็นตัวกำหนดการทำงานร่วมกันของคอมโพเนนต์
มีองค์ประกอบใหม่ๆ ของผู้ให้บริการ (ซึ่งไม่ได้จัดการโดยแอตทริบิวต์อยู่แล้ว
อยู่ใน AOSP system/sepolicy/public
) ต้องอยู่ใน
device/manufacturer/device-name/sepolicy
ซึ่งหมายความว่าจะไม่สามารถเปลี่ยนแปลงประเภทระบบได้
สิทธิ์เข้าถึงที่อนุญาตให้มีประเภทผู้ให้บริการโดยเป็นส่วนหนึ่งของ OTA ที่ใช้เฟรมเวิร์กเท่านั้น