Como invoco "su" em um prompt do terminal?

7

Posso obter um prompt root no terminal executando uma exploração documentada em outro lugar. (por exemplo, aqui: http://wiki.cyanogenmod.com/wiki/Motorola_Droid_2_Global:_Full_Update_Guide )

Neste ponto, eu posso instalar o binário "su" e conceder permissões 4755. Isso deve permitir a qualquer pessoa executá-lo e, como o proprietário do binário é "root" e o bit fixo está definido, eu devo me tornar root. Mas, aparentemente, não tenho como remover a raiz do terminal antes da reinicialização. Mas, após a reinicialização, parece que não consigo me tornar root usando 'su'.

$ ls -l /system/bin/su
-rwsr-xr-x root    app_101    26234 2012-07-09 15:00 su

Ok, as permissões parecem boas, eu deveria poder executá-lo para se tornar root, mas apenas nessa chamada específica do terminal.

$ /system/bin/su
Permission denied

Também falha se eu especificar o comando para executar como root ou com qualquer outro argumento:

$ /system/bin/su /system/bin/sh
Permission denied

Por quê? Existe algum outro mecanismo em ação? Não quero instalar o Superuser.apk, porque só quero uma maneira de obter temporariamente um shell raiz, se necessário, por exemplo, para excluir manualmente os arquivos indesejados. Além disso, o Superuser.apk depende do binário su de qualquer maneira, então ele deve ter uma maneira de chamá-lo, então por que não consigo replicar isso no terminal?

Edit: Eu tinha outro pensamento, então tentei copiar / bin / sh para outra localização e o fiz suid root. Mas enquanto eu posso executar o novo binário, ele não me dá raiz. O Android está fazendo algo complicado / diferente com suid que o Linux comum não faz?

Michael
fonte
11
Ter um 'su' desprotegido no dispositivo é bastante arriscado, pois qualquer coisa que tente usá-lo o obterá sem a confirmação do usuário de que coisas como esse aplicativo de superusuário tentam adicionar como gateway.
Chris Stratton
Certo, bem ... eu estava tentando planejar com antecedência. Não tinha certeza de como uma atualização subsequente tentaria se livrar do su, então eu o coloquei em vários lugares diferentes com nomes diferentes. Acontece que a atualização remove o bit pegajoso e não consigo executar o suid de outros lugares além do sistema. Ah bem.
Michael

Respostas:

6

A pista está no ID do proprietário / grupo ...

$ ls -l /system/bin/su
-rwsr-xr-x root    app_101    26234 2012-07-09 15:00 su

Observe que o ID do grupo está definido como 'app_101', que deve ser 'root', mas, novamente, você precisa do busyboxbinário (que faz parte do binário SuperUser.apk, quando instalado, copia o respectivo binário relevante /system/xbin) em ordem ser capaz chowndisso.

t0mm13b
fonte
Sim, isso seria um problema Em última análise busybox não é necessário como estoque chown android pode alterar o grupo, bem como, usando nome de arquivo user.group chown (pelo menos do Froyo-ICS)
Chris Stratton
1

Tente adicionar a -copção. por exemplo

su -c sh

ou

 su -c 'echo bogus'

(para mais argumentos)

d14b0ll0s
fonte
0

Um pouco mais cavando e acho que encontrei a resposta. O motivo pelo qual não está funcionando é porque o aplicativo Terminal não solicita permissão de superusuário no manifesto, por exemplo:

<uses-permission android:name="android.permission.ACCESS_SUPERUSER"/>

Essa camada extra de segurança parece ser porque o aplicativo de terminal é um aplicativo java, embora faça um bom trabalho de ocultá-lo. O superusuário parece calçar as coisas de alguma maneira, para que os aplicativos java possam obter essa permissão, mesmo que não soubessem que precisavam dela quando foram criados.

Michael
fonte
2
ACCESS_SUPERUSERpermissão não está conectada com o seu problema
janot 05/10