Existe uma maneira de eu executar o shell Adb como root sem digitar 'su'?

45

Existe uma maneira de eu executar o shell Adb como root sem digitar su? Quero poder ter acesso root sem entrar no shell.

Hank
fonte

Respostas:

40

Se estou entendendo sua pergunta corretamente, você está perguntando como obter acesso root automaticamente quando você executa adb shell, para não precisar entrar no shell e digitar supara executar um comando como root no telefone.

Isso é controlado por um sinalizador na partição de inicialização, que a maioria das ROMs personalizadas modificou para permitir a permissão root por padrão. Se você cair para a $quando usar adb shell, você tem duas opções permanentes e uma temporária (temporária, o que significa que não será mantida se você reiniciar):

  1. Piscar uma ROM que inclui a modificação
  2. Crie um boot.img personalizado e faça o flash no seu telefone
  3. Reinicie adbdno seu dispositivo com permissões de root

O número 2 não é tão difícil, mas pode ser um pouco perigoso se você for descuidado. Há um artigo wiki aqui que explica o processo e inclui alguns scripts Perl para ajudá-lo. Essas instruções assumem um ambiente Linux / Unix. Eu pessoalmente usei essas instruções no Fedora Linux e posso dizer que elas funcionam, mas não conheço outros ambientes * nix como Macs. Também não conheço instruções semelhantes do Windows, mas poderia tentar rastrear algumas se você estiver no Windows. Os comandos exatos variam um pouco de telefone para telefone, pois dispositivos diferentes usam tabelas de partição diferentes.

De maneira geral, porém, você precisa extrair o boot.img atual do telefone, descompactá-lo, extrair o ramdisk e encontrar o arquivo default.prop . Este é um arquivo de texto sem formatação, que você precisa abrir em um editor de texto e, em seguida, localize a linha que contém o valor ro.secure. Se a linha indicar ro.secure=1, você precisará alterá-lo para ro.secure=0. Depois disso, você pode reembalar o ramdisk e o boot.img e depois enviá-lo para o seu telefone. Depois de reiniciar, você será recebido com um #aviso sempre que executar adb shellsem precisar executar su.

Como alternativa, se você estiver usando uma ROM personalizada, mas ela não tiver essa modificação, basta descompactar a ROM e modificar o boot.img que está incluído nas etapas acima. Em seguida, você pode compactar a ROM com o boot.img recém-modificado e atualizar o arquivo zip como faria normalmente.

Provavelmente isso é desnecessário, mas tenha cuidado ao fazer isso. Mexer com a partição de inicialização pode facilmente destruir o telefone e forçá-lo a se recuperar via HBoot. Eu recomendo testar o Fastboot para garantir que você possa usar comandos estendidos do Fastboot e executar uma recuperação. Isso varia um pouco com base no seu modelo, mas a maioria dos telefones possui algum tipo de software de desktop que pode ser executado para atualizar o telefone também.


A terceira opção é que, em muitos casos, pode ser possível reiniciar adbdno seu dispositivo com privilégios de root. Uma possibilidade é executar a adb rootpartir de um terminal de PC, embora isso não funcione em todas as configurações de ROM (a ROM deve ser construída como uma "depuração do usuário"). Você também pode experimentar o aplicativo inseguro adbd da Chainfire . Isso não persistirá durante uma reinicialização; portanto, você precisará usar o aplicativo ou adb rootnovamente sempre que reiniciar o telefone.

eldarerathis
fonte
O telefone também inicializa com permissões de root? Pode ser um problema de segurança.
Matthew Leia
1
@ Matthew: AFAIK, ele só permite adbdter permissão de root no telefone por padrão. Há uma postagem de um membro da equipe do Android que implica isso, mas não diz isso explicitamente. Esse comprometimento com o AOSP também implica que é simplesmente um sinalizador que adbdverifica a inicialização (não o vejo em nenhum outro lugar na fonte). Como eu mencionei, a maioria das ROMs personalizadas que eu vi (incluindo o CM) o definiram como 0. #
eldarerathis
Vou dizer que não sou 100% acima, no entanto. Não consigo encontrar qualquer documentação oficial relacionada com o arquivo default.prop, embora talvez o meu Google-fu é apenas fraco esta noite ...
eldarerathis
Acabei de descobrir o adb rootcomando para reiniciar o adbd no modo auto-su, aparentemente ele depende disso. Eu acho que você estava certo sobre ser apenas uma bandeira.
Matthew Leia
1
@ MatthewRead: O código-fonte no commit ao qual eu me vinculei realmente tem um comentário nesse sentido :) // ... except we allow running as root in userdebug builds if the service.adb.root property has been set by the "adb root" command". Aliás, foi assim que a primeira versão do BurritoRoot para o Kindle Fire funcionou, IIRC.
eldarerathis
15

