web-dev-qa-db-fra.com

Comment accorder un accès root à une application spécifique à partir du code source au lieu d'enraciner la ROM?

Je compile un Android ROM à partir de la source, et j'ai une application que je veux qu'elle soit préinstallée et qu'elle s'exécute avec l'autorisation root.

Comment puis-je accorder un accès root à cette application spécifique, sans rooter la ROM entière?

8
Charles Liu

J'espère que vous n'avez pas besoin de root ...

Stock standard Android Les ROM fournissent des privilèges root à très peu de choses, conformément au principe du moindre privilège . Au lieu de cela, les applications bénéficient des autorisations précises dont elles ont besoin.

Pourquoi avez-vous besoin exactement de cette application pour avoir des autorisations root? Vous devez d'abord parcourir la liste de toutes les autorisations internes non publiées Android pour voir si l'une d'elles fait ce que vous voulez. Puisque vous créez une application système, vous pouvez même utiliser des autorisations signature qui ne sont normalement pas disponibles pour d'autres applications. Il vous suffit de vous assurer que votre application est signée par la clé avec laquelle vous créez le Android ROM - vous pouvez ensuite la distribuer avec le ROM ou séparément, et il aura toujours accès aux autorisations dont vous avez besoin.

Les avantages de procéder de cette façon sont les suivants:

  • Si votre application est compromise ou boguée, les effets sont limités.
  • Votre code Java réel possède ces autorisations, il n'est donc pas nécessaire de créer des lignes de commande compliquées.

Donc, si vous pouvez éventuellement faire votre tâche de cette façon, faites-le.

Mais si vous le faites vraiment ...

Si vous avez vraiment besoin de root, les choses deviennent difficiles.

Vous avez trois options. Par ordre de préférence:

  • Ajoutez un nouveau service système.
  • Ajoutez un autre binaire setuid-root qui fait exactement ce dont vous avez besoin.
  • Modifiez le binaire su pour vérifier exactement qui l'appelle.

Si vous avez vraiment besoin de root, alors je voudrais ajouter un nouveau service système . Cela peut s'exécuter en tant que root. Vous devez ensuite ajouter des API supplémentaires appropriées pour que votre application puisse l'appeler - et que les autorisations puissent être de signature - afin que seule votre application système puisse l'appeler. C'est la façon architecturale "correcte" de le faire dans Android-land.

Les deuxième ou troisième options impliquent la création d'un outil de ligne de commande qui fait ce que vous voulez, mais je ne connais pas de moyen sûr pour un tel outil de vérifier qui l'appelle. Il peut être acceptable d'autoriser n'importe quelle application à appeler cette fonctionnalité. Si c'est le cas, un nouvel exécutable setuid-root pourrait être la voie à suivre. Cependant, comme je l'ai dit, je ne connais aucun moyen d'empêcher d'autres applications de l'exécuter.

10
Adrian Taylor