【问题标题】:Run shell command as root in system service AOSP在系统服务 AOSP 中以 root 身份运行 shell 命令
【发布时间】:2013-05-17 14:48:15
【问题描述】:

我正在自定义AOSP。我有system service,它以SystemServer 和其他system services 开头。我将从我的service 在 shell 中执行一些命令。 我正在使用Runtime.getRuntime().exec(command) - 如果命令不需要 root 权限,这可以正常工作。我的系统服务具有“系统”权限,而不是“根”权限(这是合乎逻辑的)。我正在尝试使用 "su -c" 前缀(例如 - "su -c mkdir /mnt/sdcard/NewFolder")执行命令,但没有成功。

问题:如何以root身份执行shell命令? (su 二进制文件包含在构建中)。我是否应该创建以 root 权限而不是系统权限运行的服务(如果可能的话!)

编辑:我不需要 SuperUser.apk,只需要 su 二进制文件(可能的 busybox 用于附加功能)。

【问题讨论】:

    标签: android android-source


    【解决方案1】:

    你得到什么错误? 可能你需要修改system/extras/su/su.c:

    /* Until we have something better, only root and the shell can use su. */
    myuid = getuid();
    if (myuid != AID_ROOT && myuid != AID_SHELL && myuid != AID_SYSTEM) {
        fprintf(stderr,"su: uid %d not allowed to su\n", myuid);
        return 1;
    }
    

    【讨论】:

    • 我可以在 system/extras/su/su.c 中更改哪些内容以便从系统服务中运行我的 su 二进制文件?
    • 我应该删除那个“if”吗?
    • 那将是不安全的。最好添加“myuid!= AID_SYSTEM”语句。原来的su.c只有两个条件——“myuid != AID_ROOT && myuid != AID_SHELL”
    • 是否可以在 Android 文件系统中为“su”二进制文件添加 root 权限?从系统服务运行 su 就足够了吗?现在“su”二进制文件具有“root shell”权限,如果我在“root root”上更改它们会怎样?
    • su 二进制文件已经拥有“root 权限”(一个 setuid 位和 root 的所有权),但程序的逻辑设置为如果不是由列出的允许的原始 uid 启动,则拒绝工作。典型的“rooted”安装通过逻辑检查来检查允许的应用程序用户的一些白名单和/或弹出用户配置对话框。
    猜你喜欢
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 2015-07-07
    • 2021-10-11
    • 1970-01-01
    • 2012-07-19
    • 2017-07-12
    • 1970-01-01
    相关资源
    最近更新 更多