在Java中为非根用户绑定

在Java中为非根用户绑定,java,linux,Java,Linux,我有一个Java应用程序,它以非根模式运行 我的应用程序将使用apache commons TFTP创建TFTP服务器。TFTP服务器绑定到端口690默认TFTP端口。从IDE运行应用程序时,一切正常,因为IDE以root用户身份运行。但是如果应用程序是从其他用户运行的,我会得到错误 java.net.BindException: Permission denied 很明显,对于非root用户,我无法打开端口。是否有解决此问题的方法?对于Linux上端口数小于1024的绑定,您需要应用程序运行

我有一个Java应用程序,它以非根模式运行

我的应用程序将使用apache commons TFTP创建TFTP服务器。TFTP服务器绑定到端口690默认TFTP端口。从IDE运行应用程序时,一切正常,因为IDE以root用户身份运行。但是如果应用程序是从其他用户运行的,我会得到错误

java.net.BindException: Permission denied

很明显,对于非root用户,我无法打开端口。是否有解决此问题的方法?

对于Linux上端口数小于1024的绑定,您需要应用程序运行根目录。这是没有办法的。如果需要这样做,您可以以root身份运行。sudo可能是需要调查的命令


顺便说一句,以root用户身份运行IDE不是一个很好的主意。

要在Linux上绑定1024个以下的端口,需要应用程序来运行root。这是没有办法的。如果需要这样做,您可以以root身份运行。sudo可能是需要调查的命令


顺便说一句,以root用户身份运行IDE不是一个好主意。

来解决这个问题。您可以使用setuid和setfid系统调用。以便您可以临时提升权限,然后将权限放回用户权限。

以解决此问题。您可以使用setuid和setfid系统调用。因此,您可以临时提升权限,然后将权限放回用户权限。

在我的例子中,此问题发生在Solaris 11操作系统中。我为用户添加了使用1024以下端口的权限


在我的例子中,这个问题发生在Solaris 11操作系统中。我为用户添加了使用1024以下端口的权限


我认为这是不可能的。我也为此做了很多尝试,但是我做不到。我需要端口69,因为第三方应用程序将向端口69发送一个文件:Java在这里不相关,这是一个更广泛的问题。我认为这是不可能的。我也为此做了很多尝试,但是我做不到。我需要端口69,因为第三方应用程序将向端口69发送一个文件:Java在这里不相关,这是一个更广泛的问题。查看我的设备已根目录,应用程序位于system/priv app中,但仍无法绑定小于1024的端口。我的设备已根目录,应用程序位于system/priv app中,但仍无法绑定小于1024的端口。