Capabilities & Linux & Java

Я экспериментирую с поддержкой Linux JAVA-приложения. Я не хочу добавлять возможности к интерпретатору (JVM), таким образом, я пытался записать простую обертку (с отладочной информацией, распечатанной к stdout):

#include <stdio.h>
#include <stdlib.h>
#include <sys/capability.h>
#include <unistd.h>

int main(int argc, char *argv[]){
        cap_t cap = cap_get_proc();

        if (!cap) {
                perror("cap_get_proc");
                exit(1);
        }
        printf("%s: running with caps %s\n", argv[0], cap_to_text(cap, NULL));

        return execlp("/usr/bin/java", "-server", "-jar", "project.jar", (char *)NULL);
}

Таким образом, я вижу, что возможность установлена для этого исполняемого файла:

./runner: running with caps = cap_net_bind_service+p

И getcap шоу

runner = cap_net_bind_service+ip

Мне установили возможность, чтобы быть наследуемым, таким образом, не должно быть никакой проблемы. Однако Java все еще не хочет связывать с привилегированными портами.

Я получаю эту ошибку:

sun/nio/ch/Net.java:-2:in `bind': java.net.SocketException: Permission denied (NativeException)

Кто-то может помочь мне разрешить это?

6
задан tomix86 2 January 2018 в 20:56
поделиться