簡體   English   中英

使用Java程序如何以非root用戶身份以編程方式在端口80上啟動Jetty

[英]Using Java Program How to programmatically start Jetty on port 80 as non-root user

我正在嘗試以下程序:

  1. 如果我使用SUDO java運行everthing很好,但我不想使用SUDO
  2. 沒有SUDO我得到以下錯誤: SocketException: Permission Denied (as its PORT 80)

使用jetty文檔,我使用命令行工作,我改變

  1. jetty-setuid.xm l - Put用戶名是非root用戶
  2. start.ini - 更改為EXEC並將etc/jetty-setuid.xml作為第一個參數傳遞
  3. jetty.xml - 將端口號設置為80

然后我仍然以非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();
}

}

你必須在Unix上以某種方式使用sudo來升級到root權限。 否則你無法獲得端口80。

對於Java程序,sudo必須應用於java命令本身,但這通常是一個壞主意。

更保守的解決方案是綁定到另一個端口,比如8080,然后將端口80重新路由到該端口。 執行此操作的命令在操作系統之間變化很大,甚至可能在某些較舊的Unix版本中也不存在。

Sudo將命令的權限提升到根級別。 您需要在這里“sudo”(或者更一般地說,以root身份運行命令)的原因是,在Linux中,1024以下的端口保留給root。

換句話說 - 如果你不是root用戶,你不能在端口80上運行jetty(或任何其他服務)。

這里最簡單的解決方案是在另一個端口上運行Jetty(8080是常見端口)。

如果您仍希望用戶訪問默認端口上的服務,請訪問http://wiki.eclipse.org/Jetty/Howto/Port80http://docs.codehaus.org/display/JETTY/port80

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM