2013-10-06 20 views
14

Jestem programistą na root -app dla Androida.Tymczasowe wyłączenie lub modyfikacja SELinux na Androidzie

Niestety teraz na niektórych urządzeniach/ROM jest SELinux w egzekwować -mode i zapobiega pewne działania mojej aplikacji.

Ponieważ jest to aplikacja root, użytkownicy przyznają mi uprawnienia administratora!

Teraz SELinux blokuje niektóre z moich działań i muszę znaleźć rozwiązanie tego problemu.

Próbowałem chwilowe wyłączenie SELinux przez

setenforce permissive -> no failure, but getenforce still returns "Enforcing" 
cat 0 > /sys/fs/selinux/enforce -> no failure, but getenforce still returns "Enforcing" 

Gram na pomysł, aby edytować sepolicy -file w czasie wykonywania, aby umożliwić zablokowanych poleceń i wywołać przeładowanie go, ale jestem ani pewien, czy to może zadziałać, czy nie jest to dobry pomysł.

Kto ma dla mnie więcej wskazówek lub materiałów?

+0

Myślałem, że su demona poradził sobie z SELinux, a także nosuid, działając w zupełnie innym kontekście, nie? Jakie działania są w szczególności blokowane? – Delyan

+0

Nie wiem, jak zrobiło to Chainfire z SU. Ale w moim przypadku jest to np. 'avc: denied {execstack} dla pid = 10971' i może jeszcze więcej rzeczy:/ –

+0

Czy wysyłacie' execstack' samodzielnie? Zdajesz sobie sprawę, że ten, kto skonfigurował tryb egzekwowania, mógł zablokować demona/su, dopóki nie będzie bezradny w tym przypadku, prawda? – Delyan

Odpowiedz

2

Próbowałem wyłączyć SELinux na Androida 4.3 od jakiegoś czasu i właśnie to wymyśliłem.

Na Samsung S4 Android 4.3, setenforce 0 zmieni się na tryb Permissive.

Na Samsung Note 3 Android 4.3, setenforce 0 NIE zmieni statusu SELinux.

Próbowałem Nexus 4 z Androidem 4.3, jednak domyślnie jest to Permissive tryb

+0

Nie odpowiadasz na pytanie ... –

+2

@MatthiasUrlichs on did not? Dał możliwość aktywnej zmiany egzekwowania SELinuksa w czasie wykonywania. OP zasugerował, że jego sprawa była bezpośrednio związana z tym. Mogę potwierdzić, że status SELinux zmieni się, gdy 'setenforce' zostanie uruchomiony jako root w CyanogenMod 11. –

0

Jeśli masz dostęp root uruchom su 0 setenforce 0 aby zmienić tryb Permissive:

// Set SELinux to permissive 
private static final String COMMAND = "su 0 setenforce 0"; 
try { 
    Runtime.getRuntime().exec(COMMAND); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
+0

Witam t1mz0r, dziękuję za informację zwrotną. To już zrobiłem i wspomniałem w mojej pierwszej prośbie. user1546570 zwrócił uwagę, że czasami działa, a czasami nie. Tymczasem wiem, że nie działa na kilku urządzeniach Samsung. Zredagowałem ten problem tutaj, programowo zmieniając zasady w środowisku uruchomieniowym i zmuszając je do ponownego załadowania, zamiast wyłączania całego SELinux przez setenforce. Teraz, gdy system Android 5 jest na drogach, może się to zasadniczo zmienić - setenforce działa przynajmniej na urządzeniach Nexus. Pozdrawiam i serdecznie pozdrawiam –

0

Można pobrać nazwę aplikacji zmieniarka modów selinux. Nie ma go w sklepie Play, więc pobierz go z Chrome lub dowolnej innej przeglądarki do wyboru. Aplikacja wymaga tylko uprawnień roota, więc spróbuj.

7

Możesz użyć supolicy z aplikacji SuperSU, zobacz link do szczegółowego opisu kiedy i jak może zostać wywołany.

W skrócie:

  • Dowiedz się, dlaczego coś jest blokowane przez SELinux poprzez sprawdzenie wiadomości z kontroli, na przykład dmesg | grep "audit"
  • Utwórz regułę allow ..., która umożliwia zablokowanie operacji. Są podobne (identyczne?) Do reguł "allow" w plikach SELinux * .te.
  • Uruchom supolicy --live "allow ..." w powłoce głównej i sprawdź, czy operacja zakończyła się pomyślnie. Jeśli nie, rozszerz reguły "Zezwalaj". Możesz określić wiele reguł "zezwalaj" w jednym wywołaniu supolicy.

Należy pamiętać, że supolicy jest kosztowną operacją, więc należy ją wywołać tylko raz.

Jeśli nie chcesz polegać na SuperSU Chainfire, możesz spróbować sepolicy-inject. Sam tego nie przetestowałem.

+1

Witam serdecznie. Polecam, aby rozwinąć swoją odpowiedź, aby być bardziej pomocnym i przyciągnąć więcej głosów. – Wtower

+1

Dzięki za podpowiedź. Dodałem przybliżony opis używania "supolicy". –

+1

Wolę nie ufać rootowi z zamkniętym binarnym źródłem, więc nie mam SuperSU. Chciałbym zobaczyć, jakie wywołania API wykonuje ta aplikacja. Spróbuję jednak 'setpolicy-inject'. – Wyatt8740

1

Edycja plików build.prop w folderze systemowym na pierwszym katalogu, używając wyszukiwarki edytor tekstu „SELinux”
Jeśli widzisz coś enable_selinux = 1, zmień go na 0, jeśli jest, aby wyłączyć to zrobić vice versa zmiany zostaną zastosowane po ponownym uruchomieniu lub rozruchu.

W moim przypadku są wyłączone go już, ale to było w wierszu komentarza

# ro.boot.selinux = Wyłącz

Linia Początki z # jest komentarz, który wygrał” t zmienić cokolwiek. Podobnie możesz włączyć/wyłączyć konto dla wielu użytkowników, Aktualizacje systemu.

Producent urządzeń wyłączony Aktualizacje systemu.