Возможности, Linux и Java - PullRequest
6 голосов
/ 14 июня 2010

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

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

Может кто-нибудь помочь мне решить эту проблему?

Ответы [ 2 ]

1 голос
/ 08 октября 2011

Попробуйте использовать порт выше 1024 или запустите от имени root.

0 голосов
/ 02 октября 2013

Любое обновление?

Вы можете найти ответы на некоторые вопросы в проекте jsvc Apache Commons-Daemon: «... набор библиотек и приложений для упрощения работы приложений Java в UNIX».

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...