有没有一种方法可以让我以root用户身份运行Adb shell而无需键入'su'?


45

有没有办法让我以root身份运行Adb shell而无需键入su?我希望无需进入shell就能拥有root用户访问权限。

Answers:


40

如果我正确理解了您的问题,那么您正在询问如何在运行时自动获得root用户访问权限adb shell,这样您就不必进入shell并键入su以root用户身份在手机上执行命令的权限。

这由引导分区中的标志控制,默认情况下,大多数自定义ROM已对其进行了修改,以允许root权限。如果您$在使用时跌落到a位置,adb shell则有两个永久选项和一个临时选项(临时意味着重新启动后不会粘住):

  1. 刷新包含修改的ROM
  2. 创建一个自定义的boot.img并将其刷新到手机
  3. adbd以root权限重新启动设备

2号实际上并不难,但是如果您不小心,它可能会有些危险。这里有一个Wiki文章它解释了该过程,并包括几个Perl脚本来帮助您。这些说明假定使用Linux / Unix环境。我已经在Fedora Linux上亲自使用了这些说明,并且可以告诉您它们可以工作,但是我不知道其他* nix环境,例如Mac。我也不知道任何类似的Windows使用说明,但是如果您使用Windows,则可以尝试查找一些类似的信息。由于不同的设备使用不同的分区表,因此确切的命令因电话而异。

但是,一般来讲,您需要从手机中提取当前的boot.img,将其解压缩,提取虚拟磁盘,然后找到default.prop文件。这是一个纯文本文件,您需要在文本编辑器中打开该文件,然后找到包含value的行ro.secure。如果该行显示,ro.secure=1则需要将其更改为ro.secure=0。之后,您可以重新打包ramdisk和boot.img,然后将其刷新到手机中。重新启动后,#无论何时执行adb shell而无需运行都会提示您su

另外,如果您使用的是自定义ROM,但没有进行此修改,则可以使用上述步骤解压缩ROM并修改其中包含的boot.img。然后,您可以使用新修改的boot.img压缩ROM,并照常刷新zip文件。

这可能不言而喻,但是在执行此操作时要小心。弄乱启动分区很容易使您的手机损坏,并迫使您通过HBoot恢复。我强烈建议测试Fastboot,以确保您可以使用扩展的Fastboot命令并执行恢复。具体取决于您的型号,但是大多数手机都有某种桌面软件,也可以运行该软件来刷新手机。


第三种选择是,在许多情况下,可以adbd使用root特权在设备上重新启动。一种可能性是adb root从PC终端执行,尽管这不适用于所有ROM配置(必须将ROM构建为“用户调试”配置)。您也可以尝试Chainfire的adbd不安全应用程序。这不会在重新启动后持续存在,因此您需要使用该应用程序,或者adb root在每次重新启动手机时再次使用。


手机还会以root权限启动吗?可能是安全问题。
马修(Matthew)

1
@Matthew:AFAIK,adbd默认情况下只允许在手机上具有root权限。有一个来自Android团队成员的帖子暗示了这一点,但没有明确说明。对AOSP的提交也意味着它只是一个adbd检查启动的标志(我在源代码的其他地方看不到)。正如我所提到的,我见过的大多数自定义光盘的(包括CM)已经将其设置为0
eldarerathis

我会说,尽管我不是100%。我找不到任何与default.prop文件有关的官方文档,尽管今晚我的Google-fu
显得

刚刚发现adb root以自动su模式重启adbd 的命令,显然它依赖于此。但是,我确实认为您只是一个标志是正确的。
马修(Matthew)

1
@MatthewRead:我链接到的提交中的源代码实际上对此有一个注释:) // ... except we allow running as root in userdebug builds if the service.adb.root property has been set by the "adb root" command"。顺便说一下,这就是Kindle Fire的BurritoRoot的第一个版本IIRC的工作方式。
eldarerathis 2012年

15

好吧,如果您的手机已扎根,则可以使用“ su -c”命令运行命令。

这是build.prop文件上的cat命令示例,用于获取电话产品信息。

adb shell "su -c 'cat /system/build.prop |grep "product"'"

这会调用root权限并在''中运行命令

请注意5个结束引号,这是关闭所有结束引号所必需的,否则会出现错误。

为了澄清起见,格式如下。

adb shell "su -c '[your command goes here]'"

确保以与在shell中运行该命令时完全相同的方式完全输入该命令。

试试看,希望对您有所帮助。



1

您想以root用户身份运行什么?您是说要使用root用户运行ADB Shell,但又不想使用ADB Shell?你能澄清一下吗?

如果应用程序请求root访问,则手机上的SuperUser应用程序应处理是否授予其权限。手机植根的过程应该包括一个SuperUser应用程序。


我想从终端运行adb shell gdbserver而不是进入shell运行它
Hank

2
@Hank:终端几乎总是需要连接到外壳才能执行任何有用的工作;也许您应该澄清“终端”和“外壳”的定义,因为您似乎对它们的定义与标准Linux / Android说法有所不同
Lie Ryan

因此您可以执行adb shell psadb shell然后ps获取正在运行的进程列表。所以有些东西需要root访问,我希望能够做到前者。
汉克,

1
“为什么”(尤其是在涉及gdbserver的情况下)的原因是能够在开发计算机上运行的脚本中使用该功能。但是,脚本可能会将命令通过管道传递给adb认为是交互式shell的内容,因此出于这个原因,实际上没有必要将adb默认设置为root。
克里斯·斯特拉顿

1

或者,您可以在电话上编写脚本,然后让adb执行该脚本,例如:

adb shell sh /sdcard/myscript.sh

该脚本可以在没有您干预的情况下提升自身(假设SuperUser设置为记住批准),例如:

su
pm setInstallLocation 1

我只是在手机上成功完成此操作,唯一的问题是我还没有弄清楚如何彻底结束adb shell会话。我必须在Windows Shell中按Ctrl-C返回Windows命令提示符-否则adb只会位于#提示符下,并且不接受输入。


0

我用于修复主页按钮问题


adb设备

adb shell su -c commands

要么

“ adb root shell sqlite3 /data/data/com.android.providers.settings/databases/settings.db”插入安全(名称,值)值('device_provisioned','1');

亚行杀害服务器


-1

您也可以在“ sh”上设置suid位。我正在使用BusyBox,因此说明可能与您的设置不符:

  1. 亚行外壳
  2. 挂载-o remount,rw / system(或:adb remount)
  3. ls -la / system / bin / sh lrwxr-xr-x根shell 2012-11-10 15:20 sh-> mksh
  4. chmod 4755 / system / bin / sh
  5. ls -la / system / bin / mksh
    -rwsr-xr-x根外壳157520 2012-11-10 09:54 mksh(注意suid位置1)
  6. ^ D
  7. 亚行外壳

你应该有根提示


3
从我-1。这是不安全的,并且会带来一个巨大的漏洞。任何APP都可能成为根源并造成严重破坏。
ce4 2012年

6
绝对不要这样做,这是一个灾难性的安全漏洞。(免责声明:我是mksh维护者。)
mirabilos
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.