我有一个以非root模式运行的Java应用程序。
我的应用程序将创建一个TFTP服务器(使用apache commons tftp)。 TFTP服务器绑定到端口69(默认TFTP端口)。从IDE运行应用程序时,一切正常,因为IDE以root身份运行。但如果应用程序是从其他用户运行我得到错误
java.net.BindException: Permission denied
很明显,对于非root用户,我无法打开端口。这个问题有解决方法吗?
答案 0 :(得分:4)
对于少于1024的端口的Linux绑定,您需要应用程序来运行root。没有办法解决这个问题。如果您需要这样做,您可以以root身份运行。 sudo 可能是要查看的命令。
BTW - 以root身份运行IDE并不是一个好主意。
答案 1 :(得分:2)
解决此问题。您可以使用setuid()
和setfid()
系统调用。这样您就可以暂时提升权限,然后将权限放回用户权限。
答案 2 :(得分:1)
就我而言,此问题发生在Solaris 11 OS中。我为用户添加了使用1024以下端口的特权。