使用Java程序如何以非root用户身份以编程方式在端口80上启动Jetty

时间:2012-11-06 19:21:14

标签: java jetty port

我正在尝试关注程序:

  1. 如果我使用SUDO java运行everthing很好,但我不想使用 SUDO
  2. 没有SUDO我收到以下错误:SocketException: Permission Denied (as its PORT 80)
  3. 使用jetty文档,我使用命令行工作,我改变了

    1. jetty-setuid.xm l - Put user-name是非root用户
    2. start.ini - 更改为EXEC并将etc/jetty-setuid.xml作为第一个参数
    3. 传递
    4. jetty.xml - 要将端口号设为80
    5. 然后我仍然以非root用户身份执行sudo - 比如 - > sudo java -jar start.jar Jetty作为非root用户在端口80上启动。

      我想用JAVA程序实现同样的目标。任何帮助/评论都表示赞赏。

      package my.package;
      
      import org.eclipse.jetty.server.Server;
      import org.eclipse.jetty.server.handler.ContextHandlerCollection;
      import org.eclipse.jetty.server.handler.ResourceHandler;
      import org.eclipse.jetty.server.Connector;
      import org.eclipse.jetty.server.nio.SelectChannelConnector;
      
      public class JettyTest {
      
      
      public static void main(String[] args) throws Exception
      {
          Server server = new Server();
          System.out.println("Created new server, now going to start");
          SelectChannelConnector connector0 = new SelectChannelConnector();
          connector0.setPort(80); //on port 80
          connector0.setMaxIdleTime(30000);
          connector0.setRequestHeaderSize(8192);
      
          server.setConnectors(new Connector[]{ connector0 });
      
          server.setHandler(new MyHandler()); //simple hello world handler
      
          server.start();
          System.out.println("started server on port 80");
          server.join();
      }
      
      }
      

2 个答案:

答案 0 :(得分:2)

你必须在Unix上以某种方式使用sudo来升级到root权限。否则你无法获得80端口。

对于Java程序,sudo必须应用于java命令本身,但这通常是一个坏主意。

更保守的解决方案是绑定到另一个端口,比如8080,然后将端口80重新路由到该端口。执行此操作的命令在操作系统之间存在很大差异,甚至可能在某些较旧的Unix版本中也不存在。

答案 1 :(得分:0)

Sudo将命令的权限提升到根级别。您需要在这里“sudo”(或者更一般地说,以root身份运行命令)的原因是,在Linux中,1024以下的端口保留给root。

换句话说 - 如果你不是root用户,你就不能在端口80上运行jetty(或任何其他服务)。

这里最简单的解决方案是在另一个端口上运行Jetty(8080是常见端口)。

如果您仍希望用户在默认端口上访问该服务,请咨询http://wiki.eclipse.org/Jetty/Howto/Port80http://docs.codehaus.org/display/JETTY/port80