2012-03-22 9 views
1

私は非ルートモードとして実行しているJavaアプリケーションを持っています。Javaの非rootユーザーのために1024未満のポートをバインドする

私のアプリケーションは、(apache commons tftpを使用して)TFTPサーバを作成します。 TFTPサーバはポート69(デフォルトのTFTPポート)にバインドされています。 IDEからアプリケーションを実行すると、IDEがルートとして実行されているので、すべて正常に動作します。アプリは、他のユーザから実行された場合、私はエラー

java.net.BindException: Permission denied 

を取得するにはroot以外のユーザーのために、私はポートを開くことができないことは明らかです。この問題の回避策はありますか?

よろしく
Dheeraj女子

+1

私はできないと思います。私もこれを試してみましたが、できませんでした。 –

+0

ああ。サードパーティのアプリケーションがポート69にファイルを送信するので、私はポート69にする必要があります: –

+3

Javaはここでは関係ありません、これははるかに広い問題です。http://stackoverflow.com/questions/413807/is-there- a-way-for-non-root-processes-to-bind-to-privileged-ports-1024-l-l – skaffman

答えて

4

少ない1024を使用して、ルートを実行するために、アプリケーションに必要なことを、ポートのLinux上での結合のため。これを回避する方法はありません。これを行う必要がある場合は、root権限で実行します。 sudoが検索対象となる可能性があります。

BTW - IDEをルートとして実行することはあまり良い考えではありません。

2

この問題を解決します。 setuid()setfid()システムコールを使用できます。一時的に権限を昇格させてから、権限をユーザー権限に戻すことができます。

関連する問題