我们有一个用java编写的web服务(使用Axis1.4)。我们在c++代码中使用gSOAP (2.8.101)访问它。我们使用的是OpenSSL (1.1.1e)。在RHEL 8上,我们看到了SOAP1.2的错误。错误如下:SOAP1.2错误: SOAP :接收方没有子代码“权限被拒绝”详细信息:连接在tcp_connect()中失败
同样的代码在RHEL7中也能很好地工作。对如何解决这个问题有什么建议吗?
发布于 2020-05-12 10:53:04
似乎是SELinux阻塞了连接。若要暂时允许连接,可以使用setenforce 0。这将无法在服务器重新启动的情况下存活,因此,如果您想让它存活下来,您需要将SELinux设置为在/etc/selinux/config中以permissive模式工作。
要继续在enforcing模式下工作,取决于应用程序,可能会有一个内置SELinux策略,仅通过启用适当的布尔值,就可以允许将SELinux设置为enforcing的连接。您可以通过执行以下命令获得所有SELinux布尔值的列表:
getsebool -a # List all available SELinux booleans on your system例如,为了允许HTTPD脚本和模块连接到网络,启用以下SELinux布尔值:
sudo setsebool -P httpd_can_network_connect on如果不允许HTTPD连接到任何端口,则可以使用适当的布尔值:
sudo setsebool -P httpd_can_network_connect_db on这将允许HTTPD通过网络连接到数据库。如果没有合适的布尔值可供启用,则必须构建自己的策略。您可以使用audit2allow -M命令来完成这一任务。例如,如果在audit.log中生成错误的命令是httpd,则可以执行以下操作:
sudo ausearch -c 'httpd' --raw | audit2allow -M my-policy
sudo semodule -X 300 -i my-policy.pp通常,如果服务有内置布尔值,那么使用audit2allow来允许对服务的访问并不是一个好做法。如果您的病人服务没有合适的布尔值,请使用audit2allow作为您的最后手段。
https://stackoverflow.com/questions/61747379
复制相似问题