サーバー アプリケーションを Eclipse から実行しようとすると、エラーが発生します。エラーはjava.net.BindException: Permission deniedです。これは、ポート 443 を使用して SSL 接続をセットアップしているためだと思います。java と sudo を使用してコマンド ラインでコードを実行すると、この問題を回避できます。実行ボタンを押すとアプリケーションが sudo で実行されるように Eclipse をセットアップする方法はありますか?
9 に答える
次の手順に従って、スーパーユーザーとしてアプリケーションをコンパイル/デバッグできます。
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
起動日食
- [ウィンドウ] -> [設定] -> [Java] -> [インストール済みの JRE] に移動します。
- java-6-openjdk を java-6-openjdk-root に複製します
- JRE を編集し、デフォルトの VM 引数として「--run-as-root」を追加します
プロジェクトをルートとして実行するには、次の手順に従う必要があります。
- [プロジェクト] -> [プロパティ] -> [Java ビルド パス] に移動します。
- JRE System Library をダブルクリックし、代替 JRE で「java-6-openjdk-root」を選択します。
注:アイデアはhttp://www.eclipse.org/forums/index.php/mv/msg/87353/724852/#msg_724852からのものです
Linux (*nix) を使用していると仮定すると、sudo コマンドを使用して Eclipse セッションを開始するのはどうですか?
そのような
sudo ~/eclipse/eclipse
今、あなたが日食から何をしても、sudoコンテキストがありますか?
おそらく、これがニーズを満たし、可能であれば、より良い答えは、ルーターの単純なポートリダイレクトである可能性があります.
Linux/Unix に予約済みのポートを強制的に開かせる代わりに、これを開発しているだけで (インストールはしていません)、デバッガーで実行したい場合は、ルーターを設定して着信 (外部) ポート 443 をポートにリダイレクトします。これは、現在のニーズにとってより便利です (4443 など)。
ほとんどのルーターがこれをサポートしていると思いますが、あなたのルーターがサポートしていない場合は、お母さんへのクリスマスや誕生日のプレゼントに最適です。
別のオプションは、iptables または ipfilter を使用してポート 80 を 1024 より上のポートに転送することです。
(誰かが実用的でわかりやすい説明へのリンクを提供できますか?)
このスレッドで述べたように:
Unix/Linux システムで 1024 未満のポートを開くには、「root」になる必要があります。
リッスンポートを変更する引数も使用しました
-Dorg.eclipse.equinox.http.jetty.port=8080
が、これは無視されているようです(スタックトレースによると)「 」を使用してください
-Dorg.osgi.service.http.port=8080
。
HTTP サービスで述べたように:
org.osgi.service.http.port
- http サービスに使用するポート番号を指定します。OSGi 仕様に従って、このプロパティのデフォルト値は 80 (ルート権限が必要) です。org.osgi.service.http.port.secure
- 安全な http サービングに使用するポート番号を指定します。OSGi 仕様に従って、このプロパティのデフォルト値は 443 (ルート権限が必要) です。
最後のプロパティを 1024 を超える値に変更しようとすると、特別な特権を必要とせずに機能する可能性があります。
私はJavaではなくCを書いていますが、これはどちらの場合でも機能するはずです。私はリモート デバッグを使用します。接続先のユーザーを指定できる LOCALHOST への「リモート」接続を定義し、ROOT を指定します。次に、デバッグ構成接続でリモート アプリケーションを定義します: LOCALHOST。メインタブの下部と接続プロパティウィンドウの下にある「ターゲットパスへのダウンロードをスキップする」を必ずチェックしてください。
外部ツール (実行メニュー/外部ツール、またはツールバーの実行/デバッグ アイコンの横にあるアイコン) を使用する場合は、任意のスクリプトまたは好きなものを使用できます。スクリプトは、昇格された権限などを与える場合があります。
一方、この方法では、実行コマンドもデバッグ コマンドもこの外部ツール構成に関連付けられないため、アプリケーションのデバッグが非常に難しくなる可能性があります。アプリケーションの Eclipse デバッガーを接続することは可能かもしれませんが、それがどのように可能かはわかりません。
あなたはこの道を行くかもしれません
- javac 呼び出しで Makefile を作成する
- 次の行を追加します。
setcap 'cap_net_admin=+ep' Server
- sudo を構成して、Eclipse ユーザーが setcap を実行できるようにします。
したがって、透過的なデバッグが行われます (sudo ラッパーなし - gdb は問題ありません)。短所: ローカルのセキュリティ違反です。
解決:
これを /opt/my-stupid-eclipse に入れます
#!/ビン/sh
setcap 'cap_net_admin=+ep cap_net_raw=+ep' $1
このスクリプトを chmod +x し、sudo config でホワイトリストに登録します。
ユーザー名 ALL=(ALL) NOPASSWD: /opt/my-stupid-eclipse
これをメイクファイルに追加し、Server バイナリへのパスを指定します。
これで、他のユーザーが変更できない、かなり奇妙ですが安全なスクリプトが作成されました...サーバーバイナリを悪意のあるコードに置き換えると、キャップが取得されるため、ファイル名のチェック/制限は役に立ちません.. can $1 bashコマンドで汚染されていますか?いいえ、そうではありません。