用户模式权限被拒绝绑定到套接字

Posted

技术标签:

【中文标题】用户模式权限被拒绝绑定到套接字【英文标题】:user mode permission denied to bind to socket 【发布时间】:2011-05-03 15:28:23 【问题描述】:

在 linux 机器上的用户模式 ​​[非 root] 中,我尝试使用 ioctl(iInterfaceSocket, SIOCSIFADDR, &stCommand) 绑定套接字。我收到error 13 -> Permission denied because of user mode。如果从用户模式更改为内核模式,一切正常。

我只需要在用户模式下绑定套接字。请在解释上述问题时提出解决方案。如果我错过了任何信息,请告诉我,我会提供更多信息。

【问题讨论】:

@user736403 - 你到底想达到什么目的? SIOCSIFADDR 不绑定套接字,bind() 绑定。 SIOCSIFADDR 设置机器的网络接口地址。 只是一个小问题:以 root 身份运行程序与在内核模式下运行非常不同。以 root 身份运行的程序大部分时间仍以用户模式运行;他们只是拥有更高的特权。所有进程(无论是否为root)在进行ioctl之类的系统调用时都会在用户模式和内核模式之间切换。 【参考方案1】:

除非您是 root,否则您无法设置接口地址(嗯,从技术上讲,除非您有 CAP_NET_ADMIN)。见devinet.c。

解决方案是以 root 身份运行。如何实现该解决方案,是否使您的整个程序为 SUID,或者要求用户通过sudo 或gksudo 运行它,或者是否将您的程序分为两部分(root 和非 root),选择是由你决定。

【讨论】:

以上是关于用户模式权限被拒绝绑定到套接字的主要内容,如果未能解决你的问题,请参考以下文章

Android - 绑定移动网络套接字时权限被拒绝(OkHttp.socketFactory(network.socketFactory))

Pig - 地图缩减模式下的权限被拒绝

启动用户态代理时出错:绑定 0.0.0.0:80:意外错误权限被拒绝

引起:android.system.ErrnoException:绑定失败:EACCES(权限被拒绝)

用户自己的架构的表上的SELECT权限被拒绝

苹果拒绝PhoneGap App:数据收集和存储