使用Java程序如何以非root用户身份在端口80上以编程方式启动Jetty [英] Using Java Program How to programmatically start Jetty on port 80 as non-root user

查看:188
本文介绍了使用Java程序如何以非root用户身份在端口80上以编程方式启动Jetty的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试以下节目:

  1. 如果我使用SUDO java来运行一切都很好,但是我不想使用 SUDO
  2. 没有SUDO,我得到以下错误:SocketException: Permission Denied (as its PORT 80)
  1. If i use SUDO java to run everthing is fine, but I don't want to use SUDO
  2. without SUDO i get following error: SocketException: Permission Denied (as its PORT 80)

使用码头文档,我可以在更改的命令行上使用

Using jetty documentation, I get this to work using command line where i change

  1. jetty-setuid.xm l-放置用户名是非root用户
  2. start.ini-更改为EXEC并将etc/jetty-setuid.xml作为第一个参数传递
  3. jetty.xml-将端口号设置为80
  1. jetty-setuid.xml -- Put user-name is non-root user
  2. start.ini -- Change to EXEC and passing etc/jetty-setuid.xml as first parameter
  3. jetty.xml -- To have port number as 80

然后我仍然以非root用户身份执行sudo,例如-> sudo java -jar start.jar Jetty以非root用户身份在端口80上启动.

then I still do sudo as non-root user -- like -> sudo java -jar start.jar Jetty starts on port 80 as non-root user.

我想使用JAVA程序实现相同的目的.任何帮助/评论表示赞赏.

I want to ACHIEVE the same using JAVA Program. Any help/comments are appreciated.

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.

You must use sudo somehow on Unix to elevate to root priviledges. Otherwise you cannot get port 80.

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

For Java programs, the sudo must be applied to the java command itself, but it is generally a bad idea to do that.

一种更为保守的解决方案是绑定到另一个端口(例如8080),然后将端口80重新路由到该端口.在不同的操作系统之间,这样做的命令千差万别,甚至在某些较旧的Unix版本中甚至可能不存在.

A more conservative solution is to bind to another port, say 8080, and then reroute port 80 to that port. The commands to do so varies wildly between operating systems and may not even exist on some older Unix-versions.

这篇关于使用Java程序如何以非root用户身份在端口80上以编程方式启动Jetty的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