2013-04-25 8 views
7

Kompiluję Androida ROM ze źródła, a ja mam jedną aplikację, którą chcę, aby była wstępnie zainstalowana i uruchomiona z uprawnieniami administratora.Jak przydzielić root dostęp do określonej aplikacji z kodu źródłowego zamiast zrootować ROM?

W jaki sposób mogę przyznać uprawnienia administratora do tej konkretnej aplikacji bez zrzutu całej pamięci ROM?

+3

Zainstaluj go w systemie/aplikacji zamiast w danych/aplikacji. –

+1

Zainstalowanie go w systemie/aplikacji nie przyznaje automatycznie uprawnień administratora. –

Odpowiedz

8

Mam nadzieję, że nie trzeba korzeń ...

Typowy free Android ROM zapewnić przywileje bardzo niewielu rzeczy korzeniowych, zgodnie z principle of least privilege. Zamiast tego aplikacje uzyskują dokładne uprawnienia, których potrzebują.

Dlaczego ta aplikacja wymaga uprawnień użytkownika root? Najpierw przejrzyj listę all the internal unpublished Android permissions, aby sprawdzić, czy jeden z nich robi to, co chcesz. Odkąd tworzysz aplikację systemową, możesz nawet używać uprawnień z signature, które normalnie nie są dostępne dla innych aplikacji. Musisz tylko upewnić się, że twoja aplikacja jest podpisana kluczem, z którym tworzysz ROM ROM-a - możesz go następnie rozpowszechnić z ROMem lub osobno, i nadal będzie mieć dostęp do wymaganych uprawnień.

Zalety robi to w ten sposób to:

  • Jeśli Twoja aplikacja jest zagrożona lub buggy, skutki są ograniczone.
  • Rzeczywisty kod Java ma te uprawnienia, więc nie ma potrzeby tworzenia skomplikowanych linii poleceń.

Więc jeśli możesz wykonać swoje zadanie w ten sposób, zrób.

Ale jeśli naprawdę zrobić ...

Jeśli naprawdę potrzebują korzenie, potem robi się trudne.

Masz trzy opcje. W kolejności preferencji:

  • Dodaj nową usługę systemową.
  • Dodaj alternatywny plik binarny setuid-root, który robi dokładnie to, czego potrzebujesz.
  • Zmodyfikuj plik binarny su, aby dokładnie sprawdzić, kto go wywołuje.

Jeśli naprawdę potrzebujesz root, to powinienem add a new system service. To może działać jako root. Następnie dodajesz odpowiednie dodatkowe interfejsy API, aby aplikacja mogła do niego zadzwonić - a uprawnienia można uzyskać na poziomie signature - tak, aby tylko aplikacja systemowa mogła je wywoływać. To jest architektonicznie "poprawny" sposób na zrobienie tego w Androidzie.

Druga lub trzecia opcja obejmuje utworzenie narzędzia wiersza polecenia, które robi to, co chcesz, ale nie znam bezpiecznego sposobu na takie narzędzie, aby sprawdzić kto go nazywa. Dopuszczalne jest zezwolenie dowolnej aplikacji na wywołanie tej funkcji. Jeśli tak, może to być nowy plik wykonywalny setuid-root. Jednak, jak mówię, nie wiem, jak powstrzymać działanie innych aplikacji.

+1

nie wstawiłbyś aplikacji do ścieżki system/aplikacja, czy mimo to obsługuje root? –

+1

Niestety nie! Oznacza to, że uzyskałoby uprawnienia 'signatureOrSystem', gdyby o to poprosiło.Ale równie łatwo jest podpisać aplikację kluczem systemowym, co również spowoduje przyznanie tych uprawnień - plus uprawnienia "podpisu". –

+0

, więc aplikacja systemowa nie może uzyskać dostępu do danych innych aplikacji? Myślę, że oznacza to, że tylko aplikacje systemowe, które również mają uprawnienia root'a, są w stanie zrobić wszystko. –