Android işletim sistemi, ifconfig
, ip
ve ip6tables
gibi standart Linux ağ yardımcı programlarını içerir.
Bu yardımcı programlar sistem görüntüsünde bulunur ve Linux ağ yığınının tamamının yapılandırılmasını sağlar. Android 7.x ve önceki sürümleri çalıştıran cihazlarda, tedarikçi kodunun bu ikili dosyaları doğrudan çağırmasına izin verilir. Bu durum aşağıdaki sorunları ortaya çıkarır:
- Ağ yardımcı programları sistem görüntüsünde güncellendiği için kararlı bir uygulama sağlamaz.
- Ağ yardımcı programlarının kapsamı o kadar geniştir ki, tahmin edilebilir davranışı garanti ederken sistem görüntüsünü geliştirmek zordur.
Android 8.0 ve sonraki sürümleri çalıştıran cihazlarda, tedarikçi bölümü aynı kalır ancak sistem bölümü güncellenir. Android 8.0, bu amaca ulaşmak için kararlı ve sürümlü bir arayüz tanımlama olanağı sunarken tedarikçi ve sistem resminin birbirine bağımlılığını bilinen iyi bir grupta tutmak için SELinux kısıtlamalarını da kullanır.
Tedarikçiler, 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 HIDL arayüz sarmalayıcısı içermiyor. Android 8.0, bu tür bir arayüz tanımlamak için netutils-wrapper-1.0
aracını içerir.
Netutils sarmalayıcısı
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 sürüm, /system/bin
adresindeki sistem bölümüne yüklenen sarmalanmış yardımcı programlarla aynı bağımsız değişkenleri aşağıdaki gibi iletmenize 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
Simge bağlantıları, netutils
sarmalayıcısı tarafından sarmalanmış ağ yardımcı programlarını gösterir. Bu programlar şunlardır:
ip
iptables
ip6tables
ndc
tc
Bu yardımcı programları Android 8.0 ve sonraki sürümlerde kullanmak için tedarikçi firma uygulamalarının aşağıdaki kurallara uyması gerekir:
- Tedarikçi firma süreçleri doğrudan
/system/bin/netutils-wrapper-1.0
çalıştırılmamalıdır. Bunu yapmaya çalışmak hatayla sonuçlanır. netutils-wrapper-1.0
tarafından sarmalanmış tüm yardımcı programlar, sembolik bağlantıları kullanılarak başlatılmalıdır. Örneğin, daha önce bunu yapan tedarikçi 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 alan geçişi olmadan yürütülmesi yasaktır. Bu kural değiştirilmemelidir ve Android Uyumluluk Test Paketi (CTS)'nde test edilir.
- Yardımcı programları doğrudan çalıştırma (ör.
/system/bin/ip <FOO> <BAR>
) platform SELinux politikalarında da yasaktır. Bu kural değiştirilmemelidir ve CTS'de test edilir. - Sarmalayıcı başlatması gereken tüm tedarikçi alan adları (işlemler), SELinux politikasına aşağıdaki alan geçiş kuralını eklemelidir:
domain_auto_trans(VENDOR-DOMAIN-NAME, netutils_wrapper_exec, netutils_wrapper)
.
Netutils sarmalayıcı filtreleri
Sarmalanmış yardımcı programlar, Linux ağ yığınının neredeyse her yönünü yapılandırmak için kullanılabilir. Ancak, kararlı bir arayüzün korunabilmesi ve sistem bölümünde güncellemelere izin verilmesi için yalnızca belirli komut satırı bağımsız değişkeni kombinasyonlarına izin verilir. Diğer komutlar reddedilir.
Tedarikçi arayüzleri ve zincirleri
Sarmalayıcıda tedarikçi arayüzü kavramı vardır. Bunlar, genellikle hücresel veri arayüzleri gibi tedarikçi kodu tarafından yönetilen arayüzlerdir. Diğer arayüz türleri (ör. kablosuz ağ) genellikle HAL'ler ve çerçeve tarafından yönetilir. Sarmalayıcı, tedarikçi arayüzlerini ada göre tanır (normal ifade kullanarak) ve tedarikçi kodunun bu arayüzlerde birçok işlem gerçekleştirmesine olanak tanır. Şu anda tedarikçi arayüzleri:
- Adları "oem" ile biten ve ardından bir sayı (ör.
oem0
veyar_oem1234
) gelen arayüzler. - Mevcut SOC ve OEM uygulamaları tarafından kullanılan arayüzler (ör.
rmnet_data[0-9]
).
Genellikle çerçeve tarafından yönetilen arayüzlerin adları (ör. wlan0
) hiçbir zaman tedarikçi arayüzü değildir.
Sarmalayıcı, tedarikçi firma zincirlerine benzer bir konsepte sahiptir. Bunlar iptables
komutlarında kullanılır ve adlarıyla da tanınırlar. Şu anda tedarikçi zincirleri:
oem_
ile başlayın.- Mevcut SOC ve OEM uygulamaları tarafından kullanılır (ör.
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ılı bilgi için system/netd/netutils_wrappers/NetUtilsWrapper-1.0.cpp
başlıklı makaleyi inceleyin.
ip
ip
komutu, IP adreslerini, yönlendirmeyi, IPsec şifrelemeyi ve diğer bazı ağ parametrelerini yapılandırmak için kullanılır. Sarmalayıcı aşağıdaki komutlara izin verir:
- Tedarikçi firma tarafından yönetilen arayüzlere IP adresi ekleme ve kaldırma.
- IPsec şifrelemesini yapılandırın.
iptables ve ip6tables
iptables
ve ip6tables
komutları, güvenlik duvarı, paket bozma, NAT ve paket başına diğer işlemleri yapılandırmak için kullanılır.
Sarmalayıcı aşağıdaki komutlara izin verir:
- Tedarikçi zincirleri ekleme ve silme.
- Tedarikçi arayüzüne giren (
-i
) veya arayüzden çıkan (-o
) paketleri belirten herhangi bir zincire kural ekleyin ve silin. - Başka bir zincirin herhangi bir noktasından bir tedarikçi zincirine atlayabilirsiniz.
ndc
ndc
, Android'de çoğu ağ yapılandırmasını gerçekleştiren netd
daemon'uyla iletişim kurmak için kullanılır. Sarmalayıcı aşağıdaki komutlara izin verir:
- OEM ağları oluşturun ve kaldırın (
oemXX
). - OEM ağlarına tedarikçi firma tarafından yönetilen arayüzler ekleme
- OEM ağlarına rota ekleme.
- IP yönlendirmeyi dünya genelinde ve tedarikçi arayüzlerinde etkinleştirin veya devre dışı bırakın.
tc
tc
komutu, tedarikçi arayüzlerinde trafik sırasını ve şekillendirmeyi yapılandırmak için kullanılır.