6

私はJavaアプリケーション用のLinux機能を試しています。インタープリター(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)

誰かが私がこれを解決するのを手伝ってもらえますか?

4

2 に答える 2

1

1024 以上のポートを使用するか、root として実行してみてください。

于 2011-10-08T03:18:27.160 に答える