簡體   English   中英

如何在Android的系統應用程序上扎根工作?

[英]How can I get root to work for system app in Android?

我需要將nfs共享從系統應用程序掛載到sdcard或mnt文件夾,但是mount僅在授予root訪問權限的情況下起作用。 我怎樣才能做到這一點? (這不僅是一個程序,沒有root也不能運行。例如,我還需要root才能使用dd刷新系統上的自定義恢復)

我下載了AOSP棉花糖源,並在/ system / xbin文件夾中添加了su及其所有必需的內容。 當我嘗試運行su它向我顯示"Permission denied" ,但通過adb shell根目錄可以正常工作(我可以在xbin文件夾中運行它)。 我需要添加什么權限才能以root用戶身份運行系統應用程序? 謝謝。

使用平台密鑰構建並簽名的系統和系統應用程序。 我正在測試的應用程序在Manifest.xml具有sharedUid=android.uid.system屬性

AOSP提供的su有限制,以確保您是調用它的root或shell用戶。 此檢查位於https://android.googlesource.com/platform/system/extras/+/master/su/su.c#85

您始終可以將系統UID( AID_SYSTEM )添加到此檢查; 但是,這會給具有系統UID的所有應用程序/進程授予一攬子根特權,從而帶來安全風險。 如果您接受這些風險並且想要一個簡單的解決方案,那么我只會在su.c中將系統用戶添加到此行中。

我建議重新評估您的用例,並可能編寫一個本機守護程序/服務,以公開應用程序只能執行所需操作的功能。 然后,您可以使用更高級別的android權限以及本機守護程序本身的POSIX功能來實施這些操作。

唯一適用於我的解決方案是init作為根進程啟動的服務器二進制文件。 我編寫了簡單的服務器二進制文件,可以從Java端通過LocalSocket進行連接,並且可以向它發送一些命令。 為了在系統啟動時啟動服務器二進制文件,我在init.rc腳本中添加了以下init.rc行:

service suservice /system/bin/suservice
   class core
   user root
   group root
   socket suservice stream 0600 system system

在Java方面,我編寫了一個簡單的庫,該庫可通過回調接口工作,並從此服務接收數據,如果出現問題,則返回錯誤。

現在,只有以system:system開頭的應用程序可以使用此本地套接字運行root命令。 用戶應用收到擴展Permission denied

PS現在根本不需要運行或保留su二進制文件,因為服務器二進制文件已作為root運行。 我現在可以從系統中完全刪除su二進制文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM