
El cliente nos solicita que creemos un usuario no root para ejecutar nuestro sistema web que enlaza el puerto 512, menos que 1024. Cuando el servidor web (embarcadero) se ejecuta, esta es la excepción:
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)
Así que descubrí algunas soluciones sobre cómo el usuario no root vincula el puerto inferior a 1024. Por último, la solución que utilicé fue configurar "cap_net_bind_service" en Java, al establecer Capacidades, el comando es:
sudo setcap cap_net_bind_service+eip /usr/lib/jvm/jdk1.7.0_25/bin/java
Pero cuando inicio jetty nuevamente, ocurre otro error:
[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
Incluso cuando ejecuto java -version
, también provoca una excepción:
[admin@VPRCEMSUSOFC04 bin]$ java -version
java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory
Pero cuando inicio sesión con root, está bien:
[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)
No puedo entender por qué sucede esto. Por qué hay dos resultados diferentes en usuarios root y no root. Parece que las capacidades establecidas impactan esto.
El kernel de Linux es 2.6.32-220.el6.x86_64. El sistema operativo es Red Hat Enterprise Linux Server versión 6.2 (Santiago).
Respuesta1
El ejecutable de Java se basa en una característica que esdeshabilitado por el kernel cuando el ejecutable adquiere permisos o capacidades adicionales, como medida de seguridad. Si desea utilizar este ejecutable como no root, deberá agregar la ubicación de libjli.so a la configuración de su cargador, ubicada en /etc/ld.so.conf*
.