SELinux işlevlerinin temel düzeyini ve sonuçları ayrıntılı olarak analiz ettikten sonra, daha fazla bilgi için kendi politika ayarlarınızı Android işletim sistemi için özelleştirme yapabilirsiniz. Bu politikalar, Android Uyumluluk programını karşılayın ve varsayılan SELinux ayarlarını kaldırmamalıdır.
Üreticiler mevcut SELinux politikasını kaldırmamalıdır. Aksi takdirde ve bu süreç, Android SELinux uygulamasını ve belirler. Bu uygulamaların arasında, uyumlu ve çalışır hale gelecek şekilde geliştirildi. Başvurular hiçbir SELinux özellikli cihazlarda çalışmaya devam etmesi için değişiklik yapabilir.
SELinux'u özelleştirirken şunları unutmayın:
- Tüm yeni arka plan programları için SELinux politikası yazma
- Uygun durumlarda önceden tanımlanmış alanları kullanın
init
hizmeti olarak üretilen herhangi bir işleme alan atayın- Politika yazmadan önce makrolar hakkında bilgi edinme
- Temel politikada yapılan değişiklikleri AOSP'ye gönderme
Ayrıca şunları yapmamaya dikkat edin:
- Uyumsuz politika oluştur
- Son kullanıcı politikası özelleştirmeye izin ver
- MDM politika özelleştirmelerine izin ver
- Politika ihlalleri yaparak kullanıcıları korkutma
- Arka kapı ekle
Bu yapılandırmanın Çekirdek Güvenlik Özellikleri bölümüne bakın Android Belirli gereksinimler için Uyumluluk Tanımı Dokümanı
SELinux'ta beyaz liste yaklaşımı kullanılır, yani tüm erişimler açıkça politikada izin verildiğini kabul etmiş olursunuz. Android'in varsayılan SELinux'undan beri politikası zaten Android Açık Kaynak Projesi'ni destekliyor. Sizin herhangi bir şekilde değiştirmeyeceklerdir. SELinux ayarlarını özelleştirirseniz mevcut uygulamaları bozmamaya özen gösterin. Başlamak için:
- Şunu kullanın: en son Android kernel ekleyebilirsiniz.
- YouTube'da ilke sahip olması gerekir.
- Android'e yalnızca kendi yaptığınız eklemeleri ele alın. Varsayılan politika Android Açık Kaynağı Project kod tabanı otomatik olarak oluşturulur.
- Yazılım bileşenlerini birbirinden bağımsız çalışan modüller halinde bölme görevlerden biridir.
- Bu görevleri birbiriyle alakasız içeriklerden izole eden SELinux politikaları oluşturabilir işlevlerine dahildir.
- Bu politikaları,
*.te
dosyalarına (SELinux'un uzantısı) yerleştirin politika kaynak dosyaları)/device/manufacturer/device-name/sepolicy
dizine eklemek içinBOARD_SEPOLICY
değişkenlerini kullanın ve kullanabilirsiniz. - Başlangıçta yeni alanları serbest bırakın. Bu işlem, izin verilen bir
beyanını ilgili alanın
.te
dosyasında bulabilirsiniz. - Sonuçları analiz edin ve alan tanımlarınızı hassaslaştırın.
- Userdebug'da başka ret görünmüyorsa izin veren beyanı kaldırın. inşa eder.
SELinux politika değişikliğinizi entegre ettikten sonra emin olmak için geliştirme iş akışını gözden geçirin. İdeal olarak yazılım geliştirme süreci, SELinux politikası yalnızca model değişikliklerinin yanı sıra
SELinux'u özelleştirmeye başladığınızda, önce Android'e yaptığınız eklemeleri denetleyin. Eğer yeni bir işlev yürüten bir bileşen eklediyseniz, bu bileşenin Android'in güvenlik politikasının yanı sıra gerekir.
Gereksiz sorunları önlemek için fazla geniş bir kitleye ve çok kısıtlayıcı ve uyumsuzdur. Bu da, sistem cihaz işlevlerine sahip olur. Öte yandan, değişiklikleriniz başkalarına fayda sağlayacaksa varsayılan SELinux politikasındaki değişiklikleri yama. Yama uygulanmışsa bu değişikliği her yeni Android sürümünde.
Örnek politika ifadeleri
SELinux, Y4 ve bu nedenle zaman kazanmak için çeşitli makroları destekler.
Aşağıdaki örnekte, tüm alan adlarına okuma erişimi verilir veya
/dev/null
içine yaz ve /dev/zero
kaynağından oku.
# 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 };
Aynı ifade SELinux *_file_perms
ile yazılabilir
makroları (kısayol):
# 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;
Örnek politika
Aşağıda, DHCP için geçerli olan tam bir örnek politika örneği verilmiştir:
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 };
Örneği inceleyelim:
İlk satırdaki tür bildirimi; DHCP arka plan programı
temel güvenlik politikası (domain
). Önceki ekstreden
Örneğin, DHCP, /dev/null
kaynağından okuma ve yazma işlemleri yapabilir.
İkinci satırda, DHCP izin verilen alan olarak tanımlanır.
init_daemon_domain(dhcp)
satırında, politika DHCP'nin şu şekilde olduğunu belirtir:
init
kaynağından ortaya çıktı ve bununla iletişim kurmasına izin verildi.
net_domain(dhcp)
satırındaki politika, DHCP'nin
net
alanındaki yaygın ağ işlevi (ör. okuma)
TCP paketleri yazma, yuvalar üzerinden iletişim kurma ve DNS işlemlerini gerçekleştirme
kabul edersiniz.
allow dhcp proc_net:file write;
satırında politika şunu belirtir:
DHCP, /proc
içindeki belirli dosyalara yazabilir. Bu satırda gösterilmektedir
SELinux’un ayrıntılı dosya etiketlemesi. proc_net
etiketini kullanıyor
için yazma erişimini yalnızca /proc/sys/net
altındaki dosyalarla sınırlandırın.
Örneğin,
allow dhcp netd:fd use;
, uygulamaların
birbirleriyle etkileşime geçmelerini sağlar. Politika, DHCP ve netd'nin
dosya tanımlayıcılar, FIFO dosyaları, datagram yuvaları ve UNIX akışı aracılığıyla birbirlerine
soketler. DHCP yalnızca datagram yuvalarında ve UNIX'te okuma ve yazma işlemleri yapabilir
akış yuvaları oluşturmayın veya açmayın.
Kullanılabilir denetimler
Sınıf | İzin |
---|---|
dosya |
ioctl read write create getattr setattr lock relabelfrom relabelto append unlink link rename execute swapon quotaon mounton |
dizin |
add_name remove_name reparent search rmdir open audit_access execmod |
yuva |
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 |
dosya sistemi |
mount remount unmount getattr relabelfrom relabelto transition associate quotamod quotaget |
işlem |
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 |
güvenlik |
compute_av compute_create compute_member check_context load_policy compute_relabel compute_user setenforce setbool setsecparam setcheckreqprot read_policy |
özellik |
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 |
DAHA FAZLA |
VE DAHA FAZLASI |
asla izin verme kuralları
SELinux neverallow
kuralları, hiçbir zaman gerçekleşmemesi gereken davranışı yasaklar.
Uyumluluk testiyle
SELinux neverallow
kuralları artık cihazlar arasında zorunlu kılınmıştır.
Aşağıdaki yönergeler, üreticilerin hatalardan kaçınmasına yardımcı olmak için tasarlanmıştır
, özelleştirme sırasında neverallow
kurallarıyla ilgilidir. Kural numaraları
Android 5.1'e karşılık gelir ve sürüme göre değişiklik yapılabilir.
48. Kural: neverallow { domain -debuggerd -vold -dumpstate
-system_server } self:capability sys_ptrace;
ptrace
ile ilgili kılavuz sayfasına bakın. sys_ptrace
özelliği, herhangi bir işlemi ptrace
yapma olanağı tanır. Bu da, çok büyük bir
diğer süreçler üzerinde kontrol sahibi olmalıdır ve yalnızca belirlenen sisteme ait olmalıdır
bileşenlerini kontrol edin. Bu özelliğe duyulan ihtiyaç, çoğu zaman
kullanıcılara yönelik derlemeler için olmayan veya
gerekli olmayan işlevlere sahiptir. Gereksiz bileşeni kaldırın.
76. Kural: neverallow { domain -appdomain -dumpstate
-shell -system_server -zygote } { file_type -system_file -exec_type }:file execute;
Bu kuralın amacı, sistemde rastgele kodun yürütülmesini önlemektir.
Özellikle, yalnızca /system
üzerindeki kodun yürütüleceğini ve
ve doğrulanmış başlatma gibi mekanizmalar sayesinde güvenlik garantileri verir.
Böyle bir sorunla karşılaştığınızda genellikle en iyi çözüm
neverallow
kuralı, rahatsız edici kodu
/system
bölüm.
Android 8.0 ve sonraki sürümlerde SEPolicy'yi özelleştirme
Bu bölümde, Android 8.0 ve Android Açık Kaynak Projesi (AOSP) SEPolicy ve SEPolicy uzantıları SELinux politikasının nasıl saklandığı hakkında daha fazla bilgi için çeşitli bölümler ve Android sürümleriyle uyumludur (bkz. Uyumluluk.
Politika yerleştirme
Android 7.0 ve önceki sürümlerde cihaz üreticileri,
AOSP politikasını genişletmeyi amaçlayan politika dahil BOARD_SEPOLICY_DIRS
farklı cihaz türlerinde de. Android 8.0 ve sonraki sürümlerde
BOARD_SEPOLICY_DIRS
, politikayı yalnızca tedarikçi firmaya yerleştirir
görüntüsüdür.
Android 8.0 ve sonraki sürümlerde politika, AOSP'de aşağıdaki konumlarda bulunur:
- system/sepolicy/public olarak ayarlayın. Kullanım için dışa aktarılan politikayı içerir
lütfen kontrol edin. Her şey Android 8.0'da
uyumluluk altyapısına sahip olduğundan emin olun.
Herkese açık politikanın tüm sürümlerde kalıcı olması amaçlanır. Böylece
özel politikanızdaki
/public
öğeleri. İşte bu sebeple/public
bölümüne eklenebilecek politika türü, kısıtlanmış durumda. Platformun dışa aktarılan politika API'si olarak şunları göz önünde bulundurun:/system
ve Google Analytics 4 arasında/vendor
buraya ait. - system/sepolicy/private olarak ayarlayın. Aşağıdaki işlemler için gerekli politikaları içerir: çalışmasını sağlar. Ancak hangi tedarikçi firma imajı politikasının hiç kimsenin bilmediği.
- system/sepolicy/vendor. Aşağıdaki bileşenlere ilişkin politikayı içerir:
/vendor
platformuna gidin ancak temel platform ağacında ( cihaza özel dizinlere bakın). Bu, derleme sisteminin cihazlar ve genel bileşenler arasındaki ayrım; Kavramsal olarak bu aşağıda açıklanan cihaza özel politikanın bir bölümüdür. - device/manufacturer/device-name/sepolicy. Cihaza özel politikayı kapsar. Ayrıca, politikası (Android 8.0 ve sonraki sürümlerde bileşenlere ilişkin politikaya karşılık gelir) gerekir.
Android 11 ve sonraki sürümlerde system_ext ve ürün bölümleri de şunları içerebilir: bölüme özel politikalar. system_ext ve ürün politikaları da herkese açık ve gizlidir. Satıcılar, system_ext ile ürünün herkese açık politikaları (ör. sistem politikası)
SYSTEM_EXT_PUBLIC_SEPOLICY_DIRS
Şunun için dışa aktarılan politikayı içerir: Google'a izin verilmez. system_ext bölümüne yüklendi.SYSTEM_EXT_PRIVATE_SEPOLICY_DIRS
Gerekli politika içeriyor system_ext görüntüsünün çalışması için çalışır, ancak hangi tedarikçi firma hiçbir şeye sahip olmaması gerekir. system_ext bölümüne yüklendi.PRODUCT_PUBLIC_SEPOLICY_DIRS
Şunun için dışa aktarılan politikayı içerir: Google'a izin verilmez. Ürün bölümüne yüklendi.PRODUCT_PRIVATE_SEPOLICY_DIRS
Aşağıdaki işlemler için gerekli politikaları içerir: ancak ilgili tedarikçi firma imaj politikasını hiçbir şey bilmezsiniz. Ürün bölümüne yüklendi.
Desteklenen politika senaryoları
Android 8.0 ve sonraki sürümlerin yüklü olduğu cihazlarda tedarikçi firma imajı çalışmalıdır Google tarafından sağlanan OEM sistem görüntüsü ve referans AOSP sistem görüntüsüyle (ve bu referans görüntüde CTS'yi iletin). Bu şartlar, temiz bir ayırdığımızı unutmayın. Bu tür cihazlar bazı senaryoları izleyebilirsiniz.
yalnızca tedarikçi firma resmi uzantıları
Örnek: vndservicemanager
alanına yeni bir hizmet ekleme
tedarikçi firma imajından alınan işlemleri destekleyen tedarikçi firma imajından
Önceki Android sürümleriyle kullanıma sunulan cihazlarda olduğu gibi,
içinde özelleştirme
device/manufacturer/device-name/sepolicy
Tedarikçi bileşenlerinin diğer tedarikçilerle (yalnızca) etkileşim şeklini düzenleyen yeni politika
bileşenler yalnızca şurada bulunan türleri içermelidir:
device/manufacturer/device-name/sepolicy
değerleridir.
Buraya yazılan politika, tedarikçi firmadaki kodun çalışmasını sağlar ve bir parçası olarak güncellenmez.
sadece çerçeve için geçerli olur ve cihazdaki birleştirilmiş politikada yer alır.
Bu işlemi, referans AOSP sistem görüntüsüyle yapabilirsiniz.
tedarikçi-görüntü desteğinin AOSP ile
Örnek: Yeni bir süreç ekleme (kayıtlı işlem:
hwservicemanager
örneği)
AOSP tarafından tanımlanan HAL.
Önceki Android sürümleriyle kullanıma sunulan cihazlarda olduğu gibi,
cihaza özel özelleştirme
device/manufacturer/device-name/sepolicy
system/sepolicy/public/
kapsamında dışa aktarılan politika kullanılabilir
ve tedarikçi politikası kapsamında gönderilir. Kaynaktaki türler ve özellikler
kamu politikası, yeni kurallarla etkileşimleri belirten yeni kurallarda kullanılabilir.
tedarikçi firmaya özel bit değerleri (sağlanan neverallow
değerine tabidir)
kısıtlamalar. Yalnızca tedarikçi firmaya özel durumda olduğu gibi buradaki yeni politika güncellenmez
yalnızca çerçeveye yönelik bir OTA kapsamında yer alacak ve
referans AOSP sistem görüntüsüne sahip olmalıdır.
yalnızca sistem görüntüsü uzantıları
Örnek: Yeni bir hizmet ekleme (servicemanager'a kayıtlı) Yalnızca sistem görüntüsündeki diğer işlemler tarafından erişilen bir dosya.
Bu politikayı system/sepolicy/private
politikasına ekleyin. Ekstra ekleyebilirsiniz
iş ortağı sistem görüntüsünde işlevselliği etkinleştirecek işlemler veya nesneler (örneğin,
Bu yeni parçaların, tedarikçi imajındaki yeni bileşenlerle
(özellikle, bu tür süreçler veya nesneler)
tedarikçi imajı). system/sepolicy/public
tarafından dışa aktarılan politika (yeni)
Tıpkı satıcı-resim uzantılarında olduğu gibi burada da kullanılabilir. Bu politika
bir kısmıdır ve yalnızca çerçevesel bir OTA'da güncellenebilir ancak
referans AOSP sistem görüntüsü kullanılırken mevcut değil.
sağlayıcı-resmi Genişletilmiş AOSP bileşenleri sunan uzantılar
Örnek: Genişletilmiş istemciler tarafından kullanılacak, AOSP olmayan yeni bir HAL AOSP sistem görüntüsünde de (genişletilmiş system_server gibi) bulunmalıdır.
Sistem ve tedarikçi arasındaki etkileşim politikası,
device/manufacturer/device-name/sepolicy
.
dizininin gönderimini kapsar.
Bu, tedarikçi imajı desteğini çalışmaya eklemeyle ilgili yukarıdaki senaryoya benzer.
referans AOSP görüntüsüyle karşılaştırıldığında, değiştirilen AOSP bileşenleri de
sistemin geri kalanıyla düzgün bir şekilde çalışması için ek politika gerektirir
bölüm (herkese açık AOSP türüne sahip oldukları sürece sorun yoktur)
etiketler).
Herkese açık AOSP bileşenlerinin salt sistem görüntüsüyle etkileşimine yönelik politika
uzantılar system/sepolicy/private
olmalıdır.
sistem-görüntü Yalnızca AOSP arayüzlerine erişen uzantılar
Örnek: AOSP harici yeni bir sistem işlemi, AOSP'nin temel aldığı bir ölçümdür.
Bu, system-image-only öğesine benzer
uzantı örneği, yalnızca yeni sistem bileşenlerinin
system/vendor
arayüzü. Yeni sistem bileşenine yönelik politika,
system/sepolicy/private
gidin. Bu, olduğu sürece kabul edilebilir.
AOSP tarafından
system/sepolicy/public
(ör. bir web sitesi için gereken türler ve özellikler
özelliklere bakın). Politika, cihaza özel içeriklere dahil edilebilse de
bu politika uyarınca, diğer system/sepolicy/private
yalnızca çerçeveye yönelik bir sonucun (politikaları etkileyen herhangi bir şekilde)
güncelleyin. Bu politika yalnızca çerçeve için geçerli bir OTA'da değiştirilebilir ancak
bir AOSP sistem görüntüsü kullanırken mevcut (yeni sistem
bileşenine de girebilirsiniz.
sağlayıcı-resmi Yeni sistem bileşenleri sunan uzantılar
Örnek: Bir istemci işlemi tarafından kullanılmak üzere yeni, AOSP olmayan bir HAL ekleme AOSP analogu olmadan (ve dolayısıyla kendi alan adını gerektirir).
AOSP uzantılarına benzerdir
Örneğin, sistem ve tedarikçi arasındaki etkileşimlere ilişkin politika
device/manufacturer/device-name/sepolicy
satıcı bölümünde gönderilen dizin
(sistem politikasının tedarikçi firmaya özgü ayrıntılar hakkında bilgi sahibi olmadığından emin olmak için). Siz
politikanın kapsamını genişleten yeni
system/sepolicy/public
; ek olarak yalnızca
mevcut AOSP politikası, yani AOSP genel politikasını kaldırmayın. Yeni herkese açık
türler daha sonra system/sepolicy/private
içinde ve içinde politika için kullanılabilir.
device/manufacturer/device-name/sepolicy
.
system/sepolicy/public
işlevine yapılan her eklemenin
tutarlı bir şekilde takip edilmesi gereken yeni bir uyumluluk
diğer kısıtlamalara tabi olan bir dosya seçin. Yalnızca yeni türler ve
ilgili izin verme kuralları system/sepolicy/public
bölümüne eklenebilir;
özellikleri ve diğer politika ifadeleri desteklenmez. Ayrıca, yeni
herkese açık türler, tablodaki nesneleri doğrudan etiketlemek için kullanılamaz.
/vendor
politikası.
Desteklenmeyen politika senaryoları
Android 8.0 ve sonraki sürümlerle başlatılan cihazlarda aşağıdaki özellikler desteklenmez ve örneklerine göz atacağız.
Ek bilgiler sistem imajı için izin gereken uzantılar yeni tedarikçi firma-imajı bileşenlerine yalnızca çerçeve OTA'dan sonra
Örnek: AOSP harici yeni bir sistem işlemidir. alan adının bir sonraki Android sürümünde eklenmiş olup yeni, AOSP olmayan HAL'dir.
Şuna benzer:
yeni
(AOSP olmayan) sistem ve tedarikçi bileşenleri etkileşimi (yeni sistem hariç)
bir
OTA'yı kullanabilirsiniz. Yeni tür, politikaya
system/sepolicy/public
, mevcut tedarikçi firma politikası hakkında bilgi yok
çünkü yalnızca Android 8.0 sisteminin genel politikasını izlemesi gerekir.
AOSP bu durumu, tedarikçi firma tarafından sağlanan kaynakları bir özellik (ör.
hal_foo
özelliği vardır) ancak özellik iş ortağı uzantıları
system/sepolicy/public
üzerinde desteklendiğinden bu yöntem
satıcı politikası. Erişim, daha önce var olan bir herkese açık tür tarafından sağlanmalıdır.
Örnek: Sistem işleminde yapılan bir değişiklik (AOSP veya AOSP olmayan) yeni, AOSP olmayan tedarikçi bileşeniyle olan etkileşime girme biçimini değiştirmelidir.
Sistem görüntüsüyle ilgili politika, belirli bilgiler olmadan yazılmalıdır.
tedarikçi özelleştirmeleri gibi. AOSP'deki belirli arayüzlerle ilgili politika bu nedenle
sistem/sepolitika/herkese açık özellikler aracılığıyla açıklanır. Böylece,
bu özellikleri kullanacak gelecekteki sistem politikasına kaydolmalıdır. Ancak,
system/sepolicy/public
özelliğinde özellik uzantıları
desteklenir, yani sistem bileşenlerinin nasıl etkileşimde bulunacağını belirten tüm politikalar
yeni tedarikçi bileşenleriyle (ve özellikler tarafından işlenmeyen)
AOSP system/sepolicy/public
) içinde olmalıdır
device/manufacturer/device-name/sepolicy
.
Bu, sistem türlerinin değiştirilemeyeceği anlamına gelir.
Yalnızca çerçeve OTA'nın bir parçası olarak tedarikçi türlerine erişim izni verildi.