在 Redhat 5 上为非 root 用户使用 C++ 编写的网络套接字

在 Redhat 5 上为非 root 用户使用 C++ 编写的网络套接字

我用 C++ 编写了一个程序,它使用套接字与 Windows7 机器通信。

我以 root 用户身份运行了代码,一切正常。但是出于安全原因,我不想以 root 身份运行该程序。

首先,我创建了一个新用户来运行该程序,但是它不允许该用户启动新的套接字,因此我将该用户添加到 root 组并再次尝试,但 Redhat 不允许我以 root 用户以外的任何身份启动新的套接字。

我已经尝试禁用防火墙以排除此问题,但仍然没有成功。

那么,你们有人知道我应该更改/添加什么权限/组吗?


我在网上查了一下,发现:

/usr/sbin/setsebool -P httpd_can_network_connect=1

被认为是一种可能的治疗方法,但它似乎对我没有帮助。

答案1

但是 Redhat 不允许我以 root 用户以外的任何用户身份启动新的套接字。

那么您必须设置非常严格的 SELinux 策略。

您确定它不允许您使用小于 1024 的端口号创建监听套接字吗?

编辑

如果端口号不低于 1024,则为 SELinux 策略。您应该会看到 /var/log/messages 中记录的条目,表明端口被拒绝。

允许...

 /usr/sbin/semanage port -a -t <SEType> -p tcp 51717

日志中报告的类型在哪里,或者使用 http_port_t 将其添加到 http 类型中。请参阅这一页举个例子

答案2

您绑定到哪个端口?

低于 1024 的 TCP 端口绑定仅限于根用户。

您可以在程序中绑定套接字后放弃 root 权限,或者使用 iptables 重定向或 authbind 等解决方法;本文对许多选项进行了很好的讨论。Stack Overflow 上的问题

相关内容