3

私は次のプログラムを試しています:

  1. SUDO Java を使用してすべてを実行する場合は問題ありませんが、SUDO は使用したくありません
  2. SUDO がないと、次のエラーが発生します。SocketException: Permission Denied (as its PORT 80)

桟橋のドキュメントを使用して、変更したコマンドラインを使用してこれを機能させます

  1. jetty-setuid.xml -- put user-name は非 root ユーザーです
  2. start.ini -- EXEC に変更しetc/jetty-setuid.xml、最初のパラメーターとして渡す
  3. jetty.xml-- ポート番号を 80 にする

次に、非ルートユーザーとしてsudoを実行します--> sudo java -jar start.jar Jettyはポート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();
}

}
4

2 に答える 2

2

root 権限に昇格するには、何らかの方法で Unix で sudo を使用する必要があります。そうしないと、ポート 80 を取得できません。

Java プログラムの場合、sudo を java コマンド自体に適用する必要がありますが、一般的にそれを行うことはお勧めできません。

より保守的な解決策は、別のポート (たとえば 8080) にバインドしてから、ポート 80 をそのポートに再ルーティングすることです。これを行うコマンドは、オペレーティング システムによって大きく異なり、一部の古い Unix バージョンには存在しない場合もあります。

于 2012-11-07T00:12:14.693 に答える
0

Sudo は、コマンドの権限を root レベルに昇格させます。ここで「sudo」が必要な理由 (または、より一般的に言えば、root としてコマンドを実行する必要がある理由) は、Linux では 1024 未満のポートが root に予約されているという事実です。

つまり、ルートでない場合、ポート 80 で jetty (またはその他のサービス) を実行することはできません。

ここでの最も簡単な解決策は、別のポート (8080 が一般的なポート) で Jetty を実行することです。

ユーザーが引き続きデフォルト ポートでサービスにアクセスできるようにする場合は、http://wiki.eclipse.org/Jetty/Howto/Port80およびhttp://docs.codehaus.org/display/JETTY/port80を参照してください。

于 2012-11-07T11:35:25.780 に答える