我用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这个问题有很多讨论。