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

#1 楼

如果我正确理解了您的问题,那么您正在询问如何在运行adb shell时自动获得root用户访问权限,这样就不必进入shell并键入su即可在手机上以root用户身份执行命令。 br />这由启动分区中的标志控制,大多数自定义ROM已对其进行了修改,以默认情况下允许root权限。如果使用$时跌落到adb shell,则有两个永久选项和一个临时选项(临时意味着重新启动时不会卡住):

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

数字2其实并不那么困难,但是可能有些危险如果您粗心。此处有Wiki文章介绍了该过程,并包括一些Perl脚本来帮助您。这些说明假定使用Linux / Unix环境。我已经在Fedora Linux上亲自使用了这些说明,并且可以告诉您它们可以工作,但是我不知道其他* nix环境(如Mac)。我也不知道任何类似的Windows使用说明,但是如果您使用的是Windows,我可以尝试查找一些说明。确切的命令因电话而异,因为不同的设备使用不同的分区表。
通常来说,您需要从电话中提取当前的boot.img,将其解压缩,提取虚拟磁盘并找到default.prop文件。这是一个纯文本文件,您需要在文本编辑器中打开该文件,然后找到包含值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命令并执行恢复。这根据您的型号而有所不同,但是大多数手机都可以运行某种桌面软件来刷新手机。

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

评论


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

–马修·雷德(Matthew Read)
2011年2月12日下午4:26

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

–eldarerathis
2011-2-12在6:23



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

–eldarerathis
2011-2-12在6:24



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

–马修·雷德(Matthew Read)
2012年1月24日20:20

@MatthewRead:我链接到的提交中的源代码实际上对此有一个注释:) // ...,除非如果service.adb.root属性已由“ adb”设置,我们允许在userdebug构建中以root身份运行root“ command”。顺便说一下,这就是Kindle Fire的BurritoRoot的第一个版本IIRC的工作方式。

–eldarerathis
2012年1月24日20:33

#2 楼

好吧,如果您的手机已扎根,则可以使用“ 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中运行它时通常会遇到这种情况。

尝试一下,希望对您有所帮助。

评论


例如,您可以使用adb shell -t“ su -c'sh'”以root身份运行shell。需要-t来获得提示。

–gam3
20 Jan 18'在21:04

#3 楼

只需安装adbd Insecure。

#4 楼

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

如果应用程序请求root访问,那么手机上的SuperUser应用程序应处理是否给予其许可。手机植根的过程应该包含一个SuperUser应用程序。

评论


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

–汉克
2011年2月11日19:10

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

– Lie Ryan
2011年2月11日在19:24

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

–汉克
2011-2-11在19:38

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

–克里斯·斯特拉顿(Chris Stratton)
2011年5月15日在7:53



#5 楼

作为替代方案,您可以在电话上编写脚本,然后简单地让adb执行该脚本,例如:设置为记住批准),例如:

adb shell sh /sdcard/myscript.sh


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

#6 楼

我用于修复主页按钮问题失败


adb设备

adb shell su -c commands



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

adb kill-server

#7 楼

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


adb shell
-o重新安装,rw / system(或:adb重新安装)
ls -la / system / bin / sh
lrwxr-xr-x根外壳2012-11-10 15:20 sh -> mksh
chmod 4755 / system / bin / sh
ls -la / system / bin / mksh
-rwsr-xr-x根外壳157520 2012-11-10 09:54 mksh
(注意,设置了suid位)
^ D
adb shell

,并且应该具有root提示符

评论


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

–ce4
2012年11月27日10:32



绝对不要这样做,这是灾难性的安全漏洞。 (免责声明:我是mksh维护者。)

– mirabilos
2014年3月6日在9:57