Como usar a interface de rede como usuário não root no Android? [fechadas]

2

Eu quero me comunicar entre o meu dispositivo Android e minha caixa Linux sobre IP através do modo de interface de rede USB.

Eu conectei meu dispositivo Android à minha caixa do Linux e coloquei o dispositivo Android no modo de interface de rede através de algum hackery de reflexão Java. (Eu não estou usando a configuração de tethering padrão no Android porque eu quero usar minha caixa de Linux como o gateway e não o contrário). Eu usei ip addr add para adicionar um endereço IP em ambas as extremidades (caixa Linux e dispositivo Android) e, em seguida, adicionei uma rota com ip route via minha caixa Linux para acesso à Internet. Também habilitei o encaminhamento IPv4 no lado da caixa do Linux, bem como habilitar todas as regras iptables necessárias.

Meu problema é este: somente root pode se comunicar pela interface. Por exemplo, com minha caixa do Linux em 10.42.0.1 e o dispositivo Android em 10.42.0.2 na interface de rede USB, executar ping 10.42.0.1 ou ping 8.8.8.8 no dispositivo Android sem executar a partir de su shell não será trabalho . Executar exatamente os mesmos comandos como root funciona perfeitamente. Os mesmos comandos sobre a interface WiFi no lado do Android são executados sem raiz.

Estou assumindo que este é um novo recurso de segurança implementado no Android 5.0 / 5.1, pois funcionou bem no KitKat. Estou postando isso aqui porque acredito que o problema se deve a algo que foi ativado no kernel ou algo diferente do Android. Como eu realmente não tenho muita experiência em networking, eu esperava que alguém pudesse me dizer o que eu preciso fazer para aliviar o problema.

    
por jackos2500 18.08.2015 / 14:13

1 resposta

0

Outras funções de rede funcionam? Tente telnet de uma máquina para outra. Se você conseguir se conectar como root, e não como não-root, você tem um problema. Mesmo se você receber "Conexão recusada" (ou algo similar) como root e "Permission denied" (ou algo similar) como non-root, você tem um problema.

TL; DR

Se outras funções de rede funcionarem como não raiz, você provavelmente não tem um problema. O programa ping usa o protocolo ICMP, cujo uso é restrito à raiz. Portanto, o programa ping é geralmente instalado setuid  para root. Fazer

ls -ld $(which root)

Se não for de propriedade de root e setuid ( ---s--x--x pelo menos), faça isso executando

chown root path_to_ping
chmod 4755 path_to_ping

como root.

    
por 19.08.2015 / 01:22