Android işletim sistemi ifconfig
, ip
ve ip6tables
gibi standart Linux ağ oluşturma yardımcı programlarını içerir. Bu yardımcı programlar sistem görüntüsünde bulunur ve tüm Linux ağ yığınının yapılandırılmasına olanak tanır. Android 7.x ve önceki sürümleri çalıştıran cihazlarda, satıcı kodunun bu ikili dosyaları doğrudan çağırmasına izin verilir; bu da aşağıdaki sorunları ortaya çıkarır:
- Ağ yardımcı programları sistem görüntüsünde güncellendiğinden kararlı bir uygulama sağlamazlar.
- Ağ araçlarının kapsamı o kadar geniştir ki, öngörülebilir davranışı garanti ederken sistem imajını geliştirmek zordur.
Android 8.0 ve üstünü çalıştıran cihazlarda, sistem bölümü bir güncelleme alırken satıcı bölümü aynı kalır. Bunu başarmak için Android 8.0, satıcı ve sistem imajının birbirine bağımlılığını bilinen iyi bir sette tutmak için SELinux kısıtlamalarını kullanırken aynı zamanda kararlı, versiyonlu bir arayüz tanımlama yeteneği sağlar.
Satıcılar, Linux ağ yığınını yapılandırmak için platform tarafından sağlanan ağ yapılandırma yardımcı programlarını kullanabilir, ancak bu yardımcı programlar henüz bir HIDL arabirim sarmalayıcısı içermemektedir. Böyle bir arayüzü tanımlamak için Android 8.0, netutils-wrapper-1.0
aracını içerir.
Netutils sarmalayıcı
netutils
sarmalayıcı yardımcı programı, Linux ağ yığını yapılandırmasının sistem bölümü güncellemelerinden etkilenmeyen bir alt kümesini sağlar. Android 8.0, sarmalayıcıların 1.0 sürümünü içerir; bu, /system/bin
konumundaki sistem bölümünde kurulu sarılmış yardımcı programlarla aynı argümanları aşağıdaki gibi aktarmanıza olanak tanır:
u:object_r:system_file:s0 /system/bin/ip-wrapper-1.0 -> netutils-wrapper-1.0 u:object_r:system_file:s0 /system/bin/ip6tables-wrapper-1.0 -> netutils-wrapper-1.0 u:object_r:system_file:s0 /system/bin/iptables-wrapper-1.0 -> netutils-wrapper-1.0 u:object_r:system_file:s0 /system/bin/ndc-wrapper-1.0 -> netutils-wrapper-1.0 u:object_r:netutils_wrapper_exec:s0 /system/bin/netutils-wrapper-1.0 u:object_r:system_file:s0 /system/bin/tc-wrapper-1.0 -> netutils-wrapper-1.0
Sembolik bağlantılar, netutils
sarmalayıcısı tarafından sarılmış ağ oluşturma yardımcı programlarını gösterir; bunlar arasında şunlar bulunur:
-
ip
-
iptables
-
ip6tables
-
ndc
-
tc
Bu yardımcı programları Android 8.0 ve sonraki sürümlerde kullanmak için satıcı uygulamalarının aşağıdaki kurallara uyması gerekir:
- Satıcı işlemleri
/system/bin/netutils-wrapper-1.0
doğrudan yürütmemelidir; bunu yapmaya çalışmak hatayla sonuçlanacaktır. -
netutils-wrapper-1.0
tarafından sarılmış tüm yardımcı programlar kendi sembolik bağlantıları kullanılarak başlatılmalıdır. Örneğin, bunu daha önce yapan satıcı kodunu (/system/bin/ip <FOO> <BAR>
)/system/bin/ip-wrapper-1.0 <FOO> <BAR>
olarak değiştirin. - Platform SELinux politikasında sarmalayıcıların etki alanı geçişi olmadan çalıştırılması yasaktır. Bu kural değiştirilmemelidir ve Android Uyumluluk Test Paketi'nde (CTS) test edilmiştir.
- Yardımcı programların (örneğin,
/system/bin/ip <FOO> <BAR>
) satıcı süreçlerinden doğrudan çalıştırılması da platform SELinux politikalarında yasaktır. Bu kural değiştirilmemelidir ve CTS'de test edilmiştir. - Bir sarmalayıcı başlatması gereken herhangi bir satıcı etki alanı (işlem), SELinux politikasına aşağıdaki etki alanı geçiş kuralını eklemelidir:
domain_auto_trans( VENDOR-DOMAIN-NAME , netutils_wrapper_exec, netutils_wrapper)
.
Netutils sarma filtreleri
Sarılmış yardımcı programlar, Linux ağ yığınının hemen hemen her yönünü yapılandırmak için kullanılabilir. Bununla birlikte, kararlı bir arayüz sağlamanın ve sistem bölümündeki güncellemelere izin vermenin mümkün olduğundan emin olmak için, yalnızca belirli komut satırı argümanı kombinasyonlarına izin verilir; diğer komutlar reddedilecektir.
Satıcı arayüzleri ve zincirleri
Paketleyicinin satıcı arayüzleri konsepti vardır. Bunlar, hücresel veri arayüzleri gibi genellikle satıcı kodu tarafından yönetilen arayüzlerdir. Tipik olarak diğer arayüz türleri (Wi-Fi gibi) HAL'ler ve çerçeve tarafından yönetilir. Sarmalayıcı, satıcı arayüzlerini ada göre tanır (normal bir ifade kullanarak) ve satıcı kodunun bunlar üzerinde birçok işlem gerçekleştirmesine olanak tanır. Şu anda satıcı arayüzleri şunlardır:
- Adları "oem" ile biten ve ardından
oem0
veyar_oem1234
gibi bir sayı gelen arayüzler. - Mevcut SOC ve OEM uygulamaları tarafından kullanılan
rmnet_data[0-9]
gibi arayüzler.
Genellikle çerçeve tarafından yönetilen arayüzlerin adları ( wlan0
gibi) hiçbir zaman satıcı arayüzleri değildir.
Ambalaj kağıdı da benzer bir satıcı zinciri konseptine sahiptir. Bunlar iptables
komutlarında kullanılır ve aynı zamanda isimle de tanınır. Şu anda satıcı zincirleri:
-
oem_
ile başlayın. - Mevcut SOC ve OEM uygulamaları tarafından kullanılır; örneğin
nm_
veyaqcom_
ile başlayan zincirler.
İzin verilen komutlar
Şu anda izin verilen komutlar aşağıda listelenmiştir. Kısıtlamalar, yürütülen komut satırlarında bir dizi normal ifade aracılığıyla uygulanır. Ayrıntılar için system/netd/netutils_wrappers/NetUtilsWrapper-1.0.cpp
adresine bakın.
ip
ip
komutu IP adreslerini, yönlendirmeyi, IPsec şifrelemesini ve bir dizi başka ağ parametresini yapılandırmak için kullanılır. Sarmalayıcı aşağıdaki komutlara izin verir:
- Satıcı tarafından yönetilen arayüzlere IP adresleri ekleyin ve kaldırın.
- IPsec şifrelemesini yapılandırın.
iptables/ip6tables
iptables
ve ip6tables
komutları güvenlik duvarı, paket yönetimi, NAT ve diğer paket başına işlemleri yapılandırmak için kullanılır. Sarmalayıcı aşağıdaki komutlara izin verir:
- Satıcı zincirlerini ekleyin ve silin.
- Bir satıcı arayüzüne giren (
-i
) veya çıkan (-o
) paketlere atıfta bulunan herhangi bir zincire kurallar ekleyin ve silin. - Başka bir zincirin herhangi bir noktasından bir satıcı zincirine atlayın.
ndc
ndc
Android'de çoğu ağ yapılandırmasını gerçekleştiren netd
arka plan programıyla iletişim kurmak için kullanılır. Sarmalayıcı aşağıdaki komutlara izin verir:
- OEM ağları (
oemXX
) oluşturun ve yok edin. - OEM ağlarına satıcı tarafından yönetilen arayüzler ekleyin.
- OEM ağlarına rota ekleyin.
- IP iletmeyi genel olarak ve satıcı arayüzlerinde etkinleştirin veya devre dışı bırakın.
TC
tc
komutu, satıcı arayüzlerinde trafik sıralamasını ve şekillendirmeyi yapılandırmak için kullanılır.