顧客は、Web システムを実行するために root ではなくユーザーを作成する必要があります。このユーザーは 1024 より小さいポート 512 にバインドされます。 Webサーバー(橋脚)、これは例外です。
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未満のポートをバインドできる方法についていくつかの解決策を見つけました。最終的に使用した解決策は、set Capabilityを介して「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)
なぜこれが起こるのかわかりません。ルートユーザーとルート以外のユーザーに2つの異なる結果が表示されるのはなぜですか?設定機能がこれに影響するようです。
Linuxカーネルは2.6.32-220.el6.x86_64です。オペレーティングシステムはRed Hat Enterprise Linux Serverバージョン6.2(San Diego)です。
答え1
Java実行可能ファイルは次の機能を使用します。実行可能ファイルが追加の権限または機能を取得すると、カーネルによって無効になります。、安全対策として。この実行可能ファイルを非rootユーザーとして使用するには、ローダー構成にlibjli.soの場所を追加する必要があります/etc/ld.so.conf*
。