【问题标题】:Dose an application (executable jar) need permission to listen on a port on centos?应用程序(可执行jar)是否需要权限才能监听centos上的端口?
【发布时间】:2018-04-30 07:04:17
【问题描述】:

我正在运行一个从 Eclipse 导出为可执行 JAR 的 Spring Boot 应用程序。我已经在 Windows 机器上的本地主机上对其进行了测试,包括 Eclipse 和可执行 JAR。

在我的本地 Windows 机器上,我可以使用 Firefox 的 RESTClient 连接到可执行 JAR 的 REST API。可执行文件在我的 Windows 设备上初始化时也成功地向远程服务器发送了一条消息。

我正在尝试将可执行文件部署到 CentOS 设备上进行测试。我通过将输入的默认设置设置为使用 IP 表接受,允许所有流量通过防火墙(我知道,这是一个非常糟糕的主意,但设备在演示中不会存活超过几分钟)。

可执行 JAR 在 CentOS 系统上运行。它说它正在侦听端口 8080,它在初始化时成功地将信息发送到另一个远程服务器;但我无法访问 Spring 应用程序提供的 REST API。

可执行文件在 CentOS 服务器上启动,没有任何复杂性。我可以 ping centOS 服务器,我可以 SSH 进入服务器;但是当我尝试使用 RESTCLient 访问机器时,我被告知 URL 无效,当我尝试使用浏览器发出 GET 请求时,我被告知连接已重置。当我尝试与设备建立连接时,在 spring 应用程序的控制台上没有任何记录。

我可以以这种方式将应用程序部署到 CentoOS 服务器还是需要额外的权限来监听端口?请指教!

【问题讨论】:

  • 禁用 selinux 并尝试。
  • @Nonika 我没有禁用 SELinux。我已经禁用了 SELinux,但仍然无法连接到应用程序。在 linux 系统上运行的应用程序是否需要特殊权限才能绑定到端口?
  • 1024以下的端口一般需要权限。但我认为没有权限问题。你能通过 tcpdump 检查数据包是否来了吗?
  • @Nonika,感谢您的建议。我会检查一下,但现在没有时间这样做。我现在即将完成大学学业,但几个月后将继续学习这门课程。我很想知道出了什么问题。就目前而言,我让它适用于 VM 上的一个版本的可执行文件,但它不适用于 VM 上的另一个版本的可执行文件,所以我只能假设这是 JAR 的错,但我没有更改任何Jar 版本之间的 Spring Boot 配置。

标签: java linux spring spring-boot centos


【解决方案1】:

您是否激活了防火墙? 所以你必须在防火墙设置中打开端口:

firewall-cmd --zone=public --add-port=8080/tcp --permanent

然后记得重新加载防火墙以使更改生效。

firewall-cmd --reload

【讨论】:

  • 您好,谢谢您的建议。我对 IPTables 中的输入链没有任何规则,并且我将输入链的默认设置设置为接受所有流量。这足以让流量通过罐子吗?我没有运行任何其他防火墙。我得到了这个适用于一个版本的 Jar 而不是同时适用于另一个版本的程序并且忘记回复,我道歉......我现在假设它与可执行文件有关。我想我的主要问题仍然是,在 Linux 上运行的程序需要特殊权限才能绑定到防火墙规则(和 SELinux)之外的端口
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多