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?


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.


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)


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.


2
ACCESS_SUPERUSERpermissão não está conectada com o seu problema
— janot 05/10
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.