Halaman ini menjelaskan cara Android menangani masalah kompatibilitas kebijakan dengan update over-the-air (OTA) platform, yang mana setelan SELinux platform baru mungkin berbeda dengan setelan SELinux vendor lama.
Kepemilikan dan pelabelan objek
Kepemilikan harus ditentukan dengan jelas untuk setiap objek agar kebijakan platform dan vendor tetap terpisah. Misalnya, jika label kebijakan vendor /dev/foo
dan label kebijakan platform /dev/foo
dalam OTA berikutnya, akan ada perilaku yang tidak ditentukan seperti penolakan yang tidak terduga, atau yang lebih parah, kegagalan booting. Untuk SELinux, hal ini muncul sebagai konflik pemberian label. Node perangkat
hanya dapat memiliki satu label yang diselesaikan ke label mana pun yang diterapkan terakhir.
Akibatnya:
- Proses yang memerlukan akses ke label yang gagal diterapkan akan kehilangan akses ke resource.
- Proses yang mendapatkan akses ke file dapat terganggu karena node perangkat yang salah dibuat.
Konflik antara label platform dan vendor dapat terjadi untuk objek apa pun yang memiliki label SELinux, termasuk properti, layanan, proses, file, dan soket. Untuk menghindari masalah ini, tentukan kepemilikan objek ini dengan jelas.
Namespace jenis/atribut
Selain konflik label, nama atribut dan jenis SELinux juga dapat berkonflik. SELinux tidak mengizinkan beberapa deklarasi jenis dan atribut yang sama. Kebijakan dengan pernyataan duplikat gagal dikompilasi. Untuk menghindari bentrokan nama atribut dan jenis, sebaiknya semua deklarasi vendor dimulai dengan awalan vendor_
. Misalnya, vendor harus menggunakan
type vendor_foo, domain;
, bukan type foo, domain;
.
Kepemilikan file
Mencegah tabrakan untuk file merupakan hal yang sulit karena kebijakan platform dan vendor umumnya memberikan label untuk semua sistem file. Tidak seperti penamaan jenis, pemberian namespace pada file tidak praktis karena banyak di antaranya dibuat oleh kernel. Untuk mencegah tabrakan ini, ikuti panduan penamaan untuk sistem file di bagian ini. Untuk Android 8.0, ini adalah rekomendasi tanpa penerapan teknis. Ke depannya, rekomendasi ini akan diterapkan oleh Vendor Test Suite (VTS).
Sistem (/system)
Hanya image sistem yang harus memberikan label untuk komponen /system
melalui file_contexts
, service_contexts
, dll. Jika label
untuk komponen /system
ditambahkan dalam kebijakan vendor, update
OTA khusus framework mungkin tidak dapat dilakukan.
Vendor (/vendor)
Kebijakan SELinux AOSP telah memberi label pada bagian partisi vendor
yang berinteraksi dengan platform, sehingga memungkinkan penulisan aturan SELinux untuk proses platform agar dapat berkomunikasi atau mengakses bagian partisi vendor
. Contoh:
/vendor path | Label yang disediakan platform | Proses platform bergantung pada label |
---|---|---|
/vendor(/.*)?
|
vendor_file
|
Semua klien HAL dalam framework, ueventd , dll.
|
/vendor/framework(/.*)?
|
vendor_framework_file
|
dex2oat , appdomain , dll.
|
/vendor/app(/.*)?
|
vendor_app_file
|
dex2oat , installd , idmap , dll.
|
/vendor/overlay(/.*)
|
vendor_overlay_file
|
system_server , zygote , idmap , dll.
|
Oleh karena itu, aturan khusus harus diikuti (diterapkan melalui
neverallows
) saat memberi label pada file tambahan di partisi
vendor
:
vendor_file
harus menjadi label default untuk semua file di partisivendor
. Kebijakan platform mewajibkan hal ini untuk mengakses implementasi HAL teruskan.- Semua
exec_types
baru yang ditambahkan di partisivendor
melalui kebijakan vendor harus memiliki atributvendor_file_type
. Hal ini diterapkan melalui neverallows. - Untuk menghindari konflik dengan update platform/framework pada masa mendatang, hindari memberi label pada file selain
exec_types
di partisivendor
. - Semua dependensi library untuk HAL proses yang sama yang diidentifikasi AOSP harus diberi label sebagai
same_process_hal_file.
Procfs (/proc)
File dalam /proc
hanya dapat diberi label menggunakan label
genfscon
. Di Android 7.0, kebijakan
platform
dan vendor
menggunakan genfscon
untuk memberi label pada file di procfs
.
Rekomendasi: Hanya label kebijakan platform /proc
.
Jika proses vendor memerlukan akses ke file di /proc
yang saat ini diberi label default (proc
), kebijakan vendor tidak boleh memberi label secara eksplisit dan harus menggunakan jenis proc
generik untuk menambahkan aturan bagi domain vendor. Hal ini memungkinkan update platform mengakomodasi antarmuka kernel mendatang yang diekspos melalui procfs
dan melabelinya secara eksplisit sesuai kebutuhan.
Debugfs (/sys/kernel/debug)
Debugfs
dapat diberi label di file_contexts
dan genfscon
. Di Android 7.0 hingga Android 10, label platform dan vendor
debugfs
.
Di Android 11, debugfs
tidak dapat
diakses atau di-mount di perangkat produksi. Produsen perangkat harus
menghapus debugfs
.
Tracefs (/sys/kernel/debug/tracing)
Tracefs
dapat diberi label di file_contexts
dan genfscon
. Di Android 7.0, hanya label platform
tracefs
.
Rekomendasi: Hanya platform yang dapat memberi label tracefs
.
Sysfs (/sys)
File di /sys
dapat diberi label menggunakan file_contexts
dan genfscon
. Di Android 7.0, platform dan vendor menggunakan
genfscon
untuk memberi label pada file di sysfs
.
Rekomendasi: Platform dapat memberi label pada node sysfs
yang tidak spesifik untuk perangkat. Jika tidak, hanya vendor yang dapat memberi label pada file.
tmpfs (/dev)
File di /dev
dapat diberi label di file_contexts
. Di
Android 7.0, file label platform dan vendor ada di sini.
Rekomendasi: Vendor hanya dapat memberi label pada file di
/dev/vendor
(misalnya, /dev/vendor/foo
,
/dev/vendor/socket/bar
).
Rootfs (/)
File di /
dapat diberi label di file_contexts
. Di Android
7.0, file label platform dan vendor ada di sini.
Rekomendasi: Hanya sistem yang dapat memberi label pada file di /
.
Data (/data)
Data diberi label melalui kombinasi file_contexts
dan seapp_contexts
.
Rekomendasi: Jangan izinkan pemberian label vendor di luar
/data/vendor
. Hanya platform yang dapat memberi label pada bagian lain dari
/data
.
Versi label Genfs
Mulai dari level API vendor 202504, label SELinux baru yang ditetapkan dengan genfscon
di
system/sepolicy/compat/plat_sepolicy_genfs_ver.cil
bersifat opsional untuk partisi vendor
yang lebih lama. Hal ini memungkinkan partisi
vendor
yang lebih lama mempertahankan penerapan SEPolicy yang ada.
Hal ini dikontrol oleh variabel Makefile BOARD_GENFS_LABELS_VERSION
yang disimpan di /vendor/etc/selinux/genfs_labels_version.txt
.
Contoh:
-
Di level API vendor 202404, node
/sys/class/udc
diberi labelsysfs
secara default. -
Mulai dari level API vendor 202504,
/sys/class/udc
diberi labelsysfs_udc
.
Namun, /sys/class/udc
mungkin digunakan oleh partisi vendor
yang menggunakan level API 202404, baik dengan label sysfs
default maupun label khusus vendor. Memberi label /sys/class/udc
sebagai sysfs_udc
tanpa syarat dapat merusak kompatibilitas dengan partisi vendor
ini. Dengan mencentang
BOARD_GENFS_LABELS_VERSION
, platform akan terus menggunakan
label dan izin sebelumnya untuk partisi vendor
yang lebih lama.
BOARD_GENFS_LABELS_VERSION
dapat lebih besar dari atau sama dengan level API vendor. Misalnya, partisi vendor
yang menggunakan level API 202404 dapat menetapkan BOARD_GENFS_LABELS_VERSION
ke 202504 untuk menerapkan label baru yang diperkenalkan pada 202504. Lihat daftar
label genfs khusus 202504.
Saat memberi label pada node genfscon
, platform harus mempertimbangkan partisi vendor
yang lebih lama dan menerapkan mekanisme penggantian untuk kompatibilitas jika diperlukan. Platform dapat menggunakan library khusus platform untuk membuat kueri
versi label genfs.
-
Di native, gunakan
libgenfslabelsversion
. Lihatgenfslabelsversion.h
untuk file headerlibgenfslabelsversion
. -
Di Java, gunakan
android.os.SELinux.getGenfsLabelsVersion()
.
Kebijakan publik platform
Kebijakan SELinux platform dibagi menjadi pribadi dan publik. Kebijakan
platform-public terdiri dari jenis dan atribut yang selalu
tersedia untuk tingkat API vendor,
yang bertindak sebagai API antara platform dan vendor. Kebijakan ini diekspos ke penulis kebijakan vendor agar vendor dapat membuat file kebijakan vendor, yang jika digabungkan dengan kebijakan khusus platform, akan menghasilkan kebijakan yang berfungsi penuh untuk perangkat. Kebijakan platform-public ditentukan di
system/sepolicy/public
.
Misalnya, jenis vendor_init
, yang merepresentasikan proses inisialisasi dalam
konteks vendor, ditentukan di bagian
system/sepolicy/public/vendor_init.te
:
type vendor_init, domain;
Vendor dapat merujuk ke jenis vendor_init
untuk menulis aturan kebijakan kustom:
# Allow vendor_init to set vendor_audio_prop in vendor's init scripts
set_prop(vendor_init, vendor_audio_prop)
Atribut kompatibilitas
Kebijakan SELinux adalah interaksi antara jenis sumber dan target untuk izin dan class objek tertentu. Setiap objek (misalnya, proses, file) yang terpengaruh oleh kebijakan SELinux hanya dapat memiliki satu jenis, tetapi jenis tersebut mungkin memiliki beberapa atribut.
Kebijakan ini sebagian besar ditulis dalam istilah jenis yang ada. Di sini, vendor_init
dan debugfs
adalah jenis:
allow vendor_init debugfs:dir { mounton };
Hal ini berfungsi karena kebijakan ditulis dengan pengetahuan tentang semua jenis. Namun, jika kebijakan vendor dan kebijakan platform menggunakan jenis tertentu, dan label objek tertentu berubah hanya dalam salah satu kebijakan tersebut, kebijakan lainnya mungkin berisi kebijakan yang sebelumnya memperoleh atau kehilangan akses yang diandalkan. Misalnya, anggaplah
bahwa kebijakan platform melabeli node sysfs sebagai sysfs
:
/sys(/.*)? u:object_r:sysfs:s0
Kebijakan vendor memberikan akses ke /sys/usb
, yang diberi label sebagai
sysfs
:
allow vendor_init sysfs:chr_file rw_file_perms;
Jika kebijakan platform diubah untuk memberi label /sys/usb
sebagai
sysfs_usb
, kebijakan vendor tetap sama, tetapi
vendor_init
kehilangan akses ke /sys/usb
karena tidak ada
kebijakan untuk jenis sysfs_usb
baru:
/sys/usb u:object_r:sysfs_usb:s0
Untuk mengatasi masalah ini, Android memperkenalkan konsep atribut berversi. Pada waktu kompilasi, sistem build secara otomatis menerjemahkan jenis publik platform yang digunakan dalam kebijakan vendor ke dalam atribut berversi ini. Terjemahan ini diaktifkan dengan memetakan file yang mengaitkan atribut berversi dengan satu atau beberapa jenis publik dari platform.
Misalnya, anggap /sys/usb
diberi label sebagai sysfs
dalam kebijakan platform 202504, dan kebijakan vendor 202504 memberikan
vendor_init
akses ke /sys/usb
. Dalam hal ini:
-
Kebijakan vendor menulis aturan
allow vendor_init sysfs:chr_file rw_file_perms;
, karena/sys/usb
diberi label sebagaisysfs
dalam kebijakan platform 202504. Saat sistem build mengompilasi kebijakan vendor, sistem akan otomatis menerjemahkan aturan keallow vendor_init_202504 sysfs_202504:chr_file rw_file_perms;
. Atributvendor_init_202504
dansysfs_202504
sesuai dengan jenisvendor_init
dansysfs
, yang merupakan jenis yang ditentukan oleh platform. -
Sistem build menghasilkan file pemetaan identitas
/system/etc/selinux/mapping/202504.cil
. Karena partisisystem
danvendor
menggunakan versi202504
yang sama, file pemetaan berisi pemetaan identitas daritype_202504
ketype
. Misalnya,vendor_init_202504
dipetakan kevendor_init
, dansysfs_202504
dipetakan kesysfs
:(typeattributeset sysfs_202504 (sysfs)) (typeattributeset vendor_init_202504 (vendor_init)) ...
Saat versi diubah dari 202504 menjadi 202604, file pemetaan baru untuk partisi
vendor
202504 dibuat di
system/sepolicy/private/compat/202504/202504.cil
, yang diinstal
ke /system/etc/selinux/mapping/202504.cil
untuk partisi
system
202604 atau yang lebih baru. Awalnya, file pemetaan ini berisi
pemetaan identitas, seperti yang dijelaskan sebelumnya. Jika label baru sysfs_usb
untuk /sys/usb
ditambahkan ke kebijakan platform 202604, file pemetaan
diperbarui untuk memetakan sysfs_202504
ke sysfs_usb
:
(typeattributeset sysfs_202504 (sysfs sysfs_usb)) (typeattributeset vendor_init_202504 (vendor_init)) ...
Dengan update ini, aturan kebijakan vendor yang dikonversi allow
vendor_init_202504 sysfs_202504:chr_file rw_file_perms;
dapat otomatis
memberikan akses vendor_init
ke jenis sysfs_usb
baru.
Untuk mempertahankan kompatibilitas dengan partisi vendor
yang lebih lama, setiap kali jenis publik baru ditambahkan, jenis tersebut harus dipetakan ke setidaknya salah satu atribut versi dalam file pemetaan system/sepolicy/private/compat/ver/ver.cil
, atau dicantumkan di bagian system/sepolicy/private/compat/ver/ver.ignore.cil
untuk menyatakan bahwa tidak ada jenis yang cocok dalam versi vendor sebelumnya.
Kombinasi kebijakan platform, kebijakan vendor, dan file pemetaan memungkinkan sistem melakukan update tanpa mengupdate kebijakan vendor. Selain itu, konversi ke atribut berversi terjadi secara otomatis, sehingga kebijakan vendor tidak perlu menangani pembuatan versi, tetap menggunakan jenis publik apa adanya.
Kebijakan publik dan produk publik system_ext
Mulai Android 11, partisi system_ext
dan product
diizinkan untuk mengekspor jenis publik yang ditetapkan ke partisi
vendor
. Seperti kebijakan publik platform, kebijakan vendor menggunakan jenis dan aturan yang otomatis diterjemahkan ke dalam atribut versi, misalnya, dari type
menjadi type_ver
, dengan ver adalah tingkat API vendor partisi vendor
.
Jika partisi system_ext
dan product
didasarkan pada versi platform ver yang sama, sistem build akan menghasilkan file pemetaan dasar ke system_ext/etc/selinux/mapping/ver.cil
dan product/etc/selinux/mapping/ver.cil
, yang berisi pemetaan identitas dari type
ke type_ver
.
Kebijakan vendor dapat mengakses type
dengan atribut berversi
type_ver
.
Jika hanya partisi system_ext
dan product
yang diupdate, misalnya ver ke ver+1 (atau yang lebih baru), sementara
partisi vendor
tetap di ver, kebijakan vendor
mungkin kehilangan akses ke jenis partisi system_ext
dan
product
. Untuk mencegah kerusakan, partisi
system_ext
dan product
harus menyediakan
file pemetaan dari jenis konkret ke atribut type_ver
. Setiap partner bertanggung jawab untuk memelihara file pemetaan, jika mereka mendukung partisi ver vendor
dengan partisi ver+1 (atau yang lebih baru) system_ext
dan product
.
Untuk menginstal file pemetaan ke partisi system_ext
dan product
, pelaksana atau vendor perangkat diharapkan untuk:
- Salin file pemetaan dasar yang dihasilkan dari partisi ver
system_ext
danproduct
ke pohon sumbernya. - Ubah file pemetaan sesuai kebutuhan.
-
Instal
file pemetaan ke partisi ver+1 (atau yang lebih baru)
system_ext
danproduct
.
Misalnya, partisi 202504 system_ext
memiliki satu
jenis publik bernama foo_type
. Kemudian
system_ext/etc/selinux/mapping/202504.cil
di partisi 202504 system_ext
akan terlihat seperti ini:
(typeattributeset foo_type_202504 (foo_type)) (expandtypeattribute foo_type_202504 true) (typeattribute foo_type_202504)
Jika bar_type
ditambahkan ke system_ext
202604, dan jika
bar_type
harus dipetakan ke foo_type
untuk partisi
vendor
202504, 202504.cil
dapat diupdate dari
(typeattributeset foo_type_202504 (foo_type))
ke
(typeattributeset foo_type_202504 (foo_type bar_type))
lalu diinstal ke partisi system_ext
202604. Partisi 202504
vendor
dapat terus mengakses foo_type
dan bar_type
202604
system_ext
.
Perubahan atribut untuk Android 9
Perangkat yang diupgrade ke Android 9 dapat menggunakan atribut berikut, tetapi perangkat yang diluncurkan dengan Android 9 tidak boleh.
Atribut pelanggar
Android 9 menyertakan atribut terkait domain berikut:
data_between_core_and_vendor_violators
. Atribut untuk semua domain yang melanggar persyaratan untuk tidak membagikan file menurut jalur antaravendor
dancoredomains
. Proses platform dan vendor tidak boleh menggunakan file di disk untuk berkomunikasi (ABI tidak stabil). Rekomendasi:- Kode vendor harus menggunakan
/data/vendor
. - Sistem tidak boleh menggunakan
/data/vendor
.
- Kode vendor harus menggunakan
- Atribut
system_executes_vendor_violators
. untuk semua domain sistem (kecualiinit
danshell domains
) yang melanggar persyaratan untuk tidak mengeksekusi biner vendor. Eksekusi biner vendor memiliki API yang tidak stabil. Platform tidak boleh menjalankan biner vendor secara langsung. Rekomendasi:- Dependensi platform tersebut pada biner vendor harus berada di belakang HAL HIDL.
ATAU
coredomains
yang memerlukan akses ke biner vendor harus dipindahkan ke partisivendor
dan dengan demikian, berhenti menjadicoredomain
.
- Dependensi platform tersebut pada biner vendor harus berada di belakang HAL HIDL.
Atribut tidak tepercaya
Aplikasi tidak tepercaya yang menghosting kode arbitrer tidak boleh memiliki akses ke layanan HwBinder, kecuali yang dianggap cukup aman untuk diakses dari aplikasi tersebut (lihat layanan aman di bawah). Dua alasan utama untuk hal ini adalah:
- Server HwBinder tidak melakukan autentikasi klien karena saat ini HIDL tidak mengekspos informasi UID pemanggil. Meskipun HIDL mengekspos data tersebut, banyak layanan HwBinder beroperasi di tingkat yang lebih rendah daripada aplikasi (seperti, HAL) atau tidak boleh mengandalkan identitas aplikasi untuk otorisasi. Oleh karena itu, agar aman, asumsi defaultnya adalah bahwa setiap layanan HwBinder memperlakukan semua kliennya sebagai memiliki otorisasi yang sama untuk melakukan operasi yang ditawarkan oleh layanan.
- Server HAL (subset layanan HwBinder) berisi kode dengan tingkat insiden masalah keamanan yang lebih tinggi daripada komponen
system/core
dan memiliki akses ke lapisan bawah stack (hingga ke hardware), sehingga meningkatkan peluang untuk melewati model keamanan Android.
Layanan yang aman
Layanan yang aman meliputi:
same_process_hwservice
. Layanan ini (menurut definisi) berjalan dalam proses klien dan dengan demikian memiliki akses yang sama dengan domain klien tempat proses berjalan.coredomain_hwservice
. Layanan ini tidak menimbulkan risiko yang terkait dengan alasan #2.hal_configstore_ISurfaceFlingerConfigs
. Layanan ini dirancang khusus untuk digunakan oleh domain mana pun.hal_graphics_allocator_hwservice
. Operasi ini juga ditawarkan oleh layanan Bindersurfaceflinger
, yang aksesnya diizinkan untuk aplikasi.hal_omx_hwservice
. Ini adalah layanan Bindermediacodec
versi HwBinder, yang diizinkan untuk diakses oleh aplikasi.hal_codec2_hwservice
. Ini adalah versi yang lebih baru darihal_omx_hwservice
.
Atribut yang dapat digunakan
Semua hwservices
yang tidak dianggap aman memiliki atribut
untrusted_app_visible_hwservice
. Server HAL yang sesuai memiliki
atribut untrusted_app_visible_halserver
. Perangkat yang diluncurkan dengan Android 9 TIDAK BOLEH menggunakan atribut untrusted
.
Rekomendasi:
- Aplikasi yang tidak tepercaya harus berkomunikasi dengan layanan sistem yang berkomunikasi dengan HAL HIDL vendor. Misalnya, aplikasi dapat berkomunikasi dengan
binderservicedomain
, lalumediaserver
(yang merupakanbinderservicedomain
) pada gilirannya berkomunikasi denganhal_graphics_allocator
.ATAU
- Aplikasi yang memerlukan akses langsung ke HAL
vendor
harus memiliki domain sepolicy yang ditentukan vendor sendiri.
Pengujian atribut file
Android 9 menyertakan pengujian waktu build yang memastikan semua file di lokasi tertentu memiliki atribut yang sesuai (misalnya, semua file di sysfs
memiliki atribut sysfs_type
yang diperlukan).
Pelabelan konteks SELinux
Untuk mendukung perbedaan antara sepolicy platform dan vendor, sistem membangun file konteks SELinux secara berbeda agar tetap terpisah.
Konteks file
Android 8.0 memperkenalkan perubahan berikut untuk file_contexts
:
- Untuk menghindari overhead kompilasi tambahan di perangkat selama booting,
file_contexts
tidak ada lagi dalam bentuk biner. Sebagai gantinya, file tersebut dapat dibaca, file teks ekspresi reguler seperti{property, service}_contexts
(seperti sebelum versi 7.0). file_contexts
dibagi menjadi dua file:plat_file_contexts
- Platform Android
file_context
yang tidak memiliki label khusus perangkat, kecuali untuk memberi label pada bagian partisi/vendor
yang harus diberi label secara tepat untuk memastikan fungsi file sepolicy yang tepat. - Harus berada di partisi
system
di/system/etc/selinux/plat_file_contexts
di perangkat dan dimuat olehinit
di awal bersama denganfile_context
vendor.
- Platform Android
vendor_file_contexts
file_context
spesifik per perangkat dibuat dengan menggabungkanfile_contexts
yang ditemukan di direktori yang ditunjukkan olehBOARD_SEPOLICY_DIRS
dalam fileBoardconfig.mk
perangkat.- Harus diinstal di
/vendor/etc/selinux/vendor_file_contexts
di partisivendor
dan dimuat olehinit
di awal bersama denganfile_context
platform.
Konteks properti
Di Android 8.0, property_contexts
dibagi menjadi dua file:
plat_property_contexts
- Platform Android
property_context
yang tidak memiliki label khusus perangkat. - Harus berada di partisi
system
di/system/etc/selinux/plat_property_contexts
dan dimuat olehinit
di awal bersama denganproperty_contexts
vendor.
- Platform Android
vendor_property_contexts
property_context
khusus perangkat yang dibuat dengan menggabungkanproperty_contexts
yang ditemukan di direktori yang ditunjukkan olehBOARD_SEPOLICY_DIRS
dalam fileBoardconfig.mk
perangkat.- Harus berada di partisi
vendor
di/vendor/etc/selinux/vendor_property_contexts
dan dimuat olehinit
di awal bersama denganproperty_context
platform
Konteks layanan
Di Android 8.0, service_contexts
dibagi antara file berikut:
plat_service_contexts
service_context
khusus platform Android untukservicemanager
.service_context
tidak memiliki label khusus perangkat.- Harus berada di partisi
system
di/system/etc/selinux/plat_service_contexts
dan dimuat olehservicemanager
di awal bersama denganservice_contexts
vendor.
vendor_service_contexts
service_context
spesifik per perangkat dibuat dengan menggabungkanservice_contexts
yang ditemukan di direktori yang ditunjukkan olehBOARD_SEPOLICY_DIRS
dalam fileBoardconfig.mk
perangkat.- Harus berada di partisi
vendor
pada/vendor/etc/selinux/vendor_service_contexts
dan dimuat olehservicemanager
di awal bersama denganservice_contexts
platform. - Meskipun
servicemanager
mencari file ini saat waktu booting, untuk perangkatTREBLE
yang sepenuhnya mematuhi, makavendor_service_contexts
TIDAK BOLEH ada. Hal ini karena semua interaksi antaravendor
dansystem
proses HARUS melaluihwservicemanager
/hwbinder
.
plat_hwservice_contexts
- Platform Android
hwservice_context
untukhwservicemanager
yang tidak memiliki label khusus perangkat. - Harus berada di partisi
system
di/system/etc/selinux/plat_hwservice_contexts
dan dimuat olehhwservicemanager
di awal bersama denganvendor_hwservice_contexts
.
- Platform Android
vendor_hwservice_contexts
hwservice_context
spesifik per perangkat dibuat dengan menggabungkanhwservice_contexts
yang ditemukan di direktori yang ditunjukkan olehBOARD_SEPOLICY_DIRS
dalam fileBoardconfig.mk
perangkat.- Harus berada di partisi
vendor
di/vendor/etc/selinux/vendor_hwservice_contexts
dan dimuat olehhwservicemanager
di awal bersama denganplat_service_contexts
.
vndservice_contexts
service_context
khusus perangkat untukvndservicemanager
yang dibuat dengan menggabungkanvndservice_contexts
yang ditemukan di direktori yang ditunjukkan olehBOARD_SEPOLICY_DIRS
diBoardconfig.mk
perangkat.- File ini harus berada di partisi
vendor
di/vendor/etc/selinux/vndservice_contexts
dan dimuat olehvndservicemanager
saat memulai.
Konteks Seapp
Di Android 8.0, seapp_contexts
dibagi menjadi dua file:
plat_seapp_contexts
seapp_context
platform Android yang tidak memiliki perubahan khusus perangkat.- Harus berada di partisi
system
pada/system/etc/selinux/plat_seapp_contexts.
vendor_seapp_contexts
- Ekstensi khusus perangkat ke
seapp_context
platform yang dibuat dengan menggabungkanseapp_contexts
yang ditemukan di direktori yang ditunjukkan olehBOARD_SEPOLICY_DIRS
dalam fileBoardconfig.mk
perangkat. - Harus berada di partisi
vendor
pada/vendor/etc/selinux/vendor_seapp_contexts
.
- Ekstensi khusus perangkat ke
Izin MAC
Di Android 8.0, mac_permissions.xml
dibagi menjadi dua file:
- Platform
mac_permissions.xml
mac_permissions.xml
platform Android yang tidak memiliki perubahan khusus perangkat.- Harus berada di partisi
system
pada/system/etc/selinux/.
- Non-Platform
mac_permissions.xml
- Ekstensi khusus perangkat ke platform
mac_permissions.xml
yang dibangun darimac_permissions.xml
yang ditemukan di direktori yang ditunjukkan olehBOARD_SEPOLICY_DIRS
dalam fileBoardconfig.mk
perangkat. - Harus berada di partisi
vendor
pada/vendor/etc/selinux/.
- Ekstensi khusus perangkat ke platform