🗒️Tips-解决Linux系统中非管理员权限运行的程序无法使用1024以下的端口号
2025-2-20
| 2025-2-20
字数 460阅读时长 2 分钟
type
status
date
slug
summary
tags
category
icon
password
@ZZHow(ZZHow1024)

现象

  • 直接运行 Java 编写的网络程序在 Linux 系统下运行无法使用 1024 以下的端口号
  • 使用管理员权限运行 Java 编写的网络程序在 Linux 系统下运行可以使用 1024 以下的端口号

解决方法1

  • 使用管理员权限运行希望使用 1024 以下的端口号的程序

解决方法2

  • 使用 Linux 系统的能力机制,给 JVM 允许绑定到任何端口的能力
这个命令的作用是为 /usr/lib/jvm/java-21-openjdk/bin/java 文件赋予特定的能力。我们可以将其解读如下:
  1. sudo: 这表明该操作需要超级用户权限,因此使用 sudo 来以 root 用户身份执行。
  1. setcap: 这是一个命令行工具,用于设置文件的特权安全标识符(capabilities)。它允许赋予或撤销文件特定的系统能力,而无需将其提升为 root 权限。
  1. cap_net_bind_service=+eip: 这是指定要设置的 capabilities 参数。
      • cap_net_bind_service: 表示允许绑定到任何端口(通常需要 root 权限)。
      • +eip 是一个操作符,表示在当前能力上添加新权限:
        • + 意味着添加新的权限。
        • e 表示该能力应当被设置为有效(effective)。
        • i 表示该能力应当被设置为可继承(inheritable)。
        • p 意味着该能力是在文件路径中的一级目录最后一个元素上生效。
  1. /usr/lib/jvm/java-21-openjdk/bin/java: 这是指定的可执行文件路径,也就是 Java 运行时环境(JRE)或者 JDK 的 java 命令。该命令允许你在不需要 root 权限的情况下将 Java 应用程序绑定到低于 1024 系列的端口上。

参考文献

  • Tips
  • Linux
  • 大学英语1复习Tips-解决SpringBoot项目中路径参数带“/”导致404错误
    Loading...