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