Bem, se o telefone estiver enraizado, você poderá executar comandos com o comando "su -c".

Aqui está um exemplo de um comando cat no arquivo build.prop para obter informações sobre o produto do telefone.

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

Isso chama a permissão root e executa o comando dentro do ''

Observe as 5 cotações finais, pois é necessário que você feche TODAS as cotações finais ou você receberá um erro.

Para esclarecimento, o formato é o seguinte.

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

Certifique-se de inserir o comando EXATAMENTE da maneira que você faria normalmente ao executá-lo no shell.

Experimente, espero que ajude.

Ajster1989
fonte
1

O que você está tentando executar como root? Você está dizendo que deseja executar o shell ADB com root, mas não deseja usar o shell ADB? Você pode esclarecer?

Se o aplicativo solicitar acesso root, o aplicativo SuperUser do telefone deverá permitir a permissão ou não. O processo em que você enraizou o telefone deveria ter incluído um aplicativo SuperUser.

Bryan Denny
fonte
Eu quero correr adb shell gdbserver do meu terminal em vez de ir em shell para executá-lo
Hank
2
@Hank: um terminal quase sempre precisa estar conectado a um shell para realizar qualquer trabalho útil; talvez você deve esclarecer a sua definição de "terminal" e "shell" desde que você parece ter uma idéia diferente do que eles eram do que em Linux linguagem standard / Android
Lie Ryan
para que você possa fazer adb shell psou adb shelle psobter a lista de processos em execução. Então, algumas coisas exigem acesso root, eu quero poder fazer a primeira.
Hank
1
O motivo "por que" (especialmente no que diz respeito ao gdbserver) seria poder usar o recurso em um script em execução na máquina de desenvolvimento. No entanto, é possível que um script direcione comandos para o que o adb considera um shell interativo; portanto, ter o padrão do adb como root não é necessário por esse motivo.
Chris Stratton
1

Como alternativa, você pode escrever seu script no telefone e simplesmente pedir para executá-lo, por exemplo:

adb shell sh /sdcard/myscript.sh

O script pode elevar-se sem a sua intervenção (supondo que o SuperUser esteja configurado para lembrar a aprovação), por exemplo:

su
pm setInstallLocation 1

Acabei de fazer isso no meu telefone com sucesso, o único problema é que ainda não descobri como encerrar corretamente a sessão do shell adb. Eu tenho que Ctrl-C no meu shell do Windows para retornar ao prompt de comando do Windows - caso contrário, o adb fica no #prompt e não aceita entrada.

Matthew Read
fonte
0

eu uso para reparar o problema do botão home


dispositivos adb

shell adb su -c commands

ou

shell raiz adb sqlite3 /data/data/com.android.providers.settings/databases/settings.db "INSERIR EM VALORES seguros (nome, valor) ('device_provisioned', '1');"

adb kill-server

mauro kit barcelona
fonte
-1

Você também pode definir o suid bit no seu 'sh'. Estou usando o BusyBox para que as instruções não correspondam à sua configuração:

  1. shell adb
  2. su
  3. mount -o remount, rw / system (ou: adb remount)
  4. Você está aqui: Página Inicial '' Notícias '' Notícias '' Notícias '' Notícias
  5. chmod 4755 / sistema / bin / sh
  6. ls -la / system / bin / mksh
    -rwsr-xr-x root shell 157520 2012-11-10 09:54 mksh (observe que o bit suid está definido)
  7. ^ D
  8. shell adb

e você deve ter o prompt raiz

looneybits
fonte
3
-1 de mim. Isso é inseguro e abre um buraco enorme. Qualquer APP pode se tornar raiz e causar estragos.
CE4
6
Absolutamente não faça isso, este é um furo de segurança catastrófico . (Isenção de responsabilidade: eu sou o mkshmantenedor.)
mirabilos