web-dev-qa-db-ja.com

Eclipseからスーパーユーザーとしてアプリケーションを実行するにはどうすればよいですか?

Eclipseからサーバーアプリケーションを実行しようとすると、エラーが発生します。エラーはJava.net.BindException:Permission deniedです。これは、SSL接続のセットアップにポート443を使用しているためだと思います。 JavaとSudoを使用してコマンドラインでコードを実行すると、この問題を回避できます。実行ボタンを押すとアプリケーションが実行されるようにEclipseを設定する方法はありますか? sudoで?

25
Ronald

次の手順に従って、アプリケーションをスーパーユーザーとしてコンパイル/デバッグできます。

  1. Javaアプリケーションの名前を変更する

    Sudo mv/usr/lib/jvm/Java-6-openjdk/jre/bin/Java /usr/lib/jvm/Java-6-openjdk/jre/bin/Java.ori

  2. 次のスクリプトを作成し、/ 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
    
  3. アクセス許可を変更して実行可能にする

    Sudo chmod 0755/usr/lib/jvm/Java-6-openjdk/jre/bin/Java

  4. スタートアップエクリプス

  5. Window-> Preferences-> Java-> Installed JREsに移動します
  6. Java-6-openjdkからJava-6-openjdk-rootへの複製
  7. JREを編集し、デフォルトとして「--run-as-root」を追加VM引数

ルートとしてプロジェクトを実行するには、次の手順に従う必要があります。

  1. Project-> Properties-> Java Build Pathに移動します
  2. JREシステムライブラリをダブルクリックし、代替JREで「Java-6-openjdk-root」を選択します。

注:アイデアは http://www.Eclipse.org/forums/index.php/mv/msg/87353/724852/#msg_724852

15
rednammoc

私はCではないJavaですが、これはどちらの場合でも機能するはずです。リモートデバッグを使用します-LOCALHOSTへの「リモート」接続を定義します。これにより、接続するユーザーを指定し、ROOTを指定できます。 。次に、デバッグ構成接続でリモートアプリケーションを定義します:LOCALHOST。メインタブの下部と接続のプロパティウィンドウの下にある[ターゲットパスへのダウンロードをスキップ]をオンにしてください。

1
Eric Spencer

より良い答えは、おそらく、これがニーズに対応し、可能であれば、ルーターの単純なポートリダイレクションである可能性があります。

Linux/unixに予約済みポートを強制的に開かせようとするのではなく、これを今開発しているだけで(インストールではなく)、デバッガーで実行したい場合は、ルーターを設定して、着信(外部)ポート443をポートにリダイレクトします。これは、現在のニーズにとってより便利です(たとえば、4433)。

私はほとんどのルーターがこれをサポートしていると思います。あなたのルーターがサポートしていない場合は、お母さんにクリスマスや誕生日のプレゼントに良いアイデアを与えます!

1
Sean

Linux(* nix)を使用している場合、Sudoコマンドを使用してEclipseセッションを開始してみませんか?

といった

Sudo ~/Eclipse/eclipse

これで、Eclipseから実行することは何でもSudoコンテキストになりますか?

1
ring bearer

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を超える値に変更しようとすると、特別な特権を必要とせずに機能する可能性があります。

1
VonC

別のオプションは、iptablesまたはipfilterを使用して、ポート80を1024を超えるポートに転送することです。

(実用的でわかりやすい説明へのリンクを提供していただけますか?)

1
Stephen C

外部ツール([実行]メニュー/外部ツール、またはツールバーの[実行/デバッグ]アイコンの横にあるアイコン)を使用する場合は、任意のスクリプトまたは好きなものを使用できます。スクリプトによって、昇格された権限などが与えられる場合があります。

一方、このようにアプリケーションをデバッグすると、実行コマンドもデバッグコマンドもこの外部ツール構成に関連付けられないため、非常に困難になる可能性があります。たぶん、アプリケーションのEclipseデバッガーを接続することは可能ですが、それがどのように可能かはわかりません。

0
Zoltán Ujhelyi

これにはRemote Java Applicationメカニズムを使用できます。

  1. 作成デバッグ構成リモートJavaアプリケーションセクション実行->デバッグ構成...
  2. プロジェクト名を設定する
  3. 接続タイプを選択標準(ソケット接続)
  4. バインディングの接続プロパティパラメータを構成します(あなたにとってはlocalhost443になります) )。
  5. アプリにブレークポイントを設定します(たとえば、mainメソッドの最初)
  6. 次のパラメーターを使用して、スーパーユーザーとしてターミナルからアプリを実行します。-Java Xdebug -Xrunjdwp:transport = dt_socket、server = y、address = 443 MyApp
  7. Eclipseでデバッグボタンを押して、早期に作成Remote Java Application
  8. コードはEclipseのブレークポイントで停止する必要があります!
0
Michael Z

あなたはこの道を行くかもしれません

  1. javac呼び出しでMakefileを作成する
  2. 次の行を追加します。
setcap 'cap_net_admin=+ep' Server
  1. eclipseユーザーがsetcapを実行できるようにSudoを構成します。

したがって、透過的なデバッグが行われます(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コマンドで汚染されていませんか?いいえ、違います。

0
kagali-san