Ostatnio postanowiłem cofnąć CyanogenMod z wersji 14.1 (Android 7.1) do wersji 13 (Android 6.0.1), oczywiście z próbą zachowania danych, co jak podejrzewałem łatwe nie będzie i może skończyć się krachem systemu – i oczywiście tak się stało, a do tego zrobiona kopia zapasowa okazała się wadliwa.
W tej sytuacji postanowiłem przywrócić system z wcześniejszej kopii zapasowej i niezbędne dane (katalog /data/data/katalog-aplikacji) skopiować ręcznie, tak jak to już kiedyś robiłem. Niestety zapomniałem, że chyba od Androida 4.3 Google w system wmontowało potworka (w tym kontekście jest to prawdziwy potworek ;-)) w postaci SELinuxa, który od Androida 4.4 został przełączony w tryb restrykcyjny…
Spis treści w artykule
Android i Security-Enhanced Linux (SELinux)
O ile sam SELinux ma swoje zalety (głównie związane z podniesieniem bezpieczeństwa zarówno całego systemu, jak i poszczególnych jego elementów/komponentów), to w tym przypadku okazał się diabełkiem, który sprawił, że jakakolwiek modyfikacja w strukturze plików (w tym przypadku podmiana plików odpowiedzialnych za ustawienia poszczególnych aplikacji, np. bazy zawierającej SMSy) powodowała albo krach całego systemu, albo – w przypadku podmiany plików tylko kilku wybranych aplikacji – krach danej aplikacji, bo podpis/etykiety plików się nie zgadzają, nawet jeśli są z tego samego telefonu.
Enforcing vs Permissive
By zweryfikować podejrzenia, że to na pewno kwestia SELinuxa postanowiłem z poziomu konsoli (w końcu po coś ten root jest ;-)) sprawdzić w jakim trybie działa SELinux w moim telefonie, i czy zmiana z trybu „restrykcyjnego” (enforcing) na tryb „pobłażliwy” (permissive) rozwiąże mój problem:
Sprawdzenie trybu (tak, można to też zrobić przez ustawienia telefonu):
su
getenforce
W odpowiedzi otrzymałem „enforcing”, a więc tryb „restrykcyjny”. Szybka zmiana na „permissive” (pobłażliwy):
setenforce 0
Z tego co kojarzę, to taka zmiana jest możliwa dzięki temu, że tryb pracy urządzenia to „userdebug”, co można sprawdzić za pomocą polecenia:
getprop ro.build.type
Po tej zmianie aplikacje z podmienionymi plikami zaczęły działać, a więc przyczyna potwierdzona, choć powyższa komenda nie rozwiązuje problemu, gdyż po każdym restarcie telefonu system automatycznie przechodzi w tryb „restrykcyjny”.
Co nie zadziałało
Podczas rozmowy ze znajomym doszliśmy do wniosku, że można albo spróbować wyłączyć SELinuxa na stałe (wiązałoby się to prawdopodobnie z wgraniem jądra systemu bez tego zabezpieczenia), lub skorzystać z opcji „relabel”, czyli ponownego podpisywania plików.
Pierwsza próba – korekta uprawnień z poziomu Recovery (TWRP) niestety nic zmieniła, aplikacje jak nie działały, tak nie działały dalej.
W kolejnym kroku w głównej partycji systemu postanowić utworzyć plik „.autorelabel”, dzięki które miałem nadzieję, że nastąpi – tak jak to ma miejsce w systemach serwerowych/desktopowych – ponowne katalogowanie/podpisywanie plików:
su
mount -o rw,remount /
touch /.autorelabel
Niestety ta metoda również zawiodła, choć podczas uruchamiania system jakieś dodatkowe operacje wykonał…
Może jakiś skrypt
Kolejną metodą, którą postanowiłem sprawdzić, to jakiś prosty skrypt, który w odpowiednim miejscu podstawi 0 (zero), tym samym przełączając tryb pracy/działania SELinuxa:
echo 0 > /sys/fs/selinux/enforce
Niestety kilka różnych prób nie przyniosło spodziewanego efektu (skrypt musi zadziałać z uprawnieniami roota, a zarazem musi wykonać się po systemowym sprawdzeniu i ew. przełączeniu trybu SELinuxa na „restrykcyjny”).
SELinuxModeChanger
Szybkie wyszukiwanie w Google i trafiłem na aplikację „SELinuxModeChanger”, która dawała szansę na szybkie i skuteczne rozwiązanie mojego problemu z trybem pracy SELinuxa, gdyż wg opisu autora pilnuje wybranego trybu pracy również po restarcie/uruchomieniu telefonu.
Apliakcja kiedyś dostępna w Google Play, ale z niego wyleciała. Teraz znajdziecie ją do pobrania m.in. w serwisie F-Droid.
Oczywiście Google przy standardowo włączonej weryfikacji instalowanych aplikacji wyświetli nam ostrzeżenie, o tym, że „aplikacja może trwale uszkodzić urządzenie” (dlatego instalujecie aplikację, jak i robicie wszystkie inne wymienione operacje na własną odpowiedzialność):
Dalsza obsługa aplikacji wydaje się prostsza niż instalacja, gdyż sprowadza się do kliknięcia w odpowiedni przycisk, za pomocą którego wybieramy tryb pracy SELinuxa:
A co najważniejsze – jak autor obiecał, tak się dzieje, i odpowiedni/wybrany tryb pracy SELinuxa jest automatycznie ustawiany po każdym uruchomieniu telefonu.
- Wakacje składkowe ZUS a zawieszenie działalności gospodarczej, czyli uważaj, bo być może nie będziesz mógł skorzystać (w 2024) - 1970-01-01
- Przykładowy kalkulator wyceny usługi druku 3D, czyli nie tylko materiał się liczy - 1970-01-01
- Home Assistant 2024.10, czyli nowa karta „nagłówek” i niedziałający TTS w ramach usługi Google Cloud - 1970-01-01