Um usuário não root executa o jetty pela porta 512, que é menor que port1024

3

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).

    
por Evans 16.10.2013 / 09:41

1 resposta

2

O executável Java depende de um recurso desativado pelo kernel quando o executável adquire permissões ou recursos adicionais , como medida de segurança. Se você quiser usar este executável como não-raiz, então você precisará adicionar a localização do libjli.so à sua configuração do carregador, localizada em /etc/ld.so.conf* .

    
por 16.10.2013 / 09:52