Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何解决;setsockopt(3,SOL_插座,SO_标记,[10],4)=-1 EPERM“;无根用户的操作被拒绝_Linux_Sockets_Networking_Linux Capabilities_Setsockopt - Fatal编程技术网

Linux 如何解决;setsockopt(3,SOL_插座,SO_标记,[10],4)=-1 EPERM“;无根用户的操作被拒绝

Linux 如何解决;setsockopt(3,SOL_插座,SO_标记,[10],4)=-1 EPERM“;无根用户的操作被拒绝,linux,sockets,networking,linux-capabilities,setsockopt,Linux,Sockets,Networking,Linux Capabilities,Setsockopt,我有两个网络接口(以太网和wlan)。现在,我在github()上发现了一个小脚本,它似乎允许我通过无默认网关路由特定的应用程序,以稍微平衡流量 脚本正在使用以下调用: setsockopt(sd,SOL_插座,SO_标记,&MARK,sizeof(标记)) 正如我通过strace发现的:“-1 EPERM权限被拒绝”(如此命令所示,需要cap_net_管理员权限) 当我在命令前面使用“sudo”时,该工具可以工作。套接字是使用none默认网关创建的,并且工作方式与预期相同(例如wget a文件

我有两个网络接口(以太网和wlan)。现在,我在github()上发现了一个小脚本,它似乎允许我通过无默认网关路由特定的应用程序,以稍微平衡流量

脚本正在使用以下调用:
setsockopt(sd,SOL_插座,SO_标记,&MARK,sizeof(标记))

正如我通过strace发现的:“-1 EPERM权限被拒绝”(如此命令所示,需要cap_net_管理员权限) 当我在命令前面使用“sudo”时,该工具可以工作。套接字是使用none默认网关创建的,并且工作方式与预期相同(例如wget a文件)

例如:
MARK=10ld\u PRELOAD=./MARK.so wget-qO-ifconfig.me
使用默认网关(所以不是我想要的)
sudo-MARK=10 LD\u-PRELOAD=./MARK.so wget-qO-ifconfig.me
返回无默认网关的IP(我想要的但不使用sudo)

我在互联网上找到并尝试了一些东西:

  • 设置文件功能(setcap\u net\u admin+eip)(仍然需要root用户)
  • 使用SUID位(chmod u+s)(完全没有变化)
我希望命令在没有root权限的情况下运行,因此每个应用程序都可以使用none-default网关,但目前我需要使用
sudo
来获得足够的权限,以便在正确的界面上运行命令。
我缺少什么来记录我的目标?

你从错误的角度看待你的问题。您应该首先尝试强制应用程序绑定到正确的接口,而不是标记数据包

您可以尝试解释的追溯解决方案,它覆盖bind()和connect(),而不是socket()


但更现代的解决方案是创建一个单独的网络名称空间,然后在它们自己的名称空间中运行应用程序。谷歌
ipnetns
获取示例。创建和设置网络名称空间仍然需要root用户,但可以在运行应用程序之前删除这些权限。也可能有一些工具可以做到这一点。

下定决心吧。使用root权限运行它,或者不使用该系统调用。您不会说服系统放松其安全性。这看起来像C,而不是脚本:
setsockopt(sd,SOL_SOCKET,SO_MARK,&MARK,sizeof(MARK))。我认为你需要提供一个新的解决方案,这样人们就可以知道你在做什么。谢谢你对ip网络的提示。我已经看过文档,但是我的桌面环境(KDE)的反应是删除连接GUI的所有分配接口。有没有办法通过GUI配置界面?我的意思是,我可以通过安慰来做到,但如果没有适当的解释,我的父母肯定不能做到这一点。所以有一个GUI就好了。我将把答案标记为接受提示。(我将在我的用例中使用netns)