Soru eski olmasına rağmen, Cevaplanmamış (etiketlerim) soruların üstünde görünmeye devam ediyor . Sanırım buna cevap vermeliyim :)
AOSP'UN KAPASİTELERE DESTEĞİ:
Soru özellikle Google cihazları hakkında, hiç Google cihazı kullanmadım. Ancak kesin olarak söyleyebileceğim, Android 1.6 kadar düşük çalışan cihazların çoğunda (hepsi değilse de) Linux (işlem) özelliklerinin etkinleştirilmiş olması gerektiğidir. AOSP'nin her iki birincil bileşeninde init
ve system_server
her ikisinde de referans bulunmaktadır . Android 4.2'de, örneğin, installd
- başka bir temel bileşen - bırakılan yeteneklerle çalışmak için yapıldı.
Dosya sistemi yetenekleri önemli biri idi Android 4.3 Güvenlik Geliştirmeleri kaldırıldı set-uid
/ set-gid
gibi ikililer run-as
üzerlerinde dosya yetenekleri ayarı. Bu , Android'in köklendirme yolculuğunda devrim niteliğinde değişikliklere neden oldu .
Dosya yeteneklerinin kullanılmasını engelleyen Android 8'de Ortam özellikleri desteği eklendi :
Dosya yetenekleri, bir dosya riski olan bir dosyayı yürüten herhangi bir işlem bu yetenekleri kazanabileceğinden, bir güvenlik riski oluşturur.
Birçok init
hizmet bunlara bağlıdır, örneğin storaged
kendi hizmetim sshd
ve dnscrypt-proxy
hizmetlerim.
KERNEL'İN KAPASİTE DESTEĞİ:
, Çekirdek kısmına gelince olmadan çekirdek yapı yetenekleri isteğe bağlı değildir:
2.5.27 çekirdeğinden 2.6.26 çekirdeğine, yetenekler isteğe bağlı bir çekirdek bileşeniydi ve CONFIG_SECURITY_CAPABILITIES çekirdek yapılandırma seçeneği ile etkinleştirilebilir / devre dışı bırakılabilir .
Ve:
Linux 2.6.33 öncesi çekirdeklerde, dosya özellikleri CONFIG_SECURITY_FILE_CAPABILITIES seçeneği ile yapılandırılabilen isteğe bağlı bir özellikti . Linux 2.6.33'ten bu yana, yapılandırma seçeneği kaldırılmıştır ve dosya özellikleri her zaman çekirdeğin bir parçasıdır.
Android depolarındaki en eski ortak çekirdek sürümü 2.6.39'dur ve dosya özellikleri için destek içerir .
Çekirdek tarafındaki dosya sistemi yetenekleri için destek bazı OEM'lerden ertelenmiş olmalı, ancak geçiş yapmak zorundaydı, aksi takdirde işlevler bozulacaktı. Örneğin surfaceflinger
(Android'in yüzey bestecisi ), Android 7.1'den beri dosya özellikleri olmadan çalışmaz.
Anahat Linux 4.3 Ortam (süreç) yetenekleri için Sep'15 in yamalı çekirdek backported Android'e mutlaka çekirdeğin bir parçası olan Böylece 2016 yılında 3.18 ve 4.1 çekirdek.
SONUÇ:
Linux dağıtımlarında, çok az program Linux yeteneklerinden yararlanır. Orada olmasına rağmen pam_cap
çoğunlukla, (veya tüm?) Dağıtımlar hala kullanmak set-uid
üzerine su
, sudo
, ping
, mount
, passwd
vb. Ancak Android yetenekleri çerçeve ve çekirdek hizmetlere derinlemesine entegre edilmiştir. Bunları kaldırmak için AOSP ve çekirdek kaynağında yüzlerce satırın düzenlenmesi gerekebilir. Bir OEM'in (özellikle AOSP'yi geliştiren ve Android için Linux çekirdeğini değiştiren Google), Android çekirdeğinde hazır olduğunda bu ücretsiz güvenlik özelliğini kullanmaması mantıklı değildir . İşletim sistemi ile ilgili saf bir özelliktir, ekstra donanım desteği talep etmez. Bu nedenle, herhangi bir üreticinin herhangi bir telefonunun desteklenen yetenekleri olmalıdır.
SORULAR:
çekirdek ikilisini değiştirmeden yürütülebilir dosyalarda yetenekleri ayarlayabilir miyim?
Evet, olmalısın.
Gerekli olan şey, büyük harfleri ayarlamak için araçlar ...
Ben kullanıyorum capsh
, getcap
, setcap
, getpcaps
gelen libcap
ve netcap
, pscap
gelen libcap-ng
herhangi bir sorun olmadan. Ancak Ortam yeteneklerini tercih ediyorum, bunların yapılandırılması kolay ve dosya özellikleri durumunda Genişletilmiş Özellikler gibi herhangi bir dosya sistemi özelliğine bağlı değil . Ayrıca kullanabilirsiniz listxattr
, getxattr
, setxattr
ve removexattr
gelen araçları xattr_syscall_wrapper
işlemek için security.capability
veya başka bir xattr doğrudan.
Yorumunuzdan:
/system/bin/ping
Komutun setuid
gerçek Samsung cihazımda olmadığını fark ettim,CAP_NET_RAW
Android'in pinginde ne var set-uid
ne de CAP_NET_RAW
. RAW olmayan özel bir soket IPPROTO_ICMP
oluşturur - aksine IPPROTO_RAW
- herhangi bir ayrıcalık gerektirmez.
DAHA FAZLA REFERANSLAR:
Yukarıda verilen 10'dan fazla referansa ek olarak, AOSP kodunun Linux yeteneklerini destekleyen ve kullanan birkaç diğer kısmı aşağıda verilmiştir:
- Çekirdek bileşenleri: Bionic
libc
, init
, trusty
(OS)
- Dış bileşenler:
libcap
,libcap-ng
- Cinler / hizmetler:
zygote
(çatallı uygulamalar ve system_server
) hostapd
, wpa_supplicant
, dnsmasq
, logd
, netd
( NetLink
müdür, özel DNS) debuggerd
(test), sdcard
cin, performanced
, incidentd
, mtpd
, traced_probes
(perfetto), racoon
(IPSec), wificond
dahil HAL cinleri bir dizi rild
.
- Yürütülebilir oluşturma:
reboot
(init) dumpstate
, tcpdump
, strace
, iputils
( ping
, traceroute
vs.)
- Minijail: Yetenekler etrafında dönen özel bir sanal alan aracı ve kütüphane.
adbd
ayrıcalıkları bırakmak için bu kitaplığı kullanır.
- SELinux ,
capability
alanlara yetenek vermek / reddetmek için sınıfı kullanır .
Android'in Linux yeteneklerine büyük ölçüde bağlı olduğu, az kullanılan bir özellik olmadığı sonucuna varıyor .
İLİŞKİLİ: