一種獲取和釋放root權(quán)限的方法
【專利摘要】一種獲取和釋放root權(quán)限的方法,應(yīng)用程序使用系統(tǒng)調(diào)用與linux內(nèi)核通信,向linux內(nèi)核發(fā)送權(quán)限設(shè)置命令,linux內(nèi)核根據(jù)權(quán)限設(shè)置命令修改進程控制結(jié)構(gòu)中的應(yīng)用程序進程的權(quán)限控制變量;當(dāng)應(yīng)用程序需要獲取root權(quán)限時,應(yīng)用程序向linux內(nèi)核發(fā)送獲取root權(quán)限命令,linux內(nèi)核將進程控制結(jié)構(gòu)中的應(yīng)用程序進程的權(quán)限控制變量修改為root進程權(quán)限值,從而使應(yīng)用程序apk進程獲得root權(quán)限;當(dāng)應(yīng)用程序需要釋放root權(quán)限時,應(yīng)用程序向linux內(nèi)核發(fā)送釋放root權(quán)限命令,linux內(nèi)核將進程控制結(jié)構(gòu)中的應(yīng)用程序進程的權(quán)限控制變量修改為原始權(quán)限值,從而使應(yīng)用程序apk恢復(fù)原始權(quán)限。本發(fā)明減少了頻繁執(zhí)行su命令的內(nèi)存占用和時間開銷。
【專利說明】一種獲取和釋放root權(quán)限的方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及一種獲取和釋放root權(quán)限的方法,尤其涉及一種在安卓(Android)操 作系統(tǒng)中應(yīng)用程序獲取和釋放root權(quán)限的方法。
【背景技術(shù)】
[0002] 在安卓(Android)操作系統(tǒng)中,為每一個應(yīng)用程序(apk)創(chuàng)建了一個用戶和組。這 個用戶和組都是受限用戶,不能訪問系統(tǒng)的數(shù)據(jù),只能訪問自己的文件和目錄,當(dāng)然該應(yīng)用 程序(apk)也不能訪問其他應(yīng)用程序的數(shù)據(jù)。這樣的設(shè)計可以盡可能地保護應(yīng)用程序的私 有數(shù)據(jù),增強系統(tǒng)的安全性和健壯性。但是有一些應(yīng)用程序(apk)是需要訪問一些系統(tǒng)資 源,一般情況下系統(tǒng)(system)用戶權(quán)限就夠用了,但是有些情況下system權(quán)限還是不夠 的,這時應(yīng)用程序就需要root權(quán)限。
[0003] 安卓(Android)框架是基于Linux內(nèi)核構(gòu)建,所以安卓(Android)安全系統(tǒng)也是基 于Linux的安全架構(gòu)建立的。在Linux安全系統(tǒng)中,用戶和組起著重要作用,Linux中所有的 資源給不同的用戶和用戶組設(shè)置了不同的訪問屬性。安卓(Android)與Linux分別有自己 的一套嚴(yán)格的安全及權(quán)限機制。比如: -rwxr-xr_x system system 4156 2013-03-03 11:00 test, apk,這個安卓(Android)應(yīng)用程序文件代表的是系統(tǒng)(system)用戶擁有對此文件的 讀寫執(zhí)行權(quán)限,系統(tǒng)(system)組的用戶對此文件擁有讀、執(zhí)行權(quán)限,其他人對此文件只具有 執(zhí)行權(quán)限。而test, apk文件運行起來具有的權(quán)限完全與此不相關(guān),千萬不要看應(yīng)用程序 (apk)文件系統(tǒng)上屬于system/system用戶及用戶組,或者root/root用戶及用戶組,就認(rèn) 為應(yīng)用程序(apk)具有system或root權(quán)限。通過文件系統(tǒng)看到的權(quán)限,是其他程序操作這 個文件時所需要的權(quán)限,而不是這個文件所具有的的權(quán)限。現(xiàn)有的方案是使應(yīng)用程序(apk) 執(zhí)行su命令獲取root權(quán)限。su命令是linux中獲取root權(quán)限的工具程序。在java語 言中,借助安卓(Android)應(yīng)用程序執(zhí)行l(wèi)inux命令的標(biāo)準(zhǔn)接口:Runtime. getRuntimeO. exec (String command)(其中的command表示要執(zhí)行的1 inux命令)訪問底層Linux下的 程序或腳本,就能執(zhí)行su命令,使應(yīng)用程序(apk)具有root權(quán)限。由于需要su程序獲得 root權(quán)限,并且只有執(zhí)行su命令的應(yīng)用程序(apk)才能擁有root權(quán)限,就造成了應(yīng)用程序 頻繁執(zhí)行su命令,造成時間和內(nèi)存占用的增加,同時,su命令這種方式只能執(zhí)行l(wèi)inux命 令,不方便執(zhí)行復(fù)雜操作。
【發(fā)明內(nèi)容】
[0004] 本發(fā)明提供一種獲取和釋放root權(quán)限的方法,能夠減少頻繁執(zhí)行SU命令的內(nèi)存 占用和時間開銷。
[0005] 為了達到上述目的,本發(fā)明提供一種獲取和釋放root權(quán)限的方法,應(yīng)用程序使用 系統(tǒng)調(diào)用與linux內(nèi)核通信,向linux內(nèi)核發(fā)送權(quán)限設(shè)置命令,linux內(nèi)核根據(jù)權(quán)限設(shè)置命 令修改進程控制結(jié)構(gòu)中的應(yīng)用程序進程的權(quán)限控制變量; 當(dāng)應(yīng)用程序需要獲取root權(quán)限時,應(yīng)用程序向linux內(nèi)核發(fā)送獲取root權(quán)限命令, linux內(nèi)核將進程控制結(jié)構(gòu)中的應(yīng)用程序進程的權(quán)限控制變量修改為root進程權(quán)限值,從 而使應(yīng)用程序apk進程獲得root權(quán)限; 當(dāng)應(yīng)用程序需要釋放root權(quán)限時,應(yīng)用程序向linux內(nèi)核發(fā)送釋放root權(quán)限命令, linux內(nèi)核將進程控制結(jié)構(gòu)中的應(yīng)用程序進程的權(quán)限控制變量修改為原始權(quán)限值,從而使 應(yīng)用程序apk恢復(fù)原始權(quán)限。
[0006] 在linux內(nèi)核初始化時,通過linux標(biāo)準(zhǔn)的字符設(shè)備接口生成一個設(shè)備節(jié)點,應(yīng)用 程序?qū)⑾騦inux內(nèi)核發(fā)送的權(quán)限設(shè)置命令寫入該設(shè)備節(jié)點中。
[0007] linux內(nèi)核在使應(yīng)用程序獲得root權(quán)限的同時,保存該應(yīng)用程序進程原來的權(quán)限 值。
[0008] 本發(fā)明還提供一種獲取root權(quán)限的方法,該方法包含以下步驟: 步驟1、在linux內(nèi)核初始化時,通過linux標(biāo)準(zhǔn)的字符設(shè)備接口生成一個設(shè)備節(jié)點; 步驟2、當(dāng)應(yīng)用程序需要獲取root權(quán)限時,通過系統(tǒng)調(diào)用,向linux內(nèi)核的設(shè)備節(jié)點中 寫入獲取root權(quán)限的命令; 步驟3、linux內(nèi)核根據(jù)寫入設(shè)備節(jié)點的命令,將進程控制結(jié)構(gòu)中的應(yīng)用程序進程的權(quán) 限控制變量修改為root進程權(quán)限值,從而使應(yīng)用程序進程獲得root權(quán)限。
[0009] inux內(nèi)核在使應(yīng)用程序獲得root權(quán)限的同時,保存該應(yīng)用程序進程原來的權(quán)限 值。
[0010] 本發(fā)明還提供一種釋放root權(quán)限的方法,該方法包含以下步驟: 步驟1、當(dāng)應(yīng)用程序需要放棄root權(quán)限時,通過系統(tǒng)調(diào)用,向linux內(nèi)核的設(shè)備節(jié)點中 寫入權(quán)限恢復(fù)命令; 步驟2、linux內(nèi)核根據(jù)寫入設(shè)備節(jié)點的命令,將進程控制結(jié)構(gòu)中的應(yīng)用程序進程的權(quán) 限控制變量修改為保存的原來的權(quán)限值,從而恢復(fù)應(yīng)用程序的原始權(quán)限。
[0011] 本發(fā)明減少了頻繁執(zhí)行su命令的內(nèi)存占用和時間開銷。
【專利附圖】
【附圖說明】
[0012] 圖1和圖2是本發(fā)明的流程圖。
【具體實施方式】
[0013] 以下根據(jù)圖1和圖2具體說明本發(fā)明的較佳實施例。
[0014] 如圖1所示,本發(fā)明提供一種獲取root權(quán)限的方法,包含以下步驟: 步驟1、在linux內(nèi)核初始化時,通過linux標(biāo)準(zhǔn)的字符設(shè)備接口生成一個設(shè)備節(jié)點; 步驟2、當(dāng)應(yīng)用程序apk需要獲取root權(quán)限時,通過系統(tǒng)調(diào)用,向linux內(nèi)核的設(shè)備節(jié) 點中寫入設(shè)置root權(quán)限的命令; 所述的設(shè)置root權(quán)限的命令可自行設(shè)置,如:寫入0代表設(shè)置root權(quán)限; 所述的系統(tǒng)調(diào)用可采用open函數(shù)、write函數(shù)等實現(xiàn); 步驟3、linux內(nèi)核根據(jù)寫入設(shè)備節(jié)點的命令,將進程控制結(jié)構(gòu)(struct task)中的應(yīng)用 程序進程的權(quán)限控制變量修改為root進程權(quán)限值,從而使應(yīng)用程序apk進程獲得root權(quán) 限; linux內(nèi)核在使應(yīng)用程序apk獲得root權(quán)限的同時,保存該應(yīng)用程序apk進程原來的 權(quán)限值;將該應(yīng)用程序apk進程原來的權(quán)限值和該應(yīng)用程序apk進程的ID同時保存到一個 數(shù)組中; 所述的權(quán)限控制變量為uid (用戶名,User Identifier)、suid (終端設(shè)備標(biāo)識,Set User Identifier)、gid (群體身份,Group Identification)、sgid (分段標(biāo)識,Set Group Identification)等。
[0015] 如圖2所示,本發(fā)明還提供一種釋放root權(quán)限的方法,包含以下步驟: 步驟1、當(dāng)應(yīng)用程序apk需要放棄root權(quán)限時,通過系統(tǒng)調(diào)用,向linux內(nèi)核的設(shè)備節(jié) 點中寫入權(quán)限恢復(fù)命令; 所述的權(quán)限恢復(fù)命令可自行設(shè)置,如:寫入OxFFFF代表恢復(fù)原來的權(quán)限值; 所述的系統(tǒng)調(diào)用可采用open函數(shù)、write函數(shù)等實現(xiàn); 步驟2、linux內(nèi)核根據(jù)寫入設(shè)備節(jié)點的命令,將進程控制結(jié)構(gòu)(struct task)中的應(yīng) 用程序進程的權(quán)限控制變量修改為保存的原來的權(quán)限值,從而恢復(fù)應(yīng)用程序apk的原始權(quán) 限; 所述的權(quán)限控制變量為uid、suid、gid、sgid等。
[0016] 本發(fā)明是在apk程序中使用系統(tǒng)調(diào)用(open、write等),讓apk和linux內(nèi)核進行 通信,然后由linux內(nèi)核改變當(dāng)前apk進程權(quán)限相關(guān)的設(shè)置,從而改變apk進程的權(quán)限,同 時保存當(dāng)前進程的權(quán)限設(shè)置。當(dāng)apk需要修改回原始權(quán)限時,再給linux內(nèi)核發(fā)送相應(yīng)的 通信指令,由內(nèi)核負責(zé)將apk進程修改為原始權(quán)限。
[0017] 本發(fā)明是基于linux進程管理實現(xiàn)的,linux通過進程控制結(jié)構(gòu)(struct task)來 控制進程的所有狀態(tài)和權(quán)限。本發(fā)明主要通過修改進程控制結(jié)構(gòu)中權(quán)限控制變量狀態(tài),從 而達到修改進程權(quán)限的目的。
[0018] 盡管本發(fā)明的內(nèi)容已經(jīng)通過上述優(yōu)選實施例作了詳細介紹,但應(yīng)當(dāng)認(rèn)識到上述的 描述不應(yīng)被認(rèn)為是對本發(fā)明的限制。在本領(lǐng)域技術(shù)人員閱讀了上述內(nèi)容后,對于本發(fā)明的 多種修改和替代都將是顯而易見的。因此,本發(fā)明的保護范圍應(yīng)由所附的權(quán)利要求來限定。
【權(quán)利要求】
1. 一種獲取和釋放root權(quán)限的方法,其特征在于,應(yīng)用程序使用系統(tǒng)調(diào)用與linux內(nèi) 核通信,向linux內(nèi)核發(fā)送權(quán)限設(shè)置命令,linux內(nèi)核根據(jù)權(quán)限設(shè)置命令修改進程控制結(jié)構(gòu) 中的應(yīng)用程序進程的權(quán)限控制變量; 當(dāng)應(yīng)用程序需要獲取root權(quán)限時,應(yīng)用程序向linux內(nèi)核發(fā)送獲取root權(quán)限命令, linux內(nèi)核將進程控制結(jié)構(gòu)中的應(yīng)用程序進程的權(quán)限控制變量修改為root進程權(quán)限值,從 而使應(yīng)用程序apk進程獲得root權(quán)限; 當(dāng)應(yīng)用程序需要釋放root權(quán)限時,應(yīng)用程序向linux內(nèi)核發(fā)送釋放root權(quán)限命令, linux內(nèi)核將進程控制結(jié)構(gòu)中的應(yīng)用程序進程的權(quán)限控制變量修改為原始權(quán)限值,從而使 應(yīng)用程序apk恢復(fù)原始權(quán)限。
2. 如權(quán)利要求1所述的獲取和釋放root權(quán)限的方法,其特征在于,在linux內(nèi)核初始 化時,通過linux標(biāo)準(zhǔn)的字符設(shè)備接口生成一個設(shè)備節(jié)點,應(yīng)用程序?qū)⑾騦inux內(nèi)核發(fā)送的 權(quán)限設(shè)置命令寫入該設(shè)備節(jié)點中。
3. 如權(quán)利要求2所述的獲取和釋放root權(quán)限的方法,其特征在于,linux內(nèi)核在使應(yīng) 用程序獲得root權(quán)限的同時,保存該應(yīng)用程序進程原來的權(quán)限值。
4. 一種獲取root權(quán)限的方法,其特征在于,該方法包含以下步驟: 步驟1、在linux內(nèi)核初始化時,通過linux標(biāo)準(zhǔn)的字符設(shè)備接口生成一個設(shè)備節(jié)點; 步驟2、當(dāng)應(yīng)用程序需要獲取root權(quán)限時,通過系統(tǒng)調(diào)用,向linux內(nèi)核的設(shè)備節(jié)點中 寫入獲取root權(quán)限的命令; 步驟3、linux內(nèi)核根據(jù)寫入設(shè)備節(jié)點的命令,將進程控制結(jié)構(gòu)中的應(yīng)用程序進程的權(quán) 限控制變量修改為root進程權(quán)限值,從而使應(yīng)用程序進程獲得root權(quán)限。
5. 如權(quán)利要求4所述的獲取root權(quán)限的方法,其特征在于,inux內(nèi)核在使應(yīng)用程序獲 得root權(quán)限的同時,保存該應(yīng)用程序進程原來的權(quán)限值。
6. -種釋放root權(quán)限的方法,其特征在于,該方法包含以下步驟: 步驟1、當(dāng)應(yīng)用程序需要放棄root權(quán)限時,通過系統(tǒng)調(diào)用,向linux內(nèi)核的設(shè)備節(jié)點中 寫入權(quán)限恢復(fù)命令; 步驟2、linux內(nèi)核根據(jù)寫入設(shè)備節(jié)點的命令,將進程控制結(jié)構(gòu)中的應(yīng)用程序進程的權(quán) 限控制變量修改為保存的原來的權(quán)限值,從而恢復(fù)應(yīng)用程序的原始權(quán)限。
【文檔編號】G06F11/34GK104063303SQ201410303803
【公開日】2014年9月24日 申請日期:2014年6月30日 優(yōu)先權(quán)日:2014年6月30日
【發(fā)明者】周玲莉, 耿興歡 申請人:上海斐訊數(shù)據(jù)通信技術(shù)有限公司