Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2121834
  • 博文数量: 229
  • 博客积分: 7217
  • 博客等级: 上校
  • 技术积分: 3224
  • 用 户 组: 普通用户
  • 注册时间: 2009-02-19 17:23
个人简介

个人主页https://xugaoxiang.com,微信公众号: Dev_Club 或者搜索 程序员Club

文章分类

全部博文(229)

文章存档

2017年(1)

2016年(20)

2015年(23)

2013年(1)

2012年(23)

2011年(68)

2010年(62)

2009年(31)

分类: LINUX

2012-02-01 09:00:54

开放系统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. }

Reference
1、
2、
3、
阅读(15220) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~