我用 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 上的问题。