[英]Using Java Program How to programmatically start Jetty on port 80 as non-root user
我正在嘗試以下程序:
SocketException: Permission Denied (as its PORT 80)
使用jetty文檔,我使用命令行工作,我改變
jetty-setuid.xm
l - Put用戶名是非root用戶 start.ini
- 更改為EXEC並將etc/jetty-setuid.xml
作為第一個參數傳遞 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/Port80和http://docs.codehaus.org/display/JETTY/port80 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.