用于非root用户的Redhat 5上的C ++networking套接字

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

我已经作为root用户运行的代码,一切工作正常。 但是,我不想以root身份运行程序,出于安全原因。

首先,我创build了一个新用户来运行程序,但不会让用户启动一个新的套接字,所以我将用户添加到根组,然后再试一次,但Redhat不会让我启动一个新的套接字但根用户。

我试过这个防火墙禁用只是为了排除,仍然没有运气。

那么,你们有没有想过应该更改/添加哪些权限/组?


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

/usr/sbin/setsebool -P httpd_can_network_connect=1 

build议作为一种可能的治疗,但它似乎并没有帮助我。

但Redhat不会让我开始一个新的套接字作为除root用户以外的任何东西。

那么你必须设置一个非常严格的SELinux策略。

你确定它不会让你创build一个使用小于1024的端口号监听套接字吗?

编辑

如果端口号不低于1024,那么这是SELinux策略。 您应该看到logging在/ var / log / messages中的条目表明它正在被拒绝。

允许…

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

在日志中报告types的位置或使用http_port_t将其添加到httptypes中。 看到这个页面的例子

你绑定了什么端口?

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

在程序中绑定套接字后,可以删除root权限,或者使用类似于iptablesredirect或authbind的解决方法; 关于Stack Overflow这个问题有很多讨论。