绑定端口< 1024用于Java中的非root用户

时间:2012-03-22 09:24:35

标签: java linux

我有一个以非root模式运行的Java应用程序。

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

java.net.BindException: Permission denied

很明显,对于非root用户,我无法打开端口。这个问题有解决方法吗?

3 个答案:

答案 0 :(得分:4)

对于少于1024的端口的Linux绑定,您需要应用程序来运行root。没有办法解决这个问题。如果您需要这样做,您可以以root身份运行。 sudo 可能是要查看的命令。

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

答案 1 :(得分:2)

解决此问题。您可以使用setuid()setfid()系统调用。这样您就可以暂时提升权限,然后将权限放回用户权限。

答案 2 :(得分:1)

就我而言,此问题发生在Solaris 11 OS中。我为用户添加了使用1024以下端口的特权。

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