O cliente nos pede para criar um usuário não-root para executar nosso sistema da Web que vincula a porta 512, menor que 1024. Quando o servidor da Web ( jetty ) é executado, esta é a exceção:
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)
Então eu descobri algumas soluções sobre como o usuário não-root vincula a porta a menos de 1024, finalmente a solução que usei foi definida como "cap_net_bind_service" para java, por meio de set Capabilities, o comando é:
sudo setcap cap_net_bind_service+eip /usr/lib/jvm/jdk1.7.0_25/bin/java
Mas quando eu começo o jetty novamente, outro erro acontece:
[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
Mesmo quando executo java -version
, também causa uma exceção:
[admin@VPRCEMSUSOFC04 bin]$ java -version
java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory
Mas quando eu faço login com root, tudo bem:
[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)
Não consigo entender por que isso acontece. Por que existem dois resultados diferentes sob o usuário root e não-root. Parece que os recursos definidos afetam isso.
O kernel do Linux é 2.6.32-220.el6.x86_64. OS é o Servidor Red Hat Enterprise Linux versão 6.2 (Santiago).