歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android教程:開放root權限

Android教程:開放root權限

日期:2017/3/1 10:22:39   编辑:Linux編程

Android開放系統root權限,即使任何用戶都可以執行su程序,以使得臨時用戶也具有了root的權限,然後去進行一些系統級的設置,如設置IP地址,DNS等。

1、修改su程序對臨時用戶的限制,默認su只允許root和shell用戶執行

vi system/extras/su/su.c

注釋掉語句塊

  1. /*
  2. myuid = getuid();
  3. if (myuid != AID_ROOT && myuid != AID_SHELL) {
  4. fprintf(stderr,"su: uid %d not allowed to su\n", myuid);
  5. return 1;
  6. }
  7. */

就安全性而言這種方式是不太可取的,因此才有了類似於superuser.apk的出現,它們的作用就是在外面再提供一層保護。

2、修改su程序的suid,可以通過ls -l來查看,在system/core/rootdir/init.rc中添加語句

chmod 4755 /system/xbin/su

3、如果涉及到/data目錄而非/data/data/<你的包名>/的修改,則修改system/core/rootdir/init.rc

將 mount yaffs2 mtd@userdata /data nosuid nodev 改為 mount yaffs2 mtd@userdata /data nodev

4、通過java app進行驗證

  1. package com.test;

  2. import java.io.DataOutputStream;
  3. import java.io.IOException;

  4. import android.app.Activity;
  5. import android.os.Bundle;
  6. import android.util.Log;

  7. public class TestActivity extends Activity {
  8. /** Called when the activity is first created. */
  9. @Override
  10. public void onCreate(Bundle savedInstanceState) {
  11. super.onCreate(savedInstanceState);
  12. setContentView(R.layout.main);
  13. try {
  14. Process process = Runtime.getRuntime().exec("su");//(這裡執行是系統已經開放了root權限,而不是說通過執行這句來獲得root權限)
  15. DataOutputStream os = new DataOutputStream(process.getOutputStream());
  16. os.writeBytes("ifconfig eth0 192.168.18.122\n");
  17. os.writeBytes("exit\n");
  18. os.flush();
  19. } catch (IOException e) {
  20. e.printStackTrace();
  21. }
  22. }
  23. }

更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

Copyright © Linux教程網 All Rights Reserved