Eclipseからサーバーアプリケーションを実行しようとすると、エラーが発生します。エラーはJava.net.BindException:Permission deniedです。これは、SSL接続のセットアップにポート443を使用しているためだと思います。 JavaとSudoを使用してコマンドラインでコードを実行すると、この問題を回避できます。実行ボタンを押すとアプリケーションが実行されるようにEclipseを設定する方法はありますか? sudoで?
次の手順に従って、アプリケーションをスーパーユーザーとしてコンパイル/デバッグできます。
Javaアプリケーションの名前を変更する
Sudo mv/usr/lib/jvm/Java-6-openjdk/jre/bin/Java /usr/lib/jvm/Java-6-openjdk/jre/bin/Java.ori
次のスクリプトを作成し、/ usr/lib/jvm/Java-6-openjdk/jre/bin/Javaとして保存します。
#!/bin/bash # file: /usr/lib/jvm/Java-6-openjdk/jre/bin/Java # descr: Starter for jdk. Runs jdk as root when # cmd-line-arg "--run-as-root" is specified. # jre="/usr/lib/jvm/Java-6-openjdk/jre/bin/Java.ori" run_as_root=false args= # Filter command-line argument for arg in "$@" do case "$arg" in --run-as-root) run_as_root=true ;; *) args="$args $arg" ;; esac done # Remove leading whitespaces args=$(echo $args | sed -e 's/^[ \t]*//') if $run_as_root then echo "WARNING: Running as root!" gksu "$jre $args" else $jre $args fi
アクセス許可を変更して実行可能にする
Sudo chmod 0755/usr/lib/jvm/Java-6-openjdk/jre/bin/Java
スタートアップエクリプス
ルートとしてプロジェクトを実行するには、次の手順に従う必要があります。
注:アイデアは http://www.Eclipse.org/forums/index.php/mv/msg/87353/724852/#msg_724852
私はCではないJavaですが、これはどちらの場合でも機能するはずです。リモートデバッグを使用します-LOCALHOSTへの「リモート」接続を定義します。これにより、接続するユーザーを指定し、ROOTを指定できます。 。次に、デバッグ構成接続でリモートアプリケーションを定義します:LOCALHOST。メインタブの下部と接続のプロパティウィンドウの下にある[ターゲットパスへのダウンロードをスキップ]をオンにしてください。
より良い答えは、おそらく、これがニーズに対応し、可能であれば、ルーターの単純なポートリダイレクションである可能性があります。
Linux/unixに予約済みポートを強制的に開かせようとするのではなく、これを今開発しているだけで(インストールではなく)、デバッガーで実行したい場合は、ルーターを設定して、着信(外部)ポート443をポートにリダイレクトします。これは、現在のニーズにとってより便利です(たとえば、4433)。
私はほとんどのルーターがこれをサポートしていると思います。あなたのルーターがサポートしていない場合は、お母さんにクリスマスや誕生日のプレゼントに良いアイデアを与えます!
Linux(* nix)を使用している場合、Sudoコマンドを使用してEclipseセッションを開始してみませんか?
といった
Sudo ~/Eclipse/eclipse
これで、Eclipseから実行することは何でもSudoコンテキストになりますか?
this thread で述べたように:
Unix/Linuxシステムで1024未満のポートを開くには、「ルート」である必要があります。
引数
-Dorg.Eclipse.equinox.http.jetty.port=8080
を使用してリスンポートを変更しましたが、これは無視されているようです(スタックトレースによると)。「
-Dorg.osgi.service.http.port=8080
」を使用してください。
HTTPサービス で述べたように:
org.osgi.service.http.port
-HTTPサービスに使用するポート番号を指定します。このプロパティのデフォルト値は、OSGi仕様に従って80(root権限が必要)です。
org.osgi.service.http.port.secure
-安全なhttpサービスのために使用するポート番号を指定します。このプロパティのデフォルト値は、OSGi仕様に従って、443(ルート権限が必要)です。
たぶん、最後のプロパティを1024を超える値に変更しようとすると、特別な特権を必要とせずに機能する可能性があります。
別のオプションは、iptablesまたはipfilterを使用して、ポート80を1024を超えるポートに転送することです。
(実用的でわかりやすい説明へのリンクを提供していただけますか?)
外部ツール([実行]メニュー/外部ツール、またはツールバーの[実行/デバッグ]アイコンの横にあるアイコン)を使用する場合は、任意のスクリプトまたは好きなものを使用できます。スクリプトによって、昇格された権限などが与えられる場合があります。
一方、このようにアプリケーションをデバッグすると、実行コマンドもデバッグコマンドもこの外部ツール構成に関連付けられないため、非常に困難になる可能性があります。たぶん、アプリケーションのEclipseデバッガーを接続することは可能ですが、それがどのように可能かはわかりません。
これにはRemote Java Applicationメカニズムを使用できます。
あなたはこの道を行くかもしれません
setcap 'cap_net_admin=+ep' Server
したがって、透過的なデバッグが行われます(Sudoラッパーなし-gdbは問題ありません)。短所:ローカルセキュリティ違反です。
解決:
これを/ opt/my-stupid-Eclipseに配置します
#!/ bin/sh
setcap 'cap_net_admin = + ep cap_net_raw = + ep' $ 1
このスクリプトをchmod + xし、Sudo構成でホワイトリストに登録します。
ユーザー名ALL =(ALL)NOPASSWD:/ opt/my-stupid-Eclipse
これをメイクファイルに追加し、サーバーバイナリへのパスを指定します。
これで、かなり奇妙ですが安全なスクリプトがあり、他のユーザーが変更することはできません...そして、サーバーバイナリを悪意のあるコードに置き換えることには少し違反があります。 bashコマンドで汚染されていませんか?いいえ、違います。