お客様から、1024未満のポート512をバインドするWebシステムを実行する非rootユーザーを作成するように求められました。Webサーバー( jetty )が実行されている場合、これは例外です。
2013-10-16 14:49:51.406:WARN::failed Server@2c2893ce: Java.net.SocketException: Permission denied
2013-10-16 14:49:51.406:WARN::EXCEPTION
Java.net.SocketException: Permission denied
at Sun.nio.ch.Net.bind0(Native Method)
at Sun.nio.ch.Net.bind(Net.Java:444)
at Sun.nio.ch.Net.bind(Net.Java:436)
at Sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.Java:214)
そこで、root以外のユーザーが1024未満のポートをバインドする方法についていくつかの解決策を見つけました。最後に、使用した解決策は、setCapabilitiesによって「cap_net_bind_service」をJavaに設定しました。コマンドは次のとおりです。
Sudo setcap cap_net_bind_service+eip /usr/lib/jvm/jdk1.7.0_25/bin/Java
しかし、桟橋を再開すると、別のエラーが発生します。
[admin@VPRCEMSUSOFC04 bin]$ ./jetty.sh start
Starting Jetty: /usr/lib/jvm/jdk1.7.0_25/bin/Java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory
Java -version
を実行しても、例外が発生します。
[admin@VPRCEMSUSOFC04 bin]$ Java -version
Java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory
しかし、rootでログインすると、問題ありません。
[root@VPRCEMSUSOFC04 etc]# Java -version
Java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b15)
Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)
なぜこれが起こるのか理解できません。 rootユーザーと非rootユーザーで2つの異なる結果があるのはなぜですか。セット機能がこれに影響を与えるようです。
Linuxカーネルは2.6.32-220.el6.x86_64です。 OSはRedHat Enterprise Linux Serverリリース6.2(Santiago)です。
Java実行可能ファイルは、安全対策として 実行可能ファイルが追加のアクセス許可または機能を取得するとカーネルによって無効にされる の機能に依存します。この実行可能ファイルを使用する場合非ルートとして、libjli.soの場所をローダー構成に追加する必要があります。これは/etc/ld.so.conf*
にあります。