Sotto Android 4, il seguente semplice riga di codice nativo C fallisce con un errore Permission denied
quando non Esegui come root
:cosa può causare un errore socket() "Autorizzazione negata"?
online_socket = socket(AF_INET, SOCK_DGRAM, 0);
ho fare hanno root
accesso al dispositivo, ma vogliono per eseguire il processo come utente non privilegiato.
Si noti che l'errore si verifica anche prima del binding del socket.
Immagino ci sia qualche impostazione di sicurezza che deve essere modificata? Qualcuno può dirmi dove cercare?
In questo caso, l'O/S è davvero Android, ma suppongo che il problema sia realmente legato a Linux (poiché Android è basato su un kernel Linux).
Per coloro che si chiedono: questo è un programma personalizzato eseguito in un'installazione completa() di Debian Jessie in esecuzione in un ambiente Android 4.
Aggiornamento
ho imparato che il kernel Android ha uno speciale CONFIG_ANDROID_PARANOID_NETWORK
estensione che consente l'accesso alla rete solo agli utenti in AID_INET
e AID_NET_RAW
gruppi.
Tuttavia, anche dopo aver aggiunto l'utente a questi gruppi, socket()
è ancora respinto (e ping
sembra avere lo stesso problema, BTW).
uid=5(imp) gid=51(imp) groups=51(imp),3003(aid_inet),3004(aid_net_raw),3005(aid_admin),3001(aid_bt),3002(aid_bt_net)
Non posso dire se questo CONFIG_ANDROID_PARANOID_NETWORK
flag è impostato in questo particolare Kernel, come io non ho accesso al file di configurazione.
Update 2
ho scoperto che sia root
e anche il mio utente non privilegiato imp
può infatti chiamare con successo socket()
- almeno con la messa a punto i gruppi di cui sopra.
Tuttavia, chiamando lo stesso processo di root
e poi passare a imp
usando la chiamata di sistema seteuid()
impedisce socket()
da riuscire. Qualche idea?
non ottengo un errore sotto Arch Linux su un computer portatile x68_64. Sospetto che questa sia una cosa di Android. –
Hai provato a utilizzare un protocollo diverso da "0" (terzo parametro)? Ad esempio: 6 per tcp o 17 per udp? In realtà, sarà necessario utilizzare il protocollo 17 per un socket Datagram udp. –
@gerhardd. - Ho appena provato a cambiare il protocollo a 17, ma sfortunatamente questo non aiuta. Non dovrei che il programma in questione funzioni bene in un certo numero di altre piattaforme * non-Android * con Kernel che vanno dal 2.4 al 4.4 –