在 Java 中为非 root 用户绑定端口< 1024



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

我的应用程序将创建一个TFTP服务器(使用apachecommons-TFTP)。TFTP服务器绑定到端口69(默认TFTP端口)。当从IDE运行应用程序时,由于IDE以root用户身份运行,所以一切都很好。但如果应用程序是从其他用户运行的,我会得到错误

java.net.BindException: Permission denied

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

对于小于1024端口的Linux绑定,您需要应用程序来运行根。这是没有办法的。如果你需要这样做,你必须以root身份运行sudo可能是要研究的命令。

BTW-以root用户身份运行IDE不是一个好主意。

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

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

https://technicalsanctuary.wordpress.com/2014/06/03/allowing-a-user-to-use-ports-under-1024-on-solaris-11/

相关内容

最新更新