authbind + java + ubuntu 仍然失败 - 为什么?

authbind + java + ubuntu 仍然失败 - 为什么?

请注意:

markk@ip-10-203-82-54:~/work/gl$ uname -a
Linux ip-10-203-82-54 3.2.0-25-virtual #40-Ubuntu SMP Wed May 23 22:20:17 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
markk@ip-10-203-82-54:~/work/gl$ ls -la /etc/authbind/byport/80
-rwxrwx--- 1 markk markk 0 Aug 16 10:00 /etc/authbind/byport/80
markk@ip-10-203-82-54:~/work/gl$ authbind /usr/bin/java -Dcom.shunra.gl.ports=80 -jar server.jar
java.net.SocketException: Permission denied
        at sun.nio.ch.Net.bind(Native Method)
        at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:137)
        at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:77)
        at org.simpleframework.transport.connect.Acceptor.bind(Acceptor.java:171)
        at org.simpleframework.transport.connect.Acceptor.<init>(Acceptor.java:88)
        at org.simpleframework.transport.connect.Listener.<init>(Listener.java:78)
        at org.simpleframework.transport.connect.ListenerManager.listen(ListenerManager.java:90)
        at org.simpleframework.transport.connect.ListenerManager.listen(ListenerManager.java:73)
        at org.simpleframework.transport.connect.SocketConnection.connect(SocketConnection.java:106)
        at org.restlet.ext.simple.HttpServerHelper.start(HttpServerHelper.java:93)
        at org.restlet.Server.start(Server.java:585)
        at org.restlet.Component.startServers(Component.java:601)
        at org.restlet.Component.start(Component.java:528)
        at com.shunra.gl.Main.main(Unknown Source)
^Cmarkk@ip-10-203-82-54:~/work/gl$

该机器位于亚马逊云端。

值得一提的是,当以 root 身份运行时,服务器可以按预期工作。

有任何想法吗?

谢谢。

附言

添加--deepauthbind 选项或-Djava.net.preferIPv4Stackjava 属性没有区别。

编辑

我已经安装了 tomcat6。它监听端口 8080。我可以在本地获取它的索引页,但不能使用 DNS 提供的机器名称从外部获取。但是,如果我将其端口从 8080 更改为 11111,那么我就可以从外部访问它。这意味着,对于这个问题,tomcat 服务器的行为与我自己的服务器完全一样。

答案1

Serverfault 可能不是回答您问题的最佳地点,因为我们无法下载您正在编写的程序并自行调试。您可能想在 stackoverflow 上提问。

首先:验证这是否是与系统管理员相关的实际问题。您可以通过尝试运行 tomcat 来做到这一点在您所尝试的配置中工作。

如果您无法使 Tomcat 工作,那么请询问该问题 - 解决该问题很有可能也会解决您遇到的问题。

另一方面,如果你让 Tomcat 轻松工作,您可以花更多时间查看您的应用程序,并可以尝试在 Stack Overflow 上询问与编程相关的问题。

答案2

我遇到了同样的问题,使用 Ubuntu 12.04.3 并尝试使用 authbind 启动 Java 应用程序。添加后-Djava.net.preferIPv4Stack=true问题就解决了。

显然,java 尝试在 IPv6 地址上打开端口,但 authbind 似乎尚不支持该地址。

答案3

您可以检查堆栈跟踪中所述的权限。很可能 markk 用户没有权限执行您的操作

相关内容