Что может вызвать ошибку сокета() «Отказано в доступе»?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Что может вызвать ошибку сокета() «Отказано в доступе»?

Сообщение Anonymous »

В Android 4 следующая простая строка собственного кода C завершается с ошибкой с

Код: Выделить всё

Permission denied
[/b] ошибка, когда не запускается от имени пользователя root:

Код: Выделить всё

online_socket = socket(AF_INET, SOCK_DGRAM, 0);
У меня есть root доступ к устройству, но я хочу запустить процесс от имени непривилегированного пользователя.

Обратите внимание, что ошибка возникает еще до привязки сокета.

Я думаю, есть некоторые настройки безопасности, которые необходимо настроить. ? Кто-нибудь может сказать мне, где искать?

В данном случае ОС на самом деле является Android, но я думаю, что проблема действительно связана с Linux (поскольку Android основан на ядро Linux).

Для тех, кому интересно: это специальная программа, работающая в полном (

Код: Выделить всё

debootstrap
ped) Установка Debian Jessie, работающая в среде Android 4.

Обновление

Я узнал, что ядро ​​Android имеет специальное расширение CONFIG_ANDROID_PARANOID_NETWORK, которое разрешает доступ к сети только пользователям в группах AID_INET и AID_NET_RAW.

Однако даже после добавления пользователя в эти группы вызов socket() по-прежнему отклоняется (и ping, похоже, имеет ту же проблему, кстати).

Код: Выделить всё

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)
Я не могу сказать, установлен ли этот флаг CONFIG_ANDROID_PARANOID_NETWORK в этом конкретном ядре, поскольку у меня нет доступа к файлу конфигурации.

Обновление 2

Я обнаружил, что оба root и также мои непривилегированные пользователь имп может на самом деле успешно вызвать метод socket() - по крайней мере, с настройкой групп, описанной выше.

Однако вызов того же процесса от имени пользователя root и последующее переключение на имп с помощью

Код: Выделить всё

seteuid()
[/b] системный вызов предотвращает успешное выполнение функции socket(). Есть идеи?

Подробнее здесь: https://stackoverflow.com/questions/364 ... nied-error
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»