Her şeyden önce, "Bunu şok edici bir şekilde zor buldum" ifadenize tamamen katıldığımı itiraf etmeliyim . Google, Android'i ileri düzey kullanıcılar için değil, yalnızca tüketici açısından tasarlamıştır. Sonuç olarak, en son Facebook uygulamasını kullanmak veya Candy Crush ile oynamak dışında bir şey yapmak istediğinizde, kendinizi geliştirici benzeri bir bilginin değişmesi gerektiğinde 2000'lerin başında Linux bölgesinde çok hızlı bir şekilde bulacaksınız. basit ayarlar ne olmalı. Android sistemi daha olgunlaştıkça durumun hızla gelişeceğine inanıyorum, ancak şimdilik sahip olduklarımızla ilgili olmalıyız ...
Söylediğiniz gibi, kendi SELinux araç setinizi derlemenizin iki nedeni vardır:
- Sistem tarafından sağlanan araç takımı genellikle bir sürümdür. Android'in SELinux ilkesi DB sürüm 30'a dayanırken, mevcut Linux kutuları genellikle yalnızca 29'a kadar olan sürümü işler.
- Daha yeni olsa bile, yardımcı olmayacaktır, aslında yukarı akış kodundan SELinux oluşturmak (en azından yukarı yönlü önerileri takip eden Fedora makinelerinde kolayca yapılır) sistemin politika DB sürümünü 30 ele almasına etkili bir şekilde izin verir, ancak Android'in SELinux'u yoğun şekilde değiştirildi ( Google dokümantasyonu birkaç değişikliği vurgulamaktadır), bu nedenle Android'in SELinux'unu işlemeye çalışmak sözdizimi ve ayrıştırma hataları nedeniyle başarısız oluyor.
Bu nedenle, Android'in SELinux analiz görevine devam etmek için ellerimizi kirlere ... mümkün olan en temiz şekilde koymamız gerekecek:
- Önce aklı başında bir ortam kuracağız,
- Bu yapıldıktan sonra Android'in SELinux kütüphanelerini ve ilk araçlarını derleyeceğiz,
- Üstelik SELinux araçları üreteceğiz,
- Birkaç yardımcı program ekleyerek bitireceğiz.
Uygun bir ortam oluşturun
Çevre özellikleri
En temiz önerilen, belki de sadece güvenilir bir şekilde çalışan bir yol, Android çalışmanıza bir ortam ayırmaktır:
Sanal bir makine gayet iyi (en iyi seçenek değilse). Telefonunuzu USB üzerinden konuk sisteme bağlamanız gerekeceğinden, bir VMware kullanmayı tercih edin. Ücretsiz alternatif Qemu bu görevi çok iyi yerine getirmiyor gibi görünüyor. Diğer virualizasyon yazılımlarını denemedim.
64 bitlik bir sistem olması gerekir, aksi takdirde tamsayı yanlış boyutta olduğu için kod derlenmez.
Edilir kuvvetle bir Ubuntu sistemi kullanmak için, muhtemelen zorunlu önerilir. XFCE'nin daha hafif masaüstü ortamını tercih ederseniz bunun yerine Xubuntu'yu kullanmaktan çekinmeyin, bu sistemin çekirdeğini ve mevcut paketini değiştirmez ve Android ile ilgili çalışmanız üzerinde bir etkisi olmaz (bu prosedürde Ubuntu hakkında söylediklerim Xubuntu için de geçerlidir). Android'in SELinux kaynak ağacında, Fedora'nın kullanılmasını öneren bazı ReadMe dosyalarını bulabilirsiniz, bu dosyalar akış yukarı NSA'nın SELinux projesinden miras alınır ve içerikleri Google'ın Android'iyle eşleşmez.
Kullanılacak Unbuntu'nun tam sürümü, oluşturmak istediğiniz Android sürümüne bağlıdır. Android 6.0 için Ubuntu 14.04 (Trusty) önerilir. Kontrol Google gereksinimleri sayfasına Daha fazla bilgi için.
Çok fazla disk alanına ihtiyacınız olacak (yalnızca SELinux ile ilgili bir araştırma planlıyorsanız en az 50 GB, eksiksiz bir Android oluşturmayı planlıyorsanız en az 100 GB). CPU ve bellek daha az ilgili, sadece tam bir yapı için zamanı etkiler ve SELinux ile ilgili görevler için gerçek bir etkisi olmaz.
Ubuntu kullanmanın iki ana avantajı vardır:
Önerilen sistemi kullanarak, iyi bilinen ve iyi test edilmiş bir ortamda çalışıyorsunuz: sistem kütüphaneleri, araçlar ve paketler proje tarafından beklenen sürümde ve konumda.
Daha özel olarak şu anki durumumuzda: Ubuntu'nun kendisi SELinux alternatifi olan AppArmor'a güveniyor, SELinux kullanmıyor. İyi haber şu ki, sistem güvenilirliğini değiştirme riski olmadan Android'in SELinux araçlarını ve ikili dosyalarını sistem genelinde kurabileceksiniz.
Ortam kurulum prosedürü
Tam teşekküllü bir canlı DVD'den başlayarak Ubuntu'yu geleneksel yolla yükleyebilirsiniz, ancak daha hızlı bir alternatif, bir netboot kurulumu (metin modu kurulumu) kullanmak ve sonunda tercih ettiğiniz masaüstü ortamını seçmektir. Bunu yaptığınızda, ilk önce kullanılmayan paketleri yüklemek yerine güncel paket sürümlerini doğrudan yükleyip ardından ilk önyüklemede 389 bekleyen güncellemenin uygulanmasını isteyerek ilk güncelleme zamanından tasarruf edersiniz.
Ubuntu / Xubuntu 14.04 (aynı ISO) netboot yükleyicisi için ISO'ya buradan ulaşabilirsiniz .
VMware'in zahmetli "Kolay Kurulum" özelliğini atlamak için, "İşletim sistemini daha sonra kuracağım" seçeneğini seçerek başlamak iyi bir alışkanlıktır .
Linux'u ve ardından konuk işletim sistemi olarak Ubuntu 64 bit'i seçtiğinizden emin olun .
Sanal Makinenin aşağıdaki kaynaklara ihtiyacı olacaktır:
- Zorunlu: disk alanı olmalıdır en azından 40GB (20 GB varsayılan değil yeterli, kaynak kodu bile bundan daha fazla yer alır), yüksek önerilir. Tam bir yapı minimum 100 GB disk gerektirir, bu genellikle aldığım değerdir. Bu ayarın yalnızca bir maksimum sınır olduğunu unutmayın: VM tarafından alınan gerçek boyut, konukların istekleriyle dinamik olarak büyür.
- Fakültatif: RAM'i 1024'ten en az 2048 veya daha yükseğe artırın (ana makine kapasitenize bağlı olarak 4096 kullanıyorum),
- Etkileyici: İşlemci çekirdeği sayısını 1'den 2'ye veya daha fazla artırın (ana bilgisayar kapasitenize bağlı olarak 3 kullanıyorum).
- CD-Rom kurulum ISO dosyasını göstermelidir.
- Cihazınızı bağladığınızda birincisi uyarı verebileceğinden, USB'yi varsayılan 1.1'den 2.0'a geçirmek isteyebilirsiniz. Kullanımınıza bağlı olarak, "Yeni USB aygıtlarını otomatik olarak bağla" ve "Bluetooth aygıtlarını sanal makineyle paylaş " seçeneklerinin işaretini de kaldırabilirsiniz .
- Ortamınıza bağlı olarak, ekran ayarlarını da değiştirmeniz gerekebilir (3D'yi devre dışı bırakın, ekran boyutunu zorunlu kılın).
Dikkat:
- Netboot kurulumunu seçtiyseniz , Yazılım seçim ekranına ulaşırken masaüstü ortamınızı ( Ubuntu masaüstü veya Xubuntu masaüstü ) seçmeyi unutmayın , aksi takdirde minimum metin içeren bir ortam elde edersiniz!
- İlk önyüklemede, en son sürüme yükseltmeyi reddedin : burada tüm mesele 14.04'te kalmak!
İlk önyüklemede, yapmak isteyebileceğiniz ilklerden biri Linux konuk araçlarını yüklemektir:
sudo apt-get install open-vm-tools
Bu paket önyükleme zamanı tetikleyicileri oluşturur, bu nedenle kurulumu yalnızca konuk yeniden başlatıldıktan sonra tamamlanır.
Android kaynak kodunu getir
Benzer olsa da, prosedür ayrıntıları seçilen ROM'a bağlıdır:
- CyanogenMod için cihazınızı arayın (önce satıcıyı seçin), ardından cihazınıza uyarlanmış talimatları almak için "CyanogenMod nasıl kurulur" bağlantısını tıklayın.
- AOSP için, burada başlayan prosedürü takip edin .
CyanogeMod'un kaynak ağacında boot.img
dosyaları açmanıza izin veren bir araç paketlediğini belirtmek gerekir . Farklı bir şekilde söylemek gerekirse, CyanogenMod size sepolicy
cihazlarda ve ROM arşivlerinde saklanan dosyaya erişmenizi sağlayacak bir araç sunar . Google'ın AOSP'si bu tür bir araç sağlamaz, bu nedenle CyanogenMod'un kaynak ağacını kullanarak başka bir zorunluluk yoksa en uygun seçim olabilir, aksi takdirde appart'ı yüklemeniz gerekir (bu hızlı ve kolay bir işlemdir, bu yüzden burada endişelenmenize gerek yoktur).
İşte CyanogenMod 13.0 (Android 6.0) prosedürünü takip ediyorum. Kullanılan komutlara ilişkin açıklama yukarıda bağlantılı sayfalarda mevcuttur. Lütfen bunları okuyun, aşağıdaki yazı sadece referans amaçlı verilmiştir.
İpucu: Ben kullanırkenapt-get
düşük ortak payda sopa ve herkes mutlu tutmak için bu yazı, kullanmak tercih edebilirsinizaptitude
daha iyi bir şekilde bağımlılıkları ilgilenir yana bazı bağımlılıkları kurulumu gerekli bir paket çıkarılırken (yerine , bu bağımlılıklar da sisteminizi temiz bırakarak kaldırılacaktır). AFAIKaptitude
komutu Ubuntu'ya kurulmalıdır, ancak varsayılan olarak Xubuntu'da kullanılabilir.
sudo apt-get install bison build-essential curl flex git gnupg gperf \
libesd0-dev liblz4-tool libncurses5-dev libsdl1.2-dev libwxgtk2.8-dev libxml2 \
libxml2-utils lzop maven openjdk-7-jdk pngcrush schedtool squashfs-tools \
xsltproc zip zlib1g-dev g++-multilib gcc-multilib lib32ncurses5-dev \
lib32readline-gplv2-dev lib32z1-dev
mkdir -p ~/bin
mkdir -p ~/android/system
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod u+x ~/bin/repo
cd ~/android/system/
git config --global user.name "Your Name"
git config --global user.email "you@example.com
repo init -u https://github.com/CyanogenMod/android.git -b cm-13.0
repo sync
# Coffee time: around 20GB are being downloaded, this may take several hours.
source ./build/envsetup.sh
breakfast
Artık temiz ve neredeyse eksiksiz bir kaynak ağacınız var. Tescilli lekeler eksik, ancak SELinux ile ilgili görevler için bunlara ihtiyacınız yok.
İpucu: Kaynakları getirmek sıkıcı bir işlemdir, şimdi VM'nizin anlık görüntüsünü veya yedeklemesini yapmaya değebilir.
Android'in SELinux araç setini ve kitaplıklarını derleyin ve yükleyin
Şimdi gezinin komik kısmı başlıyor;)!
Şimdiye kadar prosedür oldukça basit olmalıydı. Amaç esas olarak benimle aynı ortama sahip olmanızı sağlamaktı. Bunu yaparsanız, devam filmi de açık kalmalıdır.
Başlıklar altında Google, Android'in kaynak koduna sürümler arasında derin değişiklikler uygulamaktan çekinmeyin, bu nedenle tam derleme adımları kesinlikle sürüme bağlı olacaktır (örneğin AOSP yöneticisi sepolicy/
dizinin taşınacağını gösterir ).
İlk olarak Android'in SElinux kitaplıklarını ve araç setini derlemek ve yüklemek için tam prosedürümü paylaşacağım, ancak zamanla bu yazının alaka düzeyini korumak için derleme sorunlarının çoğunu çözmek için takip edilecek genel yaklaşım hakkında bazı notlar ekleyeceğim.
Adım adım prosedür
Android'in SELinux kütüphaneleri, üst katman yazılımlarının Android'e özgü SELinux ilke dosyalarıyla baş etmesini sağlayacak soyutlama katmanı sağlar. Bu nedenle, önce bunları derlememiz ve yüklememiz gerekecek (bu, eğer yolunuzu bulana kadar, burada zorluklar varsa aslında çekirdeği temsil eder).
Daha sonra SELinux araçlarını kurabilir ve kurabiliriz. Göreceğimiz gibi, neyse ki bunların Android'e özel olması gerekmiyor, sadece SELinux kütüphane versiyonuyla eşleşmeleri gerekiyor.
Bu prosedür hem CyanogenMod hem de AOSP kaynak kodu ağaçları kullanılarak test edilmiştir.
Android SELinux kitaplıklarını ve ilk araçlarını derleyin ve yükleyin
İlk kurulum bağımlılıkları:
sudo apt-get install libapol-dev libaudit-dev libdbus-glib-1-dev libgtk2.0-dev \
libustr-dev python-dev python-networkx swig xmlto
Bu gönderide değişken $ANDROID_BUILD_TOP
kaynak konumunuzu ( repo sync
komutu verdiğiniz dizin) depolar . Adını istediğiniz gibi değiştirmekten çekinmeyin.
ANDROID_BUILD_TOP=~/android/system
cd $ANDROID_BUILD_TOP
source ./build/envsetup.sh
restorecond
'Makefile' bazı kitaplıkları bulamaması nedeniyle ilke çekirdek araçları derlemesi başarısız olur . pkg-config
Sabit kodlu olanlar yerine dinamik olarak oluşturulan yolları kullanmak için bu Makefile'yi düzenlemeniz gerekir (backticks'i tek tırnaklarla karıştırmayın!):
sed -i 's/^CFLAGS ?= -g -Werror -Wall -W$/& `pkg-config --cflags --libs dbus-1 gtk+-2.0`/' \
$ANDROID_BUILD_TOP/external/selinux/policycoreutils/restorecond/Makefile
Değişikliğin doğru bir şekilde dikkate alındığından emin olmak için Makefile'ı bazı metin düzenleyicileriyle açmaktan çekinmeyin.
Ve şimdi derleyin ve yükleyin:
cd $ANDROID_BUILD_TOP/external/bzip2/
make -f Makefile-libbz2_so
sudo make install
cd $ANDROID_BUILD_TOP/external/libcap-ng/libcap-ng-0.7/
./configure
make
sudo make install
cd $ANDROID_BUILD_TOP/external/selinux/
make -C ./libsepol/
sudo make -C /libsepol/ install
EMFLAGS=-fPIC make -C ./libselinux/
sudo make -C ./libselinux/ install
make -C ./libsemanage/
sudo make -C ./libsemanage/ install
make
sudo make install
make swigify
sudo make install-pywrap
sudo cp ./checkpolicy/test/{dispol,dismod} /usr/bin/
Dikkat:EMFLAGS=-fPIC
Bina yaparken ortam değişkeni ayarınıkaçırmayınlibselinux
. Henüz herhangi bir hata oluşturmayacak, ancak bir sonraki adımda SETools oluşturamayacaksınız. Bunu kaçırdıysanız veya yanlış bir şey yaptıysanız, sadece bir sorunmake clean
çıkardıktan sonra derlemenizi yeniden başlatın.
SELinux araçlarını derleyin ve kurun
SELinux araçları aşağıdakileri içeren önceden oluşturulmuş bir biçimde sağlanır:
$ANDROID_BUILD_TOP/external/selinux/prebuilts/bin/
Dizindeki Python komut dosyaları (ve kabuk komut dosyası sarmalayıcıları)
*.o
Aşağıdaki Python paketleri ( derlenmiş dosyalar dahil ) $ANDROID_BUILD_TOP/prebuilts/python/linux-x86/2.7.5/lib/python2.7/site-packages/
.
Bu araçların kaynak kodunun aşağıda mevcut olmasını beklerdim $ANDROID_BUILD_TOP/external
, ama öyle değil. Aslında, Google'ın kullandıkları SETools'un tam sürümünü paylaştığı bir yer bulamadım (FYI, GPL yalnızca değiştirilmişse kodu paylaşma zorunluluğudur), bu yüzden tahmin edebileceğimiz ve mümkün olduğunca elimizden geleni yapmamız gerekecek .
Araçların kendisi Python komut dosyalarıdır, bu SETools 4'ten yeni bir evrimdir (SETools 3'te sesearch
C gibi ikili çalıştırılabilir kodlar gibi ). Ancak, araçların kendileri hala 3.3.8 sürümünü gösteriyor:
$ $ANDROID_BUILD_TOP/external/selinux/prebuilts/bin/sesearch --version
3.3.8
Tahminimce Google, SETools 4'ten bazı erken geliştirme anlık görüntüleri aldı. 4.0.0 beta SETools'a kadar sürüm 2.4'e dayanıyordu, libsepol
4.0.0 sürümü ile kütüphanenin sürümüyle uyumlu olmayan 2.5 sürümüne güvenmeye başladılar. Android 6.0'da paketlenmiş SELinux (bunu derlemeyi deneyebilirsiniz, sadece başarısız olacaktır).
Bu yüzden en akıllıca seçim SETools 4.0.0 Beta ile devam ediyor gibi görünüyor.
Ek bağımlılıkları yükleyin:
sudo apt-get install python-setuptools
Kaynak kodu indirin ve çıkarın:
cd ~/android/
wget https://github.com/TresysTechnology/setools/archive/4.0.0-beta.tar.gz
tar xzf 4.0.0-beta.tar.gz
cd ./setools-4.0.0-beta/
Flex 2.5'i etkileyen bir hata nedeniyle -Wredundant-decls
, derleyicinin bayraklarından kaldırmamız gerekiyor :
sed -i '/-Wredundant-decls/d' ./setup.py
Ve son olarak derleyin ve kurun:
python ./setup.py build
sudo python ./setup.py install
Genel prosedür (veya "Kendinizi nasıl çıkarabilirsiniz")
Yukarıdaki prosedürün sizin durumunuzda işe yaramaması durumunda, işte nasıl ilerlemeye çalışılacağına dair daha üst düzey bir bakış.
Ne yazık ki burada sihir yok (ve yardımcı yok :(): Bu kodu derlemenin tek yolu klasik ama korkunç döngüsel "dene ve gör" yaklaşımıdır.
İlk kez derlemeye çalışın, büyük olasılıkla bazı *.h
dosya bulunamadığı için başarısız olur :
Android external/
dizininde ara :
find $ANDROID_BUILD_TOP/external -name filename.h
İstenen dosyayı bulursanız, bu, ilgili kitaplığın veya aracın belirli bir sürümünün Android kaynak kodu içinde paketlendiği anlamına gelir. Bu nedenle, Ubuntu'nun paket sisteminden kurmaya çalışmamalı, bunun yerine Android kaynak kodunda paketlenmiş sürümü derleyip kurmalısınız.
Bunun forumlarda bulabileceğiniz genel tavsiyelere aykırı olduğunu unutmayın: "Derlemeniz bu kitaplık eksik olduğu için başarısız oluyor mu? Bu paketi yükleyin, o zaman iyi olacak!" , bunu yaparak büyük olasılıkla daha kötü bir sorunla karşılaşırsınız: belirli bir sürüm paketlenmişse, büyük olasılıkla belirli bir sürüme ihtiyaç duyulduğundan (uyumluluk sorunları nedeniyle veya bu sürüm Google'dan belirli değişiklikler içerdiğinden) kaynaklanır.
Eğer merak ediyorsanız BTW: tabii ki bu kütüphane ya da araç bazı *.h
dosya bulunamadığı için hataları arttırarak bağımlılıklara sahip olabilir ve evet bu aynı döngüsel "dene ve gör" yaklaşımını uygulamanız gerekir.
Sistem genelinde arama:
find / -name filename.h 2>/dev/null
Sisteminizde zaten var olan bir dosyayı standart paylaşılan kitaplık konumunda "eksik" bulursanız, bu bağımlılığın muhtemelen ortamınızda zaten karşılanmış olduğu anlamına gelir, ancak hatayı oluşturan Makefile dosyayı bulmak için çok aptal demektir.
Bu Makefile öğesini doğrudan çağırırsanız, bunu düzelten bazı ortam değişkenleri ayarlamanız mümkün olabilir ( LIBDIR=/usr/lib make
örneğin), aksi takdirde Makefile'in kendisini değiştirmeniz pkg-config
gerekebilir ( komut, eksik oluşturma parametrelerini otomatik olarak oluşturmak için değerli bir yardımcı olabilir) .
Paketleme sisteminde arama:
apt-cache search filename-dev
Burada filename-dev
eksik dosyanın adını, küçük harfli .h
, -dev
son ekin yerini alacak şekilde temsil eder (örneğin, Python.h
bulunmazsa, arayın python-dev
). Doğru paketi bulmak için tam adında bazı ayarlamalar gerekebilir.
Sıkışıp kalırsanız ve internette hızlı bir arama bile net bir cevap vermediyse, apt-file
en iyi arkadaşınız olacaktır. apt-file
varsayılan olarak yüklenmezse, yüklemeniz ve veritabanını oluşturmanız gerekir:
sudo apt-get apt-file
sudo apt-file update
apt-file
belirli bir dosya sağlayan paketleri (kaldırılmış olanları bile) aramanıza olanak tanır. Çok fazla sonuç almaktan kaçınmak için grep
, aşağıdaki ile ilişkilendirmenizi öneririz :
apt-file search filename.h | grep -w filename.h
Ubuntu'nun deposunda bu dosyayı sağlayan bir paket varsa, apt-file
onu bulabilmelidir.
Doğru paketi bulduktan sonra , paketinizin adının apt-get install packagename
bulunduğu packagename
yeri kullanarak yükleyin .
İpucu: Eğer sisteminizde bir şeyler vidalı, komut bir paket bu biridir yeniden:apt-get reinstall pkg_name
. Bağımlılık (sistem kitaplıkları için büyük olasılıkla olası) nedeniyle klasik bir kaldırma ve yükleme mümkün olmadığında bile çalışacaktır.
Yardımcı araçlar
Bu adımda, artık Android'in SELinux kurallarını derlenmiş ve kaynak formatlarında araştırmanıza izin veren temiz bir ortamınız olmalıdır.
Ancak, büyük olasılıkla, soruşturmanızın sonunda bir şeyler yapmak isteyeceksiniz. Geçerli şekliyle, ortamınız bir aygıtın sepolicy
dosyasını değiştirmenize izin vermeyecektir . Aslında, bu dosya kolayca değiştirilemez: aygıt kök dizininin bir parçasıdır ve kök dizinin içeriği bir RAM disk dosyasından önyükleme sırasında çıkarılır ve bu da aygıtın önyükleme görüntüsünde saklanır.
Böylece ortamınız tamamlanmadan iki şeyi kaçırıyorsunuz:
- Cihazın önyükleme görüntüsüne erişmenin ve değiştirmenin bir yolu,
sepolicy
Dosyasını değiştirmenin bir yolu .
Neyse ki, bunlar tam olarak bu yazının son iki bölümünün konusu! :)
Cihazın önyükleme görüntüsünü getir ve güncelle
Aygıtların önyükleme görüntüsünü almak ve güncellemek için kullanılan araçlar, SELinux kurallarının kurcalanması dışında çok çeşitli şeyler için kullanılabilir. Bu nedenle özel bir cevap oluşturdum , lütfen bakın.
Cihazın SELinux kurallarını değiştirme
Burada iki ana olasılık var:
sepolicy
Kaynak ağacınızdaki kurallardan yeni bir dosya oluşturun ( .te
dosyaları bulmak için arayın : find $ANDROID_BUILD_TOP -name \*.te
birkaç klasöre yayılırlar).
sepolicy
Aygıt tarafından kullanılmakta olan dosyayı değiştirin .
Kurallarınızı sıfırdan geliştirmeniz gerekmedikçe, bu daha çok gelişmeyle ilgili bir görevdir ve bu nedenle burada kapsam dışıdır, ikinci seçenek çok güvenli görünmektedir, çünkü tek değişiklik sizin açıkça yapılmış.
Bir sepolicy
dosyayı yeniden derlenebilir bir forma dönüştürmenize ve aradaki kuralları serbestçe düzenlemenize izin veren bir araç yapmak için bir proje olmuştur . Ancak bu proje kavram kanıtı durumunda terk edilmiştir. Bu blog gönderisinin sonunda tüm bilgileri bulacaksınız , makalenin geri kalanı ilgilenen herkesin devralmasına izin vermek için yeterli ayrıntı içeriyor.
sepolicy
Kuralları değiştirmenin şu anda önerilen yolu başka bir rotaya gider: sepolicy
ikili dosyayı doğrudan değiştirerek . sepolicy enjekte aracı sadece buna izin verir ve aktif olarak korunur.
Tamlık uğruna, bu aracın bir çatalı olduğunu unutmayın . Bazıları orijinal yazarın yapılacaklar listesinde yer alan (bir kuralı kaldırma olasılığı gibi) birkaç özellik ekliyor, bana neden katkıda bulunmak yerine neden çatal kullanmayı seçtiklerini sorma ...
Derlemek ve yüklemek sepolicy-inject
için aşağıdaki adımları izleyin:
cd ~/android/
git clone https://bitbucket.org/joshua_brindle/sepolicy-inject.git
cd ./sepolicy-inject/
LIBDIR=/usr/lib make
sudo cp ./sepolicy-inject /usr/bin/
Kullanım örneği
Diyelim ki, aşağıdaki hata mesajıyla eşleşen otomatikleştirmeyi eklemek istiyorsunuz:
avc: denied { read } for pid=128 comm="file-storage"
path="/data/media/0/path/to/some/file"
dev="mmcblk0p28" ino=811035 scontext=u:r:kernel:s0
tcontext=u:object_r:media_rw_data_file:s0 tclass=file permissive=0
Cihazın önyükleme görüntüsünü almanız ve ardından sepolicy
dosyaya erişmek için paketini açmanız gerekir .
Kullanarak hızlı bir kontrol sesearch
, gerçekten izin verme kuralının olmadığını gösterir (henüz!):
$ sesearch -A -s kernel -t media_rw_data_file -c file -p read ./sepolicy
$
Komutun çıktısı yok.
Ardından, gerekli kuralı eklemek için aşağıdaki komutu kullanın ( sesearch
ve sepolicy-inject
parametreler arasındaki benzerliğe dikkat edin ):
sepolicy-inject -s kernel -t media_rw_data_file -c file -p read -P ./sepolicy
Şimdi sesearch
komutumuzu geri arayabiliriz :
$ sesearch -A -s kernel -t media_rw_data_file -c file -p read ./sepolicy
allow kernel media_rw_data_file:file read;
$
sesearch
output, politikanın doğru şekilde güncellendiğini gösterir.
Artık aygıtın boot.img
dosyasını yeniden paketleyebilir ve aygıta geri döndürebilirsiniz. /sepolicy
Dosyanın son değişiklik zamanını kontrol etmek , cihazınızın şimdi yeni güncellenen sepolicy
dosyayı çalıştırdığından emin olmanın kolay bir yoludur .
Sonuç
Artık Android cihazların SELinux politikalarını özgürce incelemenize ve değiştirmenize izin veren eksiksiz bir ortama sahip olmalısınız. Zevk almak! :)
Bir yan not olarak, SELinux politikasını doğrudan cihazdan analiz etmeye ve değiştirmeye izin veren araçlar da vardır .